[SCM] eclipse - Powerful IDE written in java - Debian package. branch, upstream-3.6, updated. 088de2fb40b252d6360b9b4efd2352306a060dbe
Benjamin Drung
bdrung-guest at alioth.debian.org
Sat Oct 2 00:08:46 UTC 2010
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "eclipse - Powerful IDE written in java - Debian package.".
The branch, upstream-3.6 has been updated
via 088de2fb40b252d6360b9b4efd2352306a060dbe (commit)
via 8993080c6ffdd5903b729213373024d4f947a971 (commit)
from 264e65a60e8df23aa0b76d0664da9608fa048ba0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 088de2fb40b252d6360b9b4efd2352306a060dbe
Author: Benjamin Drung <bdrung at ubuntu.com>
Date: Sat Oct 2 02:06:05 2010 +0200
Import eclipse-build trunk branch (revision 25506).
commit 8993080c6ffdd5903b729213373024d4f947a971
Author: Benjamin Drung <bdrung at ubuntu.com>
Date: Sat Oct 2 02:04:20 2010 +0200
Import eclipse 3.6.1 (eclipse-3.6.1-src.tar.bz2).
find eclipse \( -name '*.xpt' -o -name '*.jar' -o -name '*.class' \) -delete
find eclipse -iname '*.zip' ! -iname '*src.zip' -delete
cd eclipse/plugins/org.eclipse.osgi.services
unzip src.zip -d src
cd ../../..
find eclipse -iname '*.zip' -delete
find -type d -print0 | xargs -0 chmod 755
find -type f -print0 | xargs -0 chmod 644
find -type f -name '*.sh' -print0 | xargs -0 chmod 755
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 11 +
build.xml | 145 +-
buildSDKSource.sh | 14 +-
eclipse/directory.txt | 292 +-
eclipse/featureVersions.properties | 18 +-
.../org.eclipse.equinox.executable/feature.xml | 2 +-
.../library/eclipse.c | 4 +-
.../library/eclipseConfig.c | 11 +-
.../library/gtk/eclipseGtk.c | 19 +-
.../library/gtk/make_solaris.mak | 2 +-
.../library/make_version.mak | 2 +-
.../library/win32/eclipseWin.c | 4 +
.../org.eclipse.equinox.p2.user.ui/feature.xml | 3 +-
.../features/org.eclipse.equinox.sdk/feature.xml | 4 +-
eclipse/features/org.eclipse.jdt/feature.xml | 4 +-
eclipse/features/org.eclipse.pde/feature.xml | 2 +-
eclipse/features/org.eclipse.platform/feature.xml | 2 +-
.../org.eclipse.platform/rootfiles/.eclipseproduct | 2 +-
.../rootfiles/readme/readme_eclipse.html | 3684 +++++++++++++++++++-
eclipse/features/org.eclipse.rcp/feature.xml | 5 +-
eclipse/features/org.eclipse.sdk/feature.xml | 2 +-
eclipse/label.properties | 6 +-
eclipse/maps/org.eclipse.releng/maps/ant.map | 2 +-
eclipse/maps/org.eclipse.releng/maps/core.map | 68 +-
eclipse/maps/org.eclipse.releng/maps/doc.map | 10 +-
eclipse/maps/org.eclipse.releng/maps/feature.map | 18 +-
eclipse/maps/org.eclipse.releng/maps/jdtapt.map | 8 +-
eclipse/maps/org.eclipse.releng/maps/jdtcore.map | 16 +-
eclipse/maps/org.eclipse.releng/maps/jdtdebug.map | 6 +-
eclipse/maps/org.eclipse.releng/maps/jdtui.map | 10 +-
eclipse/maps/org.eclipse.releng/maps/p2.map | 26 +-
eclipse/maps/org.eclipse.releng/maps/pde.map | 14 +-
eclipse/maps/org.eclipse.releng/maps/rcp.map | 2 +-
eclipse/maps/org.eclipse.releng/maps/releng.map | 2 +-
eclipse/maps/org.eclipse.releng/maps/swt.map | 62 +-
eclipse/maps/org.eclipse.releng/maps/team.map | 8 +-
eclipse/maps/org.eclipse.releng/maps/text.map | 6 +-
eclipse/maps/org.eclipse.releng/maps/ui.map | 18 +-
eclipse/maps/org.eclipse.releng/maps/update.map | 2 +-
.../maps/org.eclipse.releng/maps/userassist.map | 12 +-
eclipse/pluginVersions.properties | 226 +-
.../META-INF/MANIFEST.MF | 2 +-
.../ProgramLaunchDelegate.java | 30 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../filesystem/local/unix/UnixFileNatives.java | 6 +-
.../org.eclipse.core.jobs/META-INF/MANIFEST.MF | 2 +-
.../org/eclipse/core/internal/jobs/JobManager.java | 7 +-
.../META-INF/MANIFEST.MF | 2 +-
.../eclipse/core/internal/resources/Resource.java | 2 +
.../org.eclipse.debug.ui/META-INF/MANIFEST.MF | 2 +-
.../contexts/DebugModelContextBindingManager.java | 5 +-
.../LaunchConfigurationsDialog.java | 2 +
.../ui/viewers/breadcrumb/BreadcrumbViewer.java | 39 +-
.../ui/viewers/model/TreeModelContentProvider.java | 6 +-
.../ui/views/expression/ExpressionView.java | 3 +
.../debug/ui/actions/DebugCommandAction.java | 8 +-
.../org.eclipse.ecf.ssl/META-INF/MANIFEST.MF | 7 +-
eclipse/plugins/org.eclipse.ecf/javadoc.xml | 2 +-
.../org.eclipse.equinox.app/META-INF/MANIFEST.MF | 2 +-
.../equinox/internal/app/EclipseAppHandle.java | 4 +-
.../org.eclipse.equinox.ds/META-INF/MANIFEST.MF | 2 +-
.../equinox/internal/ds/InstanceProcess.java | 25 +-
.../org/eclipse/equinox/internal/ds/Resolver.java | 14 +-
.../internal/ds/impl/ComponentFactoryImpl.java | 23 +-
.../internal/ds/model/ServiceComponentProp.java | 14 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../.project | 0
.../META-INF/MANIFEST.MF | 2 +-
.../about.html | 0
.../build.properties | 0
.../customBuildCallbacks.xml | 0
.../launcher.gtk.linux.ppc64.properties | 0
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../.classpath | 7 -
.../.project | 22 -
.../META-INF/MANIFEST.MF | 2 +-
.../build.properties | 6 -
.../launcher.wpf.win32.x86.properties | 12 -
.../META-INF/MANIFEST.MF | 2 +-
.../p2/artifact/repository/MirrorSelector.java | 4 +-
.../simple/SimpleArtifactRepository.java | 26 +-
.../META-INF/MANIFEST.MF | 2 +-
.../plugins/org.eclipse.equinox.p2.core/pom.xml | 2 +-
.../equinox/internal/p2/core/helpers/Tracing.java | 2 +
.../META-INF/MANIFEST.MF | 2 +-
.../p2/director/app/DirectorApplication.java | 7 +
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.equinox.p2.director/pom.xml | 2 +-
.../equinox/internal/p2/director/Projector.java | 7 +-
.../internal/p2/director/SimplePlanner.java | 67 +
.../equinox/internal/p2/director/Slicer.java | 18 +-
.../provisional/p2/director/PlanVerifier.java | 25 +
.../META-INF/MANIFEST.MF | 2 +-
.../pom.xml | 2 +-
.../CachingArtifactRepository.java | 16 +-
.../p2/directorywatcher/RepositoryListener.java | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.equinox.p2.publisher/pom.xml | 2 +-
.../internal/p2/publisher/eclipse/ProductFile.java | 14 +-
.../p2/publisher/AbstractPublisherApplication.java | 36 +-
.../equinox/p2/publisher/IPublisherInfo.java | 7 +
.../p2/publisher/eclipse/BundlesAction.java | 13 +-
.../p2/publisher/eclipse/FeaturesAction.java | 2 +-
.../equinox/spi/p2/publisher/PublisherHelper.java | 28 +-
.../META-INF/MANIFEST.MF | 2 +-
.../repository/comparator/java/Disassembler.java | 22 +
.../META-INF/MANIFEST.MF | 2 +-
.../internal/p2/repository/CacheManager.java | 6 +-
.../helpers/AbstractRepositoryManager.java | 3 +-
.../META-INF/MANIFEST.MF | 2 +-
.../pom.xml | 2 +-
.../internal/p2/update/ConfigurationWriter.java | 10 +-
.../equinox/internal/p2/update/PathUtil.java | 16 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.equinox.p2.ui.admin.rcp/pom.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.equinox.p2.updatechecker/pom.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../updatesite/UpdateSitePublisherApplication.java | 19 +
.../org.eclipse.help.base/META-INF/MANIFEST.MF | 2 +-
.../eclipse/help/internal/base/BaseHelpSystem.java | 14 +-
.../eclipse/help/internal/base/HelpDisplay.java | 11 +
.../help/internal/base/scope/ScopeUtils.java | 35 +-
.../help/internal/protocols/HelpURLConnection.java | 12 +-
.../internal/protocols/HelpURLStreamHandler.java | 3 +
.../eclipse/help/internal/search/SearchIndex.java | 2 +-
.../help/internal/server/JettyHelpServer.java | 7 +-
.../org.eclipse.help.ui/META-INF/MANIFEST.MF | 2 +-
.../preferences/HelpContentPreferencePage.java | 8 +-
.../help/ui/internal/search/LocalHelpPage.java | 9 +-
.../help/ui/internal/views/ContextHelpPart.java | 27 +-
.../org.eclipse.help.webapp/META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.help.webapp/build.properties | 3 +-
.../help/internal/webapp/data/LayoutData.java | 2 +-
.../eclipse/help/internal/webapp/data/UrlUtil.java | 21 +-
.../internal/webapp/servlet/ChildLinkInserter.java | 40 +-
.../internal/webapp/servlet/EclipseConnector.java | 9 +-
.../internal/webapp/servlet/FramesetFilter.java | 14 +-
.../org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.jdt.apt.core/build_notes.html | 12 +
.../internal/declaration/AnnotationValueImpl.java | 3 +-
.../META-INF/MANIFEST.MF | 2 +-
.../apt/pluggable/core/filer/IdeFilerImpl.java | 14 +-
.../org.eclipse.jdt.core/.settings/.api_filters | 26 -
.../org.eclipse.jdt.core/META-INF/MANIFEST.MF | 2 +-
.../internal/compiler/batch/messages.properties | 2 +-
.../org.eclipse.jdt.core/buildnotes_jdt-core.html | 164 +
.../jdt/internal/codeassist/CompletionEngine.java | 12 +
.../eclipse/jdt/core/compiler/CharOperation.java | 4 +-
.../jdt/internal/compiler/ast/CastExpression.java | 1 +
.../compiler/ast/CompilationUnitDeclaration.java | 2 +-
.../jdt/internal/compiler/ast/DoStatement.java | 6 +-
.../jdt/internal/compiler/ast/ForStatement.java | 8 +-
.../jdt/internal/compiler/ast/IfStatement.java | 5 +-
.../jdt/internal/compiler/ast/MessageSend.java | 3 +
.../compiler/ast/QualifiedNameReference.java | 14 +-
.../jdt/internal/compiler/ast/Statement.java | 8 +
.../jdt/internal/compiler/ast/SwitchStatement.java | 66 +-
.../jdt/internal/compiler/ast/WhileStatement.java | 7 +
.../internal/compiler/classfmt/AnnotationInfo.java | 32 +-
.../compiler/classfmt/ClassFileReader.java | 23 +-
.../compiler/classfmt/ElementValuePairInfo.java | 37 +-
.../jdt/internal/compiler/env/ClassSignature.java | 28 +-
.../compiler/env/EnumConstantSignature.java | 31 +-
.../jdt/internal/compiler/flow/FlowContext.java | 25 +
.../jdt/internal/compiler/flow/FlowInfo.java | 8 +-
.../internal/compiler/flow/LoopingFlowContext.java | 46 +
.../internal/compiler/impl/BooleanConstant.java | 22 +-
.../jdt/internal/compiler/impl/ByteConstant.java | 20 +-
.../jdt/internal/compiler/impl/CharConstant.java | 20 +-
.../jdt/internal/compiler/impl/DoubleConstant.java | 21 +-
.../jdt/internal/compiler/impl/FloatConstant.java | 20 +-
.../jdt/internal/compiler/impl/IntConstant.java | 20 +-
.../jdt/internal/compiler/impl/LongConstant.java | 20 +-
.../jdt/internal/compiler/impl/ShortConstant.java | 20 +-
.../jdt/internal/compiler/impl/StringConstant.java | 27 +-
.../compiler/lookup/CompilationUnitScope.java | 4 +-
.../internal/compiler/lookup/InvocationSite.java | 1 +
.../internal/compiler/lookup/LocalTypeBinding.java | 11 +-
.../internal/compiler/lookup/MethodBinding.java | 3 -
.../internal/compiler/lookup/MethodVerifier15.java | 15 +-
.../lookup/ParameterizedGenericMethodBinding.java | 9 +-
.../lookup/ParameterizedMethodBinding.java | 26 +-
.../internal/compiler/lookup/RawTypeBinding.java | 26 +-
.../jdt/internal/compiler/lookup/Scope.java | 5 +-
.../jdt/internal/compiler/lookup/TypeBinding.java | 4 +-
.../internal/compiler/problem/ProblemReporter.java | 29 +-
.../eclipse/jdt/internal/compiler/util/Util.java | 12 +-
.../org/eclipse/jdt/core/dom/CompilationUnit.java | 2 +-
.../org/eclipse/jdt/core/dom/StringLiteral.java | 5 +-
.../eclipse/jdt/core/dom/rewrite/ASTRewrite.java | 4 +-
.../jdt/core/dom/rewrite/ImportRewrite.java | 2 +-
.../core/dom/rewrite/ASTRewriteAnalyzer.java | 17 +-
.../org/eclipse/jdt/internal/formatter/Scribe.java | 68 +-
.../model/org/eclipse/jdt/core/IBuffer.java | 2 +-
.../org/eclipse/jdt/core/ICompilationUnit.java | 4 +-
.../org/eclipse/jdt/core/IPackageFragment.java | 2 +-
.../model/org/eclipse/jdt/core/IType.java | 6 +-
.../model/org/eclipse/jdt/core/ITypeHierarchy.java | 2 +-
.../model/org/eclipse/jdt/core/IWorkingCopy.java | 2 +-
.../model/org/eclipse/jdt/core/JavaCore.java | 4 +-
.../jdt/internal/core/ExternalFoldersManager.java | 72 +-
.../eclipse/jdt/internal/core/JavadocContents.java | 5 +-
.../internal/core/builder/ReferenceCollection.java | 20 +-
.../eclipse/jdt/internal/core/builder/State.java | 2 +-
.../jdt/internal/core/hierarchy/TypeHierarchy.java | 4 +-
.../org.eclipse.jdt.core/notes/API_changes.html | 2 +-
.../notes/R30_buildnotes_jdt-core.html | 4 +-
.../eclipse/jdt/core/search/SearchParticipant.java | 8 +-
.../jdt/internal/core/search/IndexSelector.java | 65 +-
.../jdt/internal/core/search/PatternSearchJob.java | 6 +-
.../core/search/TypeNameMatchRequestorWrapper.java | 20 +-
.../core/search/indexing/IndexManager.java | 94 +
.../core/search/matching/MatchLocator.java | 29 +
.../org.eclipse.jdt.debug/META-INF/MANIFEST.MF | 2 +-
.../eval/ast/engine/ASTInstructionCompiler.java | 382 ++-
.../eval/ast/engine/EvaluationEngineMessages.java | 7 +-
.../ast/engine/EvaluationEngineMessages.properties | 7 +-
.../org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF | 2 +-
.../guide/jdt_api_compile.htm | 2 +-
.../org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF | 2 +-
.../compiler/ref-preferences-errors-warnings.htm | 2 +-
.../java/debug/ref-primitive_display_options.htm | 4 +-
.../run-debug/ref-launch_configurations.htm | 4 +-
.../preferences/run-debug/ref-view_management.htm | 4 +-
.../reference/ref-properties-build-path.htm | 5 +-
.../META-INF/MANIFEST.MF | 2 +-
.../jdt/internal/junit/JUnitCorePlugin.java | 4 +-
.../org.eclipse.jdt.junit/META-INF/MANIFEST.MF | 2 +-
.../eclipse/jdt/internal/junit/ui/JUnitPlugin.java | 9 +-
.../org.eclipse.jdt.ui/META-INF/MANIFEST.MF | 2 +-
.../eclipse/jdt/internal/corext/dom/Bindings.java | 8 +-
.../jdt/internal/ui/javaeditor/ASTProvider.java | 13 +-
.../ui/javaeditor/breadcrumb/BreadcrumbViewer.java | 33 +-
.../JavaEditorAppearanceConfigurationBlock.java | 10 +-
.../java/hover/SourceViewerInformationControl.java | 39 +-
.../plugins/org.eclipse.jdt/META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.jface.text/META-INF/MANIFEST.MF | 2 +-
.../jface/internal/text/html/HTMLPrinter.java | 31 +-
.../eclipse/jface/text/source/SourceViewer.java | 8 +-
.../org.eclipse.jface/.settings/.api_filters | 42 -
.../plugins/org.eclipse.jface/META-INF/MANIFEST.MF | 2 +-
.../src/org/eclipse/jface/action/StatusLine.java | 11 +-
.../org/eclipse/jface/bindings/BindingManager.java | 24 +-
.../eclipse/jface/viewers/SWTFocusCellManager.java | 9 +-
.../org/osgi/service/cm/Configuration.class | Bin 532 -> 0 bytes
.../org/osgi/service/cm/ConfigurationAdmin.class | Bin 743 -> 0 bytes
.../org/osgi/service/cm/ConfigurationEvent.class | Bin 1241 -> 0 bytes
.../osgi/service/cm/ConfigurationException.class | Bin 1469 -> 0 bytes
.../osgi/service/cm/ConfigurationListener.class | Bin 218 -> 0 bytes
.../osgi/service/cm/ConfigurationPermission.class | Bin 1620 -> 0 bytes
.../cm/ConfigurationPermissionCollection$1.class | Bin 1064 -> 0 bytes
.../cm/ConfigurationPermissionCollection.class | Bin 1647 -> 0 bytes
.../org/osgi/service/cm/ConfigurationPlugin.class | Bin 366 -> 0 bytes
.../org/osgi/service/cm/ManagedService.class | Bin 246 -> 0 bytes
.../osgi/service/cm/ManagedServiceFactory.class | Bin 361 -> 0 bytes
.../service/component/ComponentConstants.class | Bin 861 -> 0 bytes
.../osgi/service/component/ComponentContext.class | Bin 763 -> 0 bytes
.../service/component/ComponentException.class | Bin 1007 -> 0 bytes
.../osgi/service/component/ComponentFactory.class | Bin 235 -> 0 bytes
.../osgi/service/component/ComponentInstance.class | Bin 211 -> 0 bytes
.../org/osgi/service/device/Constants.class | Bin 303 -> 0 bytes
.../org/osgi/service/device/Device.class | Bin 201 -> 0 bytes
.../org/osgi/service/device/Driver.class | Bin 311 -> 0 bytes
.../org/osgi/service/device/DriverLocator.class | Bin 312 -> 0 bytes
.../org/osgi/service/device/DriverSelector.class | Bin 280 -> 0 bytes
.../org/osgi/service/device/Match.class | Bin 207 -> 0 bytes
.../event/Event$UnmodifiableDictionary.class | Bin 1537 -> 0 bytes
.../org/osgi/service/event/Event.class | Bin 3957 -> 0 bytes
.../org/osgi/service/event/EventAdmin.class | Bin 200 -> 0 bytes
.../org/osgi/service/event/EventConstants.class | Bin 1034 -> 0 bytes
.../org/osgi/service/event/EventHandler.class | Bin 186 -> 0 bytes
.../org/osgi/service/event/TopicPermission.class | Bin 4627 -> 0 bytes
.../service/event/TopicPermissionCollection.class | Bin 2831 -> 0 bytes
.../org/osgi/service/http/HttpContext.class | Bin 689 -> 0 bytes
.../org/osgi/service/http/HttpService.class | Bin 597 -> 0 bytes
.../org/osgi/service/http/NamespaceException.class | Bin 958 -> 0 bytes
.../org/osgi/service/io/ConnectionFactory.class | Bin 349 -> 0 bytes
.../org/osgi/service/io/ConnectorService.class | Bin 857 -> 0 bytes
.../org/osgi/service/log/LogEntry.class | Bin 384 -> 0 bytes
.../org/osgi/service/log/LogListener.class | Bin 209 -> 0 bytes
.../org/osgi/service/log/LogReaderService.class | Bin 272 -> 0 bytes
.../org/osgi/service/log/LogService.class | Bin 529 -> 0 bytes
.../service/metatype/AttributeDefinition.class | Bin 820 -> 0 bytes
.../service/metatype/MetaTypeInformation.class | Bin 314 -> 0 bytes
.../osgi/service/metatype/MetaTypeProvider.class | Bin 309 -> 0 bytes
.../osgi/service/metatype/MetaTypeService.class | Bin 355 -> 0 bytes
.../service/metatype/ObjectClassDefinition.class | Bin 523 -> 0 bytes
.../service/provisioning/ProvisioningService.class | Bin 1292 -> 0 bytes
.../org/osgi/service/upnp/UPnPAction.class | Bin 490 -> 0 bytes
.../org/osgi/service/upnp/UPnPDevice.class | Bin 1605 -> 0 bytes
.../org/osgi/service/upnp/UPnPEventListener.class | Bin 311 -> 0 bytes
.../org/osgi/service/upnp/UPnPException.class | Bin 812 -> 0 bytes
.../org/osgi/service/upnp/UPnPIcon.class | Bin 345 -> 0 bytes
.../osgi/service/upnp/UPnPLocalStateVariable.class | Bin 243 -> 0 bytes
.../org/osgi/service/upnp/UPnPService.class | Bin 632 -> 0 bytes
.../org/osgi/service/upnp/UPnPStateVariable.class | Bin 1456 -> 0 bytes
.../org/osgi/service/useradmin/Authorization.class | Bin 260 -> 0 bytes
.../org/osgi/service/useradmin/Group.class | Bin 356 -> 0 bytes
.../org/osgi/service/useradmin/Role.class | Bin 405 -> 0 bytes
.../org/osgi/service/useradmin/User.class | Bin 273 -> 0 bytes
.../org/osgi/service/useradmin/UserAdmin.class | Bin 668 -> 0 bytes
.../osgi/service/useradmin/UserAdminEvent.class | Bin 1048 -> 0 bytes
.../osgi/service/useradmin/UserAdminListener.class | Bin 213 -> 0 bytes
.../service/useradmin/UserAdminPermission.class | Bin 5628 -> 0 bytes
.../useradmin/UserAdminPermissionCollection.class | Bin 2851 -> 0 bytes
.../org/osgi/service/wireadmin/BasicEnvelope.class | Bin 882 -> 0 bytes
.../org/osgi/service/wireadmin/Consumer.class | Bin 268 -> 0 bytes
.../org/osgi/service/wireadmin/Envelope.class | Bin 236 -> 0 bytes
.../org/osgi/service/wireadmin/Producer.class | Bin 266 -> 0 bytes
.../org/osgi/service/wireadmin/Wire.class | Bin 445 -> 0 bytes
.../org/osgi/service/wireadmin/WireAdmin.class | Bin 531 -> 0 bytes
.../osgi/service/wireadmin/WireAdminEvent.class | Bin 1460 -> 0 bytes
.../osgi/service/wireadmin/WireAdminListener.class | Bin 216 -> 0 bytes
.../org/osgi/service/wireadmin/WireConstants.class | Bin 1522 -> 0 bytes
.../osgi/service/wireadmin/WirePermission.class | Bin 4504 -> 0 bytes
.../wireadmin/WirePermissionCollection.class | Bin 2818 -> 0 bytes
eclipse/plugins/org.eclipse.osgi.services/src.zip | Bin 132671 -> 0 bytes
.../src/org/osgi/service/cm/Configuration.java | 225 ++
.../org/osgi/service/cm/ConfigurationAdmin.java | 254 ++
.../org/osgi/service/cm/ConfigurationEvent.java | 170 +
.../osgi/service/cm/ConfigurationException.java | 104 +
.../org/osgi/service/cm/ConfigurationListener.java | 48 +
.../osgi/service/cm/ConfigurationPermission.java | 220 ++
.../org/osgi/service/cm/ConfigurationPlugin.java | 129 +
.../src/org/osgi/service/cm/ManagedService.java | 138 +
.../org/osgi/service/cm/ManagedServiceFactory.java | 160 +
.../src/org/osgi/service/cm/package.html | 11 +
.../src/org/osgi/service/cm/packageinfo | 1 +
.../osgi/service/component/ComponentConstants.java | 118 +
.../osgi/service/component/ComponentContext.java | 191 +
.../osgi/service/component/ComponentException.java | 79 +
.../osgi/service/component/ComponentFactory.java | 47 +
.../osgi/service/component/ComponentInstance.java | 46 +
.../src/org/osgi/service/component/package.html | 11 +
.../src/org/osgi/service/component/packageinfo | 1 +
.../src/org/osgi/service/device/Constants.java | 73 +
.../src/org/osgi/service/device/Device.java | 62 +
.../src/org/osgi/service/device/Driver.java | 107 +
.../src/org/osgi/service/device/DriverLocator.java | 65 +
.../org/osgi/service/device/DriverSelector.java | 54 +
.../src/org/osgi/service/device/Match.java | 43 +
.../src/org/osgi/service/device/package.html | 10 +
.../src/org/osgi/service/device/packageinfo | 1 +
.../src/org/osgi/service/event/Event.java | 263 ++
.../src/org/osgi/service/event/EventAdmin.java | 52 +
.../src/org/osgi/service/event/EventConstants.java | 187 +
.../src/org/osgi/service/event/EventHandler.java | 69 +
.../org/osgi/service/event/TopicPermission.java | 529 +++
.../src/org/osgi/service/event/package.html | 10 +
.../src/org/osgi/service/event/packageinfo | 1 +
.../src/org/osgi/service/http/HttpContext.java | 166 +
.../src/org/osgi/service/http/HttpService.java | 177 +
.../org/osgi/service/http/NamespaceException.java | 88 +
.../src/org/osgi/service/http/package.html | 10 +
.../src/org/osgi/service/http/packageinfo | 1 +
.../src/org/osgi/service/io/ConnectionFactory.java | 60 +
.../src/org/osgi/service/io/ConnectorService.java | 165 +
.../src/org/osgi/service/io/package.html | 10 +
.../src/org/osgi/service/io/packageinfo | 1 +
.../src/org/osgi/service/log/LogEntry.java | 108 +
.../src/org/osgi/service/log/LogListener.java | 50 +
.../src/org/osgi/service/log/LogReaderService.java | 97 +
.../src/org/osgi/service/log/LogService.java | 155 +
.../src/org/osgi/service/log/package.html | 11 +
.../src/org/osgi/service/log/packageinfo | 1 +
.../osgi/service/metatype/AttributeDefinition.java | 277 ++
.../osgi/service/metatype/MetaTypeInformation.java | 50 +
.../osgi/service/metatype/MetaTypeProvider.java | 55 +
.../org/osgi/service/metatype/MetaTypeService.java | 51 +
.../service/metatype/ObjectClassDefinition.java | 119 +
.../src/org/osgi/service/metatype/package.html | 11 +
.../src/org/osgi/service/metatype/packageinfo | 1 +
.../service/provisioning/ProvisioningService.java | 211 ++
.../src/org/osgi/service/provisioning/package.html | 10 +
.../src/org/osgi/service/provisioning/packageinfo | 1 +
.../src/org/osgi/service/upnp/UPnPAction.java | 120 +
.../src/org/osgi/service/upnp/UPnPDevice.java | 280 ++
.../org/osgi/service/upnp/UPnPEventListener.java | 85 +
.../src/org/osgi/service/upnp/UPnPException.java | 81 +
.../src/org/osgi/service/upnp/UPnPIcon.java | 99 +
.../osgi/service/upnp/UPnPLocalStateVariable.java | 44 +
.../src/org/osgi/service/upnp/UPnPService.java | 173 +
.../org/osgi/service/upnp/UPnPStateVariable.java | 342 ++
.../src/org/osgi/service/upnp/package.html | 10 +
.../src/org/osgi/service/upnp/packageinfo | 1 +
.../org/osgi/service/useradmin/Authorization.java | 102 +
.../src/org/osgi/service/useradmin/Group.java | 158 +
.../src/org/osgi/service/useradmin/Role.java | 117 +
.../src/org/osgi/service/useradmin/User.java | 94 +
.../src/org/osgi/service/useradmin/UserAdmin.java | 157 +
.../org/osgi/service/useradmin/UserAdminEvent.java | 111 +
.../osgi/service/useradmin/UserAdminListener.java | 43 +
.../service/useradmin/UserAdminPermission.java | 643 ++++
.../src/org/osgi/service/useradmin/package.html | 10 +
.../src/org/osgi/service/useradmin/packageinfo | 1 +
.../org/osgi/service/wireadmin/BasicEnvelope.java | 64 +
.../src/org/osgi/service/wireadmin/Consumer.java | 101 +
.../src/org/osgi/service/wireadmin/Envelope.java | 79 +
.../src/org/osgi/service/wireadmin/Producer.java | 123 +
.../src/org/osgi/service/wireadmin/Wire.java | 268 ++
.../src/org/osgi/service/wireadmin/WireAdmin.java | 168 +
.../org/osgi/service/wireadmin/WireAdminEvent.java | 266 ++
.../osgi/service/wireadmin/WireAdminListener.java | 72 +
.../org/osgi/service/wireadmin/WireConstants.java | 225 ++
.../org/osgi/service/wireadmin/WirePermission.java | 485 +++
.../src/org/osgi/service/wireadmin/package.html | 11 +
.../src/org/osgi/service/wireadmin/packageinfo | 1 +
.../plugins/org.eclipse.osgi/META-INF/MANIFEST.MF | 2 +-
.../framework/internal/core/ConsoleManager.java | 10 +-
.../internal/protocol/MultiplexingFactory.java | 73 +-
.../osgi/internal/baseadaptor/BaseStorage.java | 10 +-
.../osgi/internal/resolver/StateHelperImpl.java | 8 +-
.../META-INF/MANIFEST.MF | 2 +-
.../api/tools/ui/internal/use/ApiUseTabGroup.java | 9 +-
.../tools/ui/internal/use/ReportPatternPage.java | 1 +
.../org.eclipse.pde.api.tools/META-INF/MANIFEST.MF | 2 +-
.../pde/api/tools/internal/ApiBaselineManager.java | 58 +-
.../tools/internal/builder/ReferenceExtractor.java | 42 +-
.../internal/tasks/ExcludeListDeltaVisitor.java | 15 +
.../org.eclipse.pde.build/META-INF/MANIFEST.MF | 2 +-
.../feature}/cpl-v10.html | 0
.../feature/rootfiles}/cpl-v10.html | 0
.../scripts/genericTargets.xml | 3 +-
.../internal/build/AbstractScriptGenerator.java | 143 +-
.../pde/internal/build/FeatureGenerator.java | 2 +-
.../pde/internal/build/IPDEBuildConstants.java | 4 +
.../build/builder/ModelBuildScriptGenerator.java | 2 +-
.../packager/PackageConfigScriptGenerator.java | 9 +-
.../pde/internal/build/site/PluginPathFinder.java | 4 +-
.../org.eclipse.pde.core/META-INF/MANIFEST.MF | 2 +-
.../pde/internal/core/ExternalModelManager.java | 24 +-
.../core/exports/FeatureExportOperation.java | 2 +-
.../core/project/BundleProjectService.java | 3 +-
.../internal/core/target/IUBundleContainer.java | 4 +
.../core/target/ProfileBundleContainer.java | 2 +-
.../provisional/LoadTargetDefinitionJob.java | 10 +
.../org.eclipse.pde.doc.user/META-INF/MANIFEST.MF | 2 +-
eclipse/plugins/org.eclipse.pde.doc.user/build.xml | 98 +
.../org.eclipse.pde.doc.user/pdeOptions.txt | 2 +-
.../deprecation-reportconversion-ant-task.htm | 22 +-
.../whatsNew/pde_whatsnew.htm | 2 +-
.../org.eclipse.pde.ui/META-INF/MANIFEST.MF | 2 +-
.../internal/ui/launcher/AbstractPluginBlock.java | 34 +-
.../pde/internal/ui/launcher/FeatureBlock.java | 34 +-
.../dialogs/TargetRepositorySearchHandler.java | 1 +
.../ui/wizards/imports/PluginImportOperation.java | 17 +-
.../imports/PluginImportWizardExpressPage.java | 2 +-
.../product/ProductFromConfigOperation.java | 29 +-
.../plugins/org.eclipse.pde/META-INF/MANIFEST.MF | 2 +-
.../cheatsheets/helloworld/helloworld-feature.xml | 3 +-
.../META-INF/MANIFEST.MF | 2 +-
.../guide/p2_api_overview.htm | 2 +-
.../guide/p2_overview.htm | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../reference/help_preferences_content.htm | 4 +-
.../tasks/tasks-126.htm | 5 +-
.../org.eclipse.platform/META-INF/MANIFEST.MF | 2 +-
.../plugins/org.eclipse.platform/plugin.properties | 2 +-
.../plugins/org.eclipse.sdk/META-INF/MANIFEST.MF | 2 +-
eclipse/plugins/org.eclipse.sdk/plugin.properties | 4 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.carbon.macosx/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.cocoa.macosx.x86_64/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../plugins/org.eclipse.swt.cocoa.macosx/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.ppc/build.xml | 2 +-
.../.project | 0
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.ppc64}/about.html | 0
.../about_files/IJG_README | 0
.../about_files/about_cairo.html | 0
.../about_files/lgpl-v21.txt | 0
.../about_files/mpl-v11.txt | 0
.../about_files/pixman-licenses.txt | 0
.../build.properties | 0
.../org.eclipse.swt.gtk.linux.ppc64/build.xml | 12 +
.../fragment.properties | 0
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.s390/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.s390x/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.x86/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.linux.x86_64/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.solaris.sparc/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.gtk.solaris.x86/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.motif.aix.ppc/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.motif.hpux.ia64_32/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.motif.linux.x86/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.motif.solaris.sparc/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.photon.qnx.x86/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.win32.wce_ppc.arm/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.win32.win32.x86/build.xml | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.swt.win32.win32.x86_64/build.xml | 2 +-
.../org/eclipse/swt/accessibility/Accessible.java | 18 +-
.../org/eclipse/swt/accessibility/Accessible.java | 69 +-
.../common/org/eclipse/swt/custom/CCombo.java | 28 +-
.../common/org/eclipse/swt/custom/StyledText.java | 51 +-
.../carbon/org/eclipse/swt/dnd/DragSource.java | 3 +
.../carbon/org/eclipse/swt/dnd/DropTarget.java | 15 +-
.../carbon/org/eclipse/swt/dnd/TextTransfer.java | 30 +-
.../org/eclipse/swt/browser/MozillaDelegate.java | 8 +-
.../org/eclipse/swt/browser/MozillaDelegate.java | 8 +-
.../common/library/xpcom_custom.cpp | 42 +
.../common/library/xpcom_custom.h | 1 +
.../common/library/xpcom_stats.cpp | 7 +-
.../common/library/xpcom_stats.h | 3 +-
.../common/org/eclipse/swt/browser/Mozilla.java | 87 +-
.../org/eclipse/swt/internal/mozilla/XPCOM.java | 11 +-
.../org/eclipse/swt/browser/MozillaDelegate.java | 8 +-
.../org/eclipse/swt/browser/MozillaDelegate.java | 8 +-
.../org/eclipse/swt/browser/MozillaDelegate.java | 8 +-
.../Eclipse SWT PI/carbon/library/os.c | 36 +
.../Eclipse SWT PI/carbon/library/os_stats.c | 7 +-
.../Eclipse SWT PI/carbon/library/os_stats.h | 3 +
.../carbon/org/eclipse/swt/internal/carbon/OS.java | 15 +-
.../Eclipse SWT PI/cocoa/library/make_macosx.mak | 4 +-
.../internal/cocoa/AppKitFull.bridgesupport.extras | 4 +
.../org/eclipse/swt/internal/cocoa/NSTextView.java | 6 +-
.../cocoa/org/eclipse/swt/internal/cocoa/OS.java | 1 +
.../org/eclipse/swt/internal/Library.java | 2 +-
.../org/eclipse/swt/internal/Library.java | 2 +-
.../Eclipse SWT PI/gtk/library/os.c | 20 +-
.../Eclipse SWT PI/gtk/library/os_custom.c | 19 +
.../Eclipse SWT PI/gtk/library/os_stats.c | 5 +-
.../Eclipse SWT PI/gtk/library/os_stats.h | 1 +
.../gtk/org/eclipse/swt/internal/gtk/OS.java | 11 +-
.../motif/library/make_hpux_ia64_32.mak | 2 +-
.../win32/org/eclipse/swt/internal/win32/OS.java | 2 +-
.../gtk/org/eclipse/swt/browser/WebKit.java | 2 +-
.../carbon/org/eclipse/swt/widgets/Button.java | 6 +-
.../carbon/org/eclipse/swt/widgets/Composite.java | 7 +
.../carbon/org/eclipse/swt/widgets/Control.java | 1 +
.../org/eclipse/swt/widgets/DirectoryDialog.java | 3 +
.../carbon/org/eclipse/swt/widgets/Display.java | 9 +
.../carbon/org/eclipse/swt/widgets/FileDialog.java | 3 +
.../carbon/org/eclipse/swt/widgets/Shell.java | 79 +-
.../carbon/org/eclipse/swt/widgets/Table.java | 21 +
.../carbon/org/eclipse/swt/widgets/Tree.java | 23 +-
.../carbon/org/eclipse/swt/widgets/Widget.java | 23 +-
.../cocoa/org/eclipse/swt/widgets/Control.java | 44 +-
.../cocoa/org/eclipse/swt/widgets/List.java | 68 +-
.../cocoa/org/eclipse/swt/widgets/Shell.java | 19 +-
.../cocoa/org/eclipse/swt/widgets/Spinner.java | 11 +
.../cocoa/org/eclipse/swt/widgets/Table.java | 67 +-
.../cocoa/org/eclipse/swt/widgets/Text.java | 1 +
.../cocoa/org/eclipse/swt/widgets/ToolItem.java | 12 +-
.../cocoa/org/eclipse/swt/widgets/Tree.java | 16 +
.../Eclipse SWT/common/library/make_common.mak | 4 +-
.../org.eclipse.swt/Eclipse SWT/common/version.txt | 2 +-
.../gtk/org/eclipse/swt/graphics/Image.java | 49 +-
.../gtk/org/eclipse/swt/widgets/Combo.java | 1 +
.../gtk/org/eclipse/swt/widgets/Control.java | 2 +
.../gtk/org/eclipse/swt/widgets/Display.java | 32 +-
.../gtk/org/eclipse/swt/widgets/Shell.java | 2 +
.../gtk/org/eclipse/swt/widgets/Spinner.java | 1 +
.../gtk/org/eclipse/swt/widgets/Text.java | 1 +
.../win32/org/eclipse/swt/widgets/Combo.java | 9 +-
.../win32/org/eclipse/swt/widgets/Tracker.java | 17 +-
.../plugins/org.eclipse.swt/META-INF/MANIFEST.MF | 2 +-
eclipse/plugins/org.eclipse.swt/build.xml | 2 +-
eclipse/plugins/org.eclipse.swt/buildFragment.xml | 2 +
.../plugins/org.eclipse.swt/buildnotes_swt.html | 54 +
eclipse/plugins/org.eclipse.swt/tasks/build.xml | 9 +-
.../org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF | 2 +-
eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml | 115 +-
.../ccvs/ui/actions/ShowAnnotationAction.java | 42 -
.../ui/actions/ShowResourceInHistoryAction.java | 41 -
.../ccvs/ui/wizards/CommitWizardCommitPage.java | 20 +-
.../org.eclipse.team.ui/META-INF/MANIFEST.MF | 2 +-
eclipse/plugins/org.eclipse.team.ui/plugin.xml | 5 +-
.../team/internal/ui/actions/TeamAction.java | 42 +-
eclipse/plugins/org.eclipse.ui.carbon/fragment.xml | 2 +-
eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml | 2 +-
.../org.eclipse.ui.editors/META-INF/MANIFEST.MF | 2 +-
.../ui/internal/texteditor/LineNumberColumn.java | 4 +-
.../org.eclipse.ui.forms/META-INF/MANIFEST.MF | 2 +-
.../ui/internal/forms/widgets/TextSegment.java | 7 +-
.../META-INF/MANIFEST.MF | 2 +-
.../ide/application/IDEWorkbenchWindowAdvisor.java | 38 +-
.../org.eclipse.ui.ide/.settings/.api_filters | 81 -
.../org.eclipse.ui.ide/META-INF/MANIFEST.MF | 2 +-
.../dialogs/FilteredResourcesSelectionDialog.java | 11 +-
.../ide/dialogs/ResourceTreeAndListGroup.java | 51 +-
.../views/markers/MarkerContentGenerator.java | 21 +-
.../WizardFileSystemResourceImportPage1.java | 14 +-
.../META-INF/MANIFEST.MF | 2 +-
.../themes/slate/html/shared.css | 4 +
.../META-INF/MANIFEST.MF | 2 +-
.../workingsets/WorkingSetsContentProvider.java | 5 +-
.../META-INF/MANIFEST.MF | 2 +-
.../eclipse/ui/texteditor/AbstractTextEditor.java | 18 +-
.../.settings/.api_filters | 83 -
.../ui/actions/ContributionItemFactory.java | 3 +-
.../org/eclipse/ui/internal/Workbench.java | 13 +-
.../activities/ExtensionActivityRegistry.java | 54 +-
.../activities/MutableActivityManager.java | 39 +-
.../org/eclipse/ui/internal/misc/Policy.java | 5 +-
.../services/WorkbenchServiceRegistry.java | 13 +-
.../org.eclipse.ui.workbench/META-INF/MANIFEST.MF | 2 +-
.../plugins/org.eclipse.ui/META-INF/MANIFEST.MF | 2 +-
.../org.eclipse.ui/buildnotes_workbench.html | 58 +
.../org.eclipse.update.core/META-INF/MANIFEST.MF | 2 +-
.../eclipse/update/internal/core/UpdateCore.java | 4 +-
.../internal/operations/OperationValidator.java | 711 ++---
.../update/internal/verifier/PlanVerifier.java | 30 +
eclipse/sourceReferences.properties | 299 ++
patches/eclipse-removeSkipMapsCheck.patch | 16 +
runtests.sh | 2 +
640 files changed, 18815 insertions(+), 2641 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c3bd975..919b7f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-10-01 Alexander Kurtakov <akurtako at redhat.com>
+ Update buildSDKSource.sh for 3.6.1 release. (Chris Aniszczyk bz#326597)
+ * patches/eclipse-removeSkipMapsCheck.patch: New file.
+ * buildSDKSource.sh: Update to 3.6.1.
+
+2010-08-23 Roland Grunberg <rgrunber at redhat.com>
+
+ * runtests.sh: Remove org.junit4/ and junit4.jar during the launch of the
+ o.e.pde.ui.tests. They are recognized as plugins but not as bundles.
+ This causes some failures.
+
2010-08-17 Andrew Overholt <overholt at redhat.com>
* build.xml: Use ${label} instead of "3.5.2" for SWT JAR
diff --git a/build.xml b/build.xml
index 38dc64f..152a5f1 100644
--- a/build.xml
+++ b/build.xml
@@ -1049,16 +1049,24 @@
<arg value="${provisionDir}" />
<arg value="${platformAndCVSInstallation}" />
</exec>
-
- <!-- Install SDK -->
- <property name="sdkInstallation" value="${provisionDir}.sdk"/>
+
+ <!-- Install JDT -->
+ <property name="jdtInstallation" value="${provisionDir}.jdt"/>
<antcall target="provision.installed">
- <param name="p2.director.installIU" value="org.eclipse.sdk.feature.group" />
+ <param name="p2.director.installIU" value="org.eclipse.jdt.feature.group" />
<param name="profileName" value="PlatformProfile" />
</antcall>
- <!-- make a copy of the entire SDK installation -->
+ <!-- rename the JDT installation -->
<move file="${provisionDir}"
- tofile="${sdkInstallation}"/>
+ tofile="${jdtInstallation}"/>
+ <!-- make a second copy of the clean JDT installation -->
+ <exec executable="cp" failonerror="true">
+ <arg value="-rd" />
+ <arg value="--no-target-directory" />
+ <arg value="${jdtInstallation}" />
+ <arg value="${jdtInstallation}.orig" />
+ </exec>
+
<!-- restore clean platform+CVS installation -->
<exec executable="cp" failonerror="true">
<arg value="-rd" />
@@ -1067,22 +1075,15 @@
<arg value="${provisionDir}" />
</exec>
- <!-- Install JDT -->
- <property name="jdtInstallation" value="${provisionDir}.jdt"/>
+ <!-- Install SDK -->
+ <property name="sdkInstallation" value="${provisionDir}.sdk"/>
<antcall target="provision.installed">
- <param name="p2.director.installIU" value="org.eclipse.jdt.feature.group" />
+ <param name="p2.director.installIU" value="org.eclipse.sdk.feature.group" />
<param name="profileName" value="PlatformProfile" />
</antcall>
- <!-- rename JDT installation directory -->
+ <!-- rename the entire SDK installation -->
<move file="${provisionDir}"
- tofile="${jdtInstallation}"/>
- <!-- make a copy of the JDT installation -->
- <exec executable="cp" failonerror="true">
- <arg value="-rd" />
- <arg value="--no-target-directory" />
- <arg value="${jdtInstallation}" />
- <arg value="${jdtInstallation}.orig" />
- </exec>
+ tofile="${sdkInstallation}"/>
<!-- restore clean platform+CVS installation -->
<exec executable="cp" failonerror="true">
@@ -1099,7 +1100,7 @@
<param name="dropinsDir" value="${jdtDropinsName}" />
</antcall>
- <!-- restore clean JDT installation -->
+ <!-- restore clean JDT installation for comparison -->
<delete dir="${jdtInstallation}" />
<move file="${jdtInstallation}.orig"
tofile="${jdtInstallation}"/>
@@ -1139,105 +1140,17 @@
</target>
<target name="moveNewStuffToDropins">
- <property name="dropinsDirectory" value="${orig}/dropins/${dropinsDir}" />
- <property name="filesToMove" value="${topBuildDir}/filesToMove"/>
- <property name="dirsToMove" value="${topBuildDir}/dirsToMove"/>
-
- <property name="origFeaturesFile" value="${topBuildDir}/origFeatures"/>
- <property name="newFeaturesFile" value="${topBuildDir}/newFeatures"/>
- <property name="featureDifferencesFile" value="${topBuildDir}/featuresToMove.diff"/>
- <property name="featuresToMoveFile" value="${topBuildDir}/featuresToMove"/>
-
- <property name="origPluginsFile" value="${topBuildDir}/origPlugins"/>
- <property name="newPluginsFile" value="${topBuildDir}/newPlugins"/>
- <property name="pluginDifferencesFile" value="${topBuildDir}/pluginsToMove.diff"/>
- <property name="pluginsToMoveFile" value="${topBuildDir}/pluginsToMove"/>
-
- <!-- features -->
- <exec executable="ls" output="${origFeaturesFile}">
- <arg line="-1 ${orig}/features" />
- </exec>
- <exec executable="ls" output="${newFeaturesFile}">
- <arg line="-1 ${new}/features" />
- </exec>
- <exec executable="diff" output="${featureDifferencesFile}">
- <arg line="-u ${origFeaturesFile} ${newFeaturesFile}" />
- </exec>
- <exec executable="sed" output="${featuresToMoveFile}">
- <arg line="-n '/^+o/p' ${featureDifferencesFile}" />
- </exec>
- <exec executable="sed">
- <arg line="-i 's/^+//' ${featuresToMoveFile}" />
- </exec>
-
- <!-- FIXME: this assumes all features are directories -->
- <copy file="${featuresToMoveFile}" tofile="${filesToMove}"/>
- <copy file="${featuresToMoveFile}" tofile="${dirsToMove}"/>
- <exec executable="sed">
- <arg line="-i '/.jar$/d' ${dirsToMove}" />
- </exec>
- <exec executable="sed">
- <arg line="-i 's/$/\/**/' ${dirsToMove}" />
- </exec>
- <exec executable="sed">
- <arg line="-i '/.jar$/!d' ${filesToMove}" />
- </exec>
-
- <mkdir dir="${dropinsDirectory}/features" />
- <move todir="${dropinsDirectory}/features">
- <fileset dir="${new}/features" includesfile="${dirsToMove}"/>
- </move>
-
- <delete file="${origFeaturesFile}"/>
- <delete file="${newFeaturesFile}"/>
- <delete file="${featuresToMoveFile}"/>
- <delete file="${featureDifferencesFile}"/>
- <delete file="${filesToMove}"/>
- <delete file="${dirsToMove}"/>
-
- <!-- plugins -->
- <exec executable="ls" output="${origPluginsFile}">
- <arg line="-1 ${orig}/plugins" />
- </exec>
- <exec executable="ls" output="${newPluginsFile}">
- <arg line="-1 ${new}/plugins" />
- </exec>
- <exec executable="diff" output="${pluginDifferencesFile}">
- <arg line="-u ${origPluginsFile} ${newPluginsFile}" />
- </exec>
- <exec executable="sed" output="${pluginsToMoveFile}">
- <arg line="-n '/^+o/p' ${pluginDifferencesFile}" />
- </exec>
- <exec executable="sed">
- <arg line="-i 's/^+//' ${pluginsToMoveFile}" />
- </exec>
-
- <copy file="${pluginsToMoveFile}" tofile="${filesToMove}"/>
- <copy file="${pluginsToMoveFile}" tofile="${dirsToMove}"/>
- <exec executable="sed">
- <arg line="-i '/.jar$/d' ${dirsToMove}" />
- </exec>
- <exec executable="sed">
- <arg line="-i 's/$/\/**/' ${dirsToMove}" />
- </exec>
- <exec executable="sed">
- <arg line="-i '/.jar$/!d' ${filesToMove}" />
- </exec>
-
- <mkdir dir="${dropinsDirectory}/plugins" />
- <move todir="${dropinsDirectory}/plugins">
- <fileset dir="${new}/plugins" includesfile="${dirsToMove}"/>
+ <property name="dropinsDirectory" value="${orig}/dropins/${dropinsDir}" />
+ <move todir="${dropinsDirectory}/features" includeemptydirs="true">
+ <fileset dir="${new}/features" id="newFeatures.fileset">
+ <present present="srconly" targetdir="${orig}/features"/>
+ </fileset>
</move>
- <move todir="${dropinsDirectory}/plugins">
- <fileset dir="${new}/plugins" includesfile="${filesToMove}"/>
+ <move todir="${dropinsDirectory}/plugins" includeemptydirs="true">
+ <fileset dir="${new}/plugins" id="newPlugins.fileset">
+ <present present="srconly" targetdir="${orig}/plugins"/>
+ </fileset>
</move>
-
- <delete file="${origPluginsFile}"/>
- <delete file="${newPluginsFile}"/>
- <delete file="${pluginsToMoveFile}"/>
- <delete file="${pluginDifferencesFile}"/>
- <delete file="${filesToMove}"/>
- <delete file="${dirsToMove}"/>
</target>
<target name="package.extract.swt">
diff --git a/buildSDKSource.sh b/buildSDKSource.sh
index fbbf5dd..da0e89e 100755
--- a/buildSDKSource.sh
+++ b/buildSDKSource.sh
@@ -6,14 +6,12 @@ workDirectory=
baseBuilder=
eclipseBuilder=
-buildID="I20100608-0911"
-baseBuilderTag="R3_5_2"
-eclipseBuilderTag="R3_5_2"
-label="3.6.0"
+buildID="R3_6_1"
+baseBuilderTag="R3_6_1"
+eclipseBuilderTag="R3_6_1"
+label="3.6.1"
fetchTests="yes"
-equinoxTag="v20100329"
-ecfTag="I-HEAD-platform_feature-44-2010_05_28"
-concurrentTag="v20100215"
+ecfTag="R-Release_3_3-sdk_feature-22-2010_09_13"
usage="usage: <build ID> [-workdir <working directory>] [-baseBuilder <path to org.eclipse.releng.basebuilder checkout>] [-eclipseBuilder <path to org.eclipse.releng.eclipsebuilder checkout>] [-baseBuilderTag <org.eclipse.releng.basebuilder tag to check out>] [-noTests]"
@@ -84,6 +82,7 @@ if [ ! -e ${eclipseBuilder} ]; then
cvs -d${cvsRepo} co -r ${eclipseBuilderTag} org.eclipse.releng.eclipsebuilder
cd "${eclipseBuilder}"
patch -p0 < "${baseDir}"/patches/eclipse-addFetchMasterAndTestsTargets.patch
+ patch -p0 < "${baseDir}"/patches/eclipse-removeSkipMapsCheck.patch
cd "${baseDir}"
fi
@@ -207,6 +206,7 @@ java -jar \
fetchSdkTestsFeature \
-DbuildDirectory="${fetchDirectory}" \
-DskipBase=true \
+-Dhuson=true \
-DmapsRepo=${cvsRepo} \
-DmapCvsRoot=${cvsRepo} \
-DmapsCvsRoot=${cvsRepo} \
diff --git a/eclipse/directory.txt b/eclipse/directory.txt
index 0822934..15e3d1b 100644
--- a/eclipse/directory.txt
+++ b/eclipse/directory.txt
@@ -7,7 +7,7 @@ plugin at org.eclipse.ant.launching=v20100427,:pserver:anonymous at dev.eclipse.org:/c
plugin at org.eclipse.ant.ui=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.externaltools=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.externaltools=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.externaltools=v20100831_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ant.tests.core=v20091214,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ant.tests.ui=v20100602-1000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -33,7 +33,7 @@ plugin at org.eclipse.core.variables=v20100505,:pserver:anonymous at dev.eclipse.org:/
!*************** CORE CONTRIBUTION ********************************************************
!**** OSGi
-plugin at org.eclipse.osgi=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
+plugin at org.eclipse.osgi=R36x_v20100806,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
plugin at org.eclipse.osgi.services=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
plugin at org.eclipse.osgi.util=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
@@ -42,7 +42,7 @@ plugin at org.eclipse.equinox.common=v20100503,:pserver:anonymous at dev.eclipse.org:/
plugin at org.eclipse.equinox.preferences=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
plugin at org.eclipse.equinox.registry=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
plugin at org.eclipse.equinox.supplement=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
-plugin at org.eclipse.equinox.app=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
+plugin at org.eclipse.equinox.app=R36x_v20100803,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
plugin at org.eclipse.equinox.device=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
plugin at org.eclipse.equinox.event=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
plugin at org.eclipse.equinox.http=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
@@ -62,7 +62,7 @@ plugin at org.eclipse.equinox.cm=v20100520,:pserver:anonymous at dev.eclipse.org:/cvsr
plugin at org.eclipse.equinox.concurrent=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
!**** Prosyst Contributions
-plugin at org.eclipse.equinox.ds=v20100507,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
+plugin at org.eclipse.equinox.ds=R36x_v20100803,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
plugin at org.eclipse.equinox.io=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
plugin at org.eclipse.equinox.ip=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
plugin at org.eclipse.equinox.util=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
@@ -87,52 +87,52 @@ fragment at org.eclipse.equinox.weaving.hook=v20100503,:pserver:anonymous at dev.eclip
!****launcher, startup.jar
plugin at org.eclipse.equinox.launcher=v20100507,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
-fragment at org.eclipse.equinox.launcher.win32.win32.x86=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
-fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
-fragment at org.eclipse.equinox.launcher.win32.win32.ia64=v20100322-1720,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
-fragment at org.eclipse.equinox.launcher.wpf.win32.x86=v20100322-1720,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
-fragment at org.eclipse.equinox.launcher.carbon.macosx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
-fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
-fragment at org.eclipse.equinox.launcher.motif.aix.ppc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
-fragment at org.eclipse.equinox.launcher.motif.linux.x86=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
+fragment at org.eclipse.equinox.launcher.win32.win32.x86=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
+fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
+fragment at org.eclipse.equinox.launcher.win32.win32.ia64=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
+fragment at org.eclipse.equinox.launcher.wpf.win32.x86=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
+fragment at org.eclipse.equinox.launcher.carbon.macosx=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
+fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.aix.ppc=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
+fragment at org.eclipse.equinox.launcher.motif.linux.x86=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
plugin at org.eclipse.equinox.launcher.releng=v20100208,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
!****contributed fragments
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390=v20100507,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=v20100419,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
-fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
-fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390=R36x_v20100823,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=R36x_v20100823,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
+fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
+fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=R36x_v20100810,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
-feature at org.eclipse.equinox.executable=v20100524,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
+feature at org.eclipse.equinox.executable=R36x_v20100823,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
!**** Runtime
plugin at org.eclipse.core.runtime=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.contenttype=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.jobs=v20100515,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.jobs=R36x_v20100824,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Expressions
plugin at org.eclipse.core.expressions=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.expressions.tests=v20091203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Resources
-plugin at org.eclipse.core.resources=v20100526-0737,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.resources=R36x_v20100825-0600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32.x86=v20100505-1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32.ia64=v20081020,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.compatibility=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** File System
-plugin at org.eclipse.core.filesystem=v20100526-0737,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86_64=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.ia64=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filesystem=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86_64=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.ia64=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.x86=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.x86_64=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.ppc=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -146,24 +146,24 @@ plugin at org.eclipse.core.runtime.compatibility.auth=v20100517,:pserver:anonymous@
fragment at org.eclipse.core.runtime.compatibility.registry=v20100520,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Other Core Code
-plugin at org.eclipse.pde.build=v20100603,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
-plugin at org.eclipse.pde.build.tests=v20100602-1630,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
+plugin at org.eclipse.pde.build=R36x_v20100823,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
+plugin at org.eclipse.pde.build.tests=R36x_v20100817,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
feature at org.eclipse.pde.builder=v20040624a,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build/feature
!**** Test Suites
plugin at org.eclipse.core.tests.harness=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.resources=v20100526-0737,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.runtime=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.osgi.tests=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
+plugin at org.eclipse.core.tests.resources=R36x_v20100825-0600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.runtime=R36x_v20100719,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.osgi.tests=R36x_v20100723,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
!*************** DOC CONTRIBUTION ********************************************************
-plugin at org.eclipse.platform.doc.user=v20100608,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.platform.doc.isv=v20100608,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.user=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.isv=r361_v20100713,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.user=v20100608,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.isv=v20100602-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.user=r361_v20100721-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.isv=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.pde.doc.user=v20100603-1350,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
+plugin at org.eclipse.pde.doc.user=v20100727_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
!*************** Equinox Incubator Contribution ***************************
!**** Initializer bundle
@@ -193,12 +193,12 @@ plugin at org.eclipse.swt.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot
plugin at org.eclipse.core.resources.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.core.resources.jmx
feature at org.eclipse.equinox.jmx.server.feature=v20081124,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.feature
!*************** FEATURE CONTRIBUTION ******************************************************
-feature at org.eclipse.sdk=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
-plugin at org.eclipse.sdk=v20100216,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
+plugin at org.eclipse.sdk=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.jdt=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
+feature at org.eclipse.jdt=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
-feature at org.eclipse.pde=v20100525,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
+feature at org.eclipse.pde=r361_v20100727,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
feature at org.eclipse.pde.api.tools.ee.cdcfoundation10_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10-feature
feature at org.eclipse.pde.api.tools.ee.cdcfoundation11_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11-feature
feature at org.eclipse.pde.api.tools.ee.j2se12_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12-feature
@@ -211,23 +211,23 @@ feature at org.eclipse.pde.api.tools.ee.osgiminimum10_feature=v20091027-1300,:pserv
feature at org.eclipse.pde.api.tools.ee.osgiminimum11_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11-feature
feature at org.eclipse.pde.api.tools.ee.osgiminimum12_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12-feature
-feature at org.eclipse.platform=v20100602,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
-plugin at org.eclipse.platform=v20100531,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.platform=r361_v20100909,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
+plugin at org.eclipse.platform=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
feature at org.eclipse.sdk.examples=v20100527,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
plugin at org.eclipse.sdk.examples=v20100527,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.sdk.tests=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
+feature at org.eclipse.sdk.tests=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
plugin at org.eclipse.sdk.tests=v20060605,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.equinox.sdk=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
+feature at org.eclipse.equinox.sdk=r361_v20100903,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
feature at org.eclipse.cvs=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
plugin at org.eclipse.cvs=v20100414,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
feature at org.eclipse.help=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
-feature at org.eclipse.equinox.p2.user.ui=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
+feature at org.eclipse.equinox.p2.user.ui=r361_v20100903,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
feature at org.eclipse.equinox.p2.sdk=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
@@ -245,31 +245,31 @@ feature at org.eclipse.equinox.weaving.sdk=CVS,tag=v20100421,cvsRoot=:pserver:anony
feature at org.eclipse.pde.api.tools.ee.fragments=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.api.tools.ee.fragments
-!*************** JDT APT CONTRIBUTION [20100512-2100] *******************************************
+!*************** JDT APT CONTRIBUTION *******************************************
-plugin at org.eclipse.jdt.apt.core=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.core=R36_v20100727-0110,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.apt.ui=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.tests=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.tests=R36x_v20100707-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.jdt.compiler.apt=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.compiler.apt.tests=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.core=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.core=R36_v20100727-0110,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.apt.pluggable.tests=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-!*************** JDT CORE CONTRIBUTION [20100603-0800] *******************************************
+!*************** JDT CORE CONTRIBUTION [20100901-0800] *******************************************
-plugin at org.eclipse.jdt.core=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.tool=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.tool=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.builder=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.compiler=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.model=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.performance=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.tool.tests=v_A58,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.builder=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.compiler=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.model=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.performance=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.tool.tests=v_A68_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!*************** DEBUG CONTRIBUTION ********************************************************
plugin at org.eclipse.debug.core=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.ui=v20100601-1530,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.ui=v20100901_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug=v20100715_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.debug.ui=v20100602-0830,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.launching=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.launching.macosx=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -278,7 +278,7 @@ plugin at org.eclipse.jdt.launching.ui.macosx=v20100505,:pserver:anonymous at dev.ecli
plugin at org.eclipse.ui.console=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.debug.tests=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.tests=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.tests=v20100624_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.debug.examples.core=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.debug.examples.ui=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -291,16 +291,16 @@ plugin at org.eclipse.ltk.core.refactoring.tests=v20100520-0800,:pserver:anonymous@
plugin at org.eclipse.ltk.ui.refactoring=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ltk.ui.refactoring.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.core.manipulation=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui=v20100602-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests=r361_v20100818-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.ui.tests.refactoring=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.core=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.core=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.junit.runtime=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.junit4.runtime=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -371,12 +371,12 @@ plugin at org.aspectj.runtime,1.6.7=p2IU,id=org.aspectj.runtime,version=1.6.7.20091
plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20100505,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
-plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
+plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=R36x_v20100901,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
plugin at org.eclipse.equinox.p2.console=CVS,tag=v20100601,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
-plugin at org.eclipse.equinox.p2.core=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
-plugin at org.eclipse.equinox.p2.director=CVS,tag=v20100525,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
-plugin at org.eclipse.equinox.p2.director.app=CVS,tag=v20100527,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
-plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=v20100601,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
+plugin at org.eclipse.equinox.p2.core=CVS,tag=R36x_v20100804,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
+plugin at org.eclipse.equinox.p2.director=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
+plugin at org.eclipse.equinox.p2.director.app=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
+plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=R36x_v20100727,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20100518,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
plugin at org.eclipse.equinox.p2.engine=CVS,tag=v20100606,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
@@ -388,24 +388,24 @@ plugin at org.eclipse.equinox.p2.metadata=CVS,tag=v20100601,cvsRoot=:pserver:anonym
plugin at org.eclipse.equinox.p2.metadata.generator=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator
plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
-plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
+plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100824-2220,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=v20100525,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
-plugin at org.eclipse.equinox.p2.repository=CVS,tag=v20100519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
-plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=v20100520,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
+plugin at org.eclipse.equinox.p2.repository=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
+plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
plugin at org.eclipse.equinox.p2.selfhosting=CVS,tag=_api_cleanup_v20091125,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.selfhosting
-plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
+plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20100518,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20100519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20100507-1815,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
-plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
-plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
-plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
+plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
+plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
+plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
-plugin at org.eclipse.equinox.p2.tests=CVS,tag=v20100525,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
+plugin at org.eclipse.equinox.p2.tests=CVS,tag=R36x_v20100901,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
@@ -450,19 +450,19 @@ fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,1.0.0=GET,h
!*************** PDE CONTRIBUTION ********************************************************
-plugin at org.eclipse.pde=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
-plugin at org.eclipse.pde.core=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
+plugin at org.eclipse.pde=v20100625_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
+plugin at org.eclipse.pde.core=v20100902_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
plugin at org.eclipse.pde.junit.runtime=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
plugin at org.eclipse.pde.runtime=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
plugin at org.eclipse.pde.launching=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
-plugin at org.eclipse.pde.ui=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
+plugin at org.eclipse.pde.ui=v20100810_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
plugin at org.eclipse.pde.ui.templates=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
-plugin at org.eclipse.pde.ui.tests=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
+plugin at org.eclipse.pde.ui.tests=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
plugin at org.eclipse.ui.views.log=v20100423,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
-plugin at org.eclipse.pde.api.tools=v20100602-0930,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
-plugin at org.eclipse.pde.api.tools.ui=v20100601-1815,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
-plugin at org.eclipse.pde.api.tools.tests=v20100526-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
+plugin at org.eclipse.pde.api.tools=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
+plugin at org.eclipse.pde.api.tools.ui=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
+plugin at org.eclipse.pde.api.tools.tests=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
fragment at org.eclipse.pde.api.tools.ee.j2se12=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
@@ -481,7 +481,7 @@ plugin at org.eclipse.pde.ds.tests=v20100601,:pserver:anonymous at dev.eclipse.org:/cv
plugin at org.eclipse.pde.ua.core=v20100504,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.core
plugin at org.eclipse.pde.ua.ui=v20100504,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.ui
-feature at org.eclipse.rcp=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
+feature at org.eclipse.rcp=r361_v20100827,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
feature at org.eclipse.rcp.sdk=v20080507,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp.sdk
plugin at org.eclipse.rcp=v20100527-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
!**************** RELENG CONTRIBUTION ********************************************************
@@ -497,7 +497,7 @@ feature at com.ibm.icu.base=v20090119,:pserver:anonymous at dev.eclipse.org:/cvsroot/e
feature at org.eclipse.releng.tools=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
plugin at org.eclipse.releng.tools=v20100531,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.releng.tests=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tests=r361_v20100831,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.pde.tools.versioning=r20080922,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/plugins/org.eclipse.pde.tools.versioning
@@ -506,52 +506,52 @@ feature at org.eclipse.jdt.test.feature.sample=HEAD,:pserver:anonymous at dev.eclipse.
!*************** SWT CONTRIBUTION ********************************************************
!*** SWT Plugin
-plugin at org.eclipse.swt=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Platform Fragments
-fragment at org.eclipse.swt.carbon.macosx=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc64=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86_64=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.sparc=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.x86=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.aix.ppc=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.hpux.ia64_32=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.linux.x86=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.solaris.sparc=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.photon.qnx.x86=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.wce_ppc.arm=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86_64=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.ia64=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-fragment at org.eclipse.swt.gtk.linux.s390=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.s390x=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.carbon.macosx=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc64=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86_64=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.sparc=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.x86=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.aix.ppc=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.hpux.ia64_32=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.linux.x86=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.solaris.sparc=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.photon.qnx.x86=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.wce_ppc.arm=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86_64=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.ia64=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+
+fragment at org.eclipse.swt.gtk.linux.s390=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390x=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Examples
-plugin at org.eclipse.swt.examples=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser.demos=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.controls=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.launcher=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.layouts=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.ole.win32=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.paint=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser.demos=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.controls=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.launcher=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.layouts=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.ole.win32=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.paint=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Tests and Tools
-plugin at org.eclipse.swt.tests=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.tools=v3650b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tests=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tools=v3655c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!*************** TEAM CONTRIBUTION ********************************************************
-plugin at org.eclipse.team.core=I20100527-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.core=R36x_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.core=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.ssh=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.ssh2=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.ui=I20100527-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ui=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.ui=R36x_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ui=R36x_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.net=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.net=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -565,7 +565,7 @@ plugin at org.eclipse.team.examples.filesystem=I20100526-0800,:pserver:anonymous at de
plugin at org.eclipse.team.tests.core=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.tests.cvs.core=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.net.win32.x86=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
-fragment at org.eclipse.core.net.linux.x86=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
+fragment at org.eclipse.core.net.linux.x86=R36x_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
fragment at org.eclipse.core.net.linux.x86_64=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
fragment at org.eclipse.core.net.win32.x86_64=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
!*************** Test Framework CONTRIBUTION ********************************************************
@@ -583,9 +583,9 @@ plugin at org.eclipse.test.dispatcher=HEAD,:pserver:anonymous at dev.eclipse.org:/cvsr
!*************** TEXT CONTRIBUTION ********************************************************
plugin at org.eclipse.text=v20100601-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.filebuffers=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.examples.javaeditor=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -599,22 +599,22 @@ plugin at org.eclipse.jdt.text.tests=v20100526-0800,:pserver:anonymous at dev.eclipse.
!*************** UI CONTRIBUTION *********************************************************
plugin at org.eclipse.core.commands=I20100512-1500,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.observable=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.property=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.beans=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui=I20100603-1100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide.application=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui=M20100826-1330,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide.application=M20100707-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.presentations.r21=I20100517-1500,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.views=I20100527-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench=I20100603-1100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench=M20100826-1330,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.ui.workbench.compatibility=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.ui.win32=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.carbon=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.cocoa=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.carbon=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.cocoa=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.examples.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -627,13 +627,13 @@ plugin at org.eclipse.ui.examples.fieldassist=I20100601-0800,:pserver:anonymous at dev
plugin at org.eclipse.ui.examples.contributions=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.navigator=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.navigator.resources=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator.resources=M20100707-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.views.properties.tabbed=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.tests.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.tests.databinding.conformance=I20090818-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.rcp=I20090525-2000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.navigator=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.views.properties.tabbed=I20090525-2000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -642,7 +642,7 @@ plugin at org.eclipse.ui.tests.harness=I20100601-0800,:pserver:anonymous at dev.eclips
!*************** UPDATE CONTRIBUTION ********************************************************
plugin at org.eclipse.update.configurator=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.update.core=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.update.core=R36x_v20100629,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.update.scheduler=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.update.ui=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -655,13 +655,13 @@ plugin at org.eclipse.update.tests.core=v20100512,:pserver:anonymous at dev.eclipse.or
!**** Help
plugin at org.eclipse.help=v20100524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.help.appserver=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.base=v20100520,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.ui=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.webapp=v20100507,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.base=r36_r20100816,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.ui=r36_v20100702,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.webapp=r36_r20100816,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Welcome
plugin at org.eclipse.ui.intro=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.intro.universal=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro.universal=r36_v20100702,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Cheat sheets
plugin at org.eclipse.ui.cheatsheets=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -670,9 +670,9 @@ plugin at org.eclipse.ui.cheatsheets=v20100427,:pserver:anonymous at dev.eclipse.org:/
plugin at org.eclipse.ui.browser=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Forms
-plugin at org.eclipse.ui.forms=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.forms=r36_v20100702,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
!**** Tests
-plugin at org.eclipse.ua.tests=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ua.tests=r36_r20100816,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ua.tests.doc=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.forms=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/featureVersions.properties b/eclipse/featureVersions.properties
index d02e6a0..2f24e2e 100644
--- a/eclipse/featureVersions.properties
+++ b/eclipse/featureVersions.properties
@@ -1,9 +1,9 @@
-#Thu Jun 10 10:29:02 EDT 2010
+#Fri Oct 01 11:18:00 EDT 2010
org.eclipse.equinox.compendium.sdk,0.0.0=v20100421
org.eclipse.equinox.weaving.sdk,0.0.0=v20100421
-org.eclipse.platform,0.0.0=v20100602
+org.eclipse.platform,0.0.0=r361_v20100909
master-equinox,0.0.0=v20100521
-org.eclipse.rcp,0.0.0=v20100519
+org.eclipse.rcp,0.0.0=r361_v20100827
org.eclipse.equinox.p2.sdk,0.0.0=v20100503
com.ibm.icu.base,0.0.0=v20090119
master,0.0.0=v20091019
@@ -13,23 +13,23 @@ org.eclipse.equinox.server.core,0.0.0=v20100510
org.eclipse.releng.tools,0.0.0=v20100427
org.eclipse.equinox.p2.discovery.feature,0.0.0=v20100510
org.eclipse.equinox.core.sdk,0.0.0=v20100603
-org.eclipse.equinox.p2.user.ui,0.0.0=v20100503
+org.eclipse.equinox.p2.user.ui,0.0.0=r361_v20100903
org.eclipse.equinox.server.p2,0.0.0=v20100503
-org.eclipse.sdk,0.0.0=v20100427
+org.eclipse.sdk,0.0.0=r361_v20100714-0800
master-equinox-weaving,0.0.0=v20090817
master-jetty,0.0.0=v20090305
-org.eclipse.jdt,0.0.0=v20100526-0800
+org.eclipse.jdt,0.0.0=r361_v20100714-0800
org.eclipse.equinox.jmx.server.feature,0.0.0=v20081124
org.eclipse.equinox.server.servletbridge,0.0.0=v20100510
master-ecf,0.0.0=v20090316
org.eclipse.equinox.jmx.client.feature,0.0.0=v20081124
org.eclipse.sdk.examples,0.0.0=v20100527
org.eclipse.equinox.jmx.common.feature,0.0.0=v20070507
-org.eclipse.equinox.sdk,0.0.0=v20100601
+org.eclipse.equinox.sdk,0.0.0=r361_v20100903
org.eclipse.pde.api.tools.ee.fragments,0.0.0=v20100427
org.eclipse.equinox.serverside.sdk,0.0.0=v20100421
-org.eclipse.pde,0.0.0=v20100525
+org.eclipse.pde,0.0.0=r361_v20100727
org.eclipse.equinox.server.jetty,0.0.0=v20100510
-org.eclipse.equinox.executable,0.0.0=v20100524
+org.eclipse.equinox.executable,0.0.0=R36x_v20100823
org.eclipse.help,0.0.0=v20100427
master-equinox-p2,0.0.0=v20091106
diff --git a/eclipse/features/org.eclipse.equinox.executable/feature.xml b/eclipse/features/org.eclipse.equinox.executable/feature.xml
index 09c5543..8014539 100644
--- a/eclipse/features/org.eclipse.equinox.executable/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.executable/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.equinox.executable"
label="%featureName"
- version="3.4.0.qualifier">
+ version="3.4.1.qualifier">
<description>
%description
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
index cab97bd..bec693c 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -1003,7 +1003,7 @@ static _TCHAR* formatVmCommandMsg( _TCHAR* args[], _TCHAR* vmArgs[], _TCHAR* pr
while(list != NULL) {
for (index = 0; list[index] != NULL; index++)
{
- if (list[index][0] == _T_ECLIPSE('-') && *(ch-1) == _T_ECLIPSE(' '))
+ if (ch != message && list[index][0] == _T_ECLIPSE('-') && *(ch-1) == _T_ECLIPSE(' '))
*(ch-1) = _T_ECLIPSE('\n');
_tcscpy( ch, list[index] );
ch += _tcslen( list[index] );
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
index 8212c4e..29e7f33 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Martin Oberhuber (Wind River) - [316975] memory leak on failure reading .ini file
*******************************************************************************/
#include "eclipseOS.h"
@@ -84,10 +85,6 @@ int readConfigFile( _TCHAR * config_file, int *argc, _TCHAR ***argv )
size_t bufferSize = 1024;
size_t length;
- /* allocate buffers */
- buffer = (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
- argument = (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
-
/* Open the config file as a text file
* Note that carriage return-linefeed combination \r\n are automatically
* translated into single linefeeds on input in the t (translated) mode
@@ -96,6 +93,10 @@ int readConfigFile( _TCHAR * config_file, int *argc, _TCHAR ***argv )
file = _tfopen(config_file, _T_ECLIPSE("rt"));
if (file == NULL) return -3;
+ /* allocate buffers */
+ buffer = (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
+ argument = (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
+
*argv = (_TCHAR **)malloc((1 + maxArgs) * sizeof(_TCHAR*));
index = 0;
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
index 98605dc..9aeee5f 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
@@ -114,9 +114,16 @@ static void log_handler(const gchar* domain, GLogLevelFlags flags, const gchar*
/* nothing */
}
-/* Create the mutex name string, with optional suffix. Caller should free the memory when finished */
-static char * createMutexName(char * suffix) {
+/* Create a "SWT_Window_" + APP_NAME string with optional suffix.
+ * Caller should free the memory when finished */
+static char * createSWTWindowString(char * suffix, int semaphore) {
+#ifdef SOLARIS
+ /* solaris requires semaphore names to start with '/' */
+ char * prefix = semaphore != 0 ? _T_ECLIPSE("/SWT_Window_") : _T_ECLIPSE("SWT_Window_");
+#else
char * prefix = _T_ECLIPSE("SWT_Window_");
+#endif
+
char * result = malloc((_tcslen(prefix) + _tcslen(getOfficialName()) + (suffix != NULL ? _tcslen(suffix) : 0) + 1) * sizeof(char));
if (suffix != NULL)
_stprintf(result, _T_ECLIPSE("%s%s%s"), prefix, getOfficialName(), suffix);
@@ -152,7 +159,7 @@ static int setAppWindowPropertyFn() {
/* set the Application window property by executing _setWindowPropertyFn within a semaphore */
int setAppWindowProperty() {
int result;
- char * mutexName = createMutexName(NULL);
+ char * mutexName = createSWTWindowString(NULL, 1);
result = executeWithLock(mutexName, setAppWindowPropertyFn);
gtk.XSync(gtk_GDK_DISPLAY, False);
free(mutexName);
@@ -195,16 +202,16 @@ int reuseWorkbench(_TCHAR** filePath, int timeout) {
openFilePath = filePath;
//App name is defined in SWT as well. Values must be consistent.
- appName = createMutexName(NULL);
+ appName = createSWTWindowString(NULL, 0);
appWindowAtom = gtk.XInternAtom(gtk_GDK_DISPLAY, appName, FALSE);
free(appName);
//check if app is already running. Just set property if it is.
- if (setAppWindowProperty())
+ if (setAppWindowProperty() > 0)
return 1;
/* app is not running, create a launcher window to act as a mutex so we don't need to keep the semaphore locked */
- launcherName = createMutexName(_T_ECLIPSE("_Launcher"));
+ launcherName = createSWTWindowString(_T_ECLIPSE("_Launcher"), 1);
launcherWindowAtom = gtk.XInternAtom(gtk_GDK_DISPLAY, launcherName, FALSE);
result = executeWithLock(launcherName, createLauncherWindow);
free(launcherName);
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
index 5f0f137..7b9b3f4 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
@@ -42,7 +42,7 @@ OPTFLAG = -O -s
EXEC = $(PROGRAM_OUTPUT)
DLL = $(PROGRAM_LIBRARY)
#LIBS = `pkg-config --libs-only-L gtk+-2.0` -lgtk-x11-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lgdk-x11-2.0 -lglib-2.0 -lthread -ldl -lc
-LIBS = -lthread -ldl -lc
+LIBS = -lthread -ldl -lc -lrt
GTK_LIBS = -DGTK_LIB="\"libgtk-x11-2.0.so.0\"" -DGDK_LIB="\"libgdk-x11-2.0.so.0\"" -DPIXBUF_LIB="\"libgdk_pixbuf-2.0.so.0\"" -DGOBJ_LIB="\"libgobject-2.0.so.0\"" -DX11_LIB="\"libX11.so.4\""
LFLAGS = -G
CFLAGS = $(OPTFLAG) \
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak b/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
index 2be9ebd..bd05746 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
@@ -10,5 +10,5 @@
#*******************************************************************************
maj_ver=1
-min_ver=307
+min_ver=309
LIB_VERSION = $(maj_ver)$(min_ver)
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
index 11ec827..8033224 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
@@ -78,6 +78,7 @@ typedef struct {
#define COMPANY_NAME_KEY _T_ECLIPSE("\\StringFileInfo\\%04x%04x\\CompanyName")
#define SUN_MICROSYSTEMS _T_ECLIPSE("Sun Microsystems")
+#define ORACLE _T_ECLIPSE("Oracle")
static void sendOpenFileMessage(HWND window) {
_TCHAR* id;
@@ -595,6 +596,9 @@ int isSunVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
if (_tcsncmp(value, SUN_MICROSYSTEMS, _tcslen(SUN_MICROSYSTEMS)) == 0) {
result = 1;
break;
+ } else if (_tcsncmp(value, ORACLE, _tcslen(ORACLE)) == 0) {
+ result = 1;
+ break;
}
}
free(key);
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
index 47f41ef..a65d54e 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.equinox.p2.user.ui"
label="%featureName"
- version="2.0.0.qualifier"
+ version="2.0.1.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg">
@@ -315,7 +315,6 @@
version="1.0.4.qualifier"
unpack="false"/>
-
<plugin
id="org.eclipse.equinox.p2.operations"
download-size="0"
diff --git a/eclipse/features/org.eclipse.equinox.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.sdk/feature.xml
index f3af010..a6fe06d 100644
--- a/eclipse/features/org.eclipse.equinox.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.sdk/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.equinox.sdk"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName">
<description>
@@ -39,6 +39,6 @@
<includes
id="org.eclipse.equinox.weaving.sdk"
- version="0.0.0"/>
+ version="0.0.0"/>
</feature>
diff --git a/eclipse/features/org.eclipse.jdt/feature.xml b/eclipse/features/org.eclipse.jdt/feature.xml
index e79d2f0..f302e0f 100644
--- a/eclipse/features/org.eclipse.jdt/feature.xml
+++ b/eclipse/features/org.eclipse.jdt/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.jdt"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg">
@@ -24,7 +24,7 @@
</url>
<requires>
- <import feature="org.eclipse.platform" version="3.6.0" match="greaterOrEqual"/>
+ <import feature="org.eclipse.platform" version="3.6.1" match="greaterOrEqual"/>
</requires>
<plugin
diff --git a/eclipse/features/org.eclipse.pde/feature.xml b/eclipse/features/org.eclipse.pde/feature.xml
index 29a5d7c..27f4daf 100644
--- a/eclipse/features/org.eclipse.pde/feature.xml
+++ b/eclipse/features/org.eclipse.pde/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.pde"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg">
diff --git a/eclipse/features/org.eclipse.platform/feature.xml b/eclipse/features/org.eclipse.platform/feature.xml
index 65e6d99..90becef 100644
--- a/eclipse/features/org.eclipse.platform/feature.xml
+++ b/eclipse/features/org.eclipse.platform/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.platform"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg">
diff --git a/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct b/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
index b2cffd0..3ec2cc4 100644
--- a/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
+++ b/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
@@ -1,3 +1,3 @@
name=Eclipse Platform
id=org.eclipse.platform
-version=3.5.0
\ No newline at end of file
+version=3.6.1
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html b/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
index 53874f3..6c9580e 100644
--- a/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
+++ b/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
@@ -7,8 +7,8 @@
<body>
<h1>Eclipse Project Release Notes</h1>
-<p>Release 3.6.0<br/>
- Last revised June 2, 2010</p>
+<p>Release 3.6.1<br/>
+ Last revised September 8, 2010</p>
<p align="left"><strong>This software is OSI Certified Open Source Software.<br/>
OSI Certified is a certification mark of the Open Source Initiative. </strong></p>
<blockquote>
@@ -1247,7 +1247,7 @@ A global Java debug preference specifies the debugger timeout, which is the
maximum amount of time the debugger waits for a response from the target VM
after making a request of that VM. Slow connections may require that this value
be increased. The timeout value can be edited from the <b>Java > Debug </b>preference
-page. Changing the timeout value only effects subsequently launched VM, not VMs
+page. Changing the timeout value only affects subsequently launched VM, not VMs
that are already running.
<h4> Updating of inspected values</h4>
@@ -1620,6 +1620,3684 @@ Eclipse 3.6 and earlier 3.x releases:</p>
list of concerns do not apply since they affect the layout and interpretation
of files in the plug-in <i>project</i> but none affect the actual deployed form
of the plug-in.)</p>
+
+
+
+ <h2>7. <a name="DefectsFixed"></a>Defects Fixed in Maintenance Releases</h2>
+
+<h3>7.1 Defects fixed in release 3.6.1 since 3.6.0</h3>
+<p>Release 3.6.1 is a maintenance release to fix serious defects present in
+release 3.6.0 These changes only affect some plug-ins and
+features.</p>
+
+<p>Maintenance release 3.6.1 contains fixes for the following defects and others:</p>
+
+<p>
+Note: Bug fixes since the 3.6 release can be obtained by the following the Bugzilla query: </p>
+<p>
+
+<a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc_type=allwordssubstr;bug_status=RESOLVED;bug_status=VERIFIED;bug_status=CLOSED;classification=Eclipse;classification=RT;field-1-0-0=bug_status;field-1-1-0=classification;field-1-2-0=product;field-1-3-0=resolution;field-1-4-0=target_milestone;field0-0-0=noop;keywords_type=allwords;long_desc_type=allwordssubstr;product=Equinox;product=JDT;product=PDE;product=Platform;query_format=advanced;remaction=;resolution=FIXED;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;target_milestone=3.6.1;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type-1-3-0=anyexact;type-1-4-0=anyexact;type0-0-0=noop;value-1-0-0=RESOLVED%2CVERIFIED%2CCLOSED;value-1-1-0=Eclipse%2CRT;value-1-2-0=Equinox%2CJDT%2CPDE%2CPlatform;value-1-3-0=FIXED;value-1-4-0=3.6.1;value0-0-0=|;query_based_on=">Bugs fixed in the 3.6.1 release</a>
+
+</p>
+
+
+<table class="bz_buglist" cellspacing="0" cellpadding="4" width="100%">
+
+ <tr class="bz_buglist_header bz_first_buglist_header" align="left">
+ <th colspan="1" class="first-child">
+ <a href="buglist.cgi?bug_file_loc_type=allwordssubstr&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&classification=Eclipse&classification=RT&columnlist=short_desc&field0-0-0=noop&keywords_type=allwords&long_desc_type=allwordssubstr&product=Equinox&product=JDT&product=PDE&product=Platform&query_format=advanced&remaction=&resolution=FIXED&short_desc=&short_desc_type=allwordssubstr&status_whiteboard=&status_whiteboard_type=allwordssubstr&target_milestone=3.6.1&type0-0-0=noop&value0-0-0=%7C&order=bug_id%20DESC&query_based_on=">ID</a>
+ </th>
+
+<th colspan="1">
+ <a href="buglist.cgi?bug_file_loc_type=allwordssubstr&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&classification=Eclipse&classification=RT&columnlist=short_desc&field0-0-0=noop&keywords_type=allwords&long_desc_type=allwordssubstr&product=Equinox&product=JDT&product=PDE&product=Platform&query_format=advanced&remaction=&resolution=FIXED&short_desc=&short_desc_type=allwordssubstr&status_whiteboard=&status_whiteboard_type=allwordssubstr&target_milestone=3.6.1&type0-0-0=noop&value0-0-0=%7C&order=short_desc%2Cbug_id&query_based_on=">Summary</a>
+ </th>
+
+
+ </tr>
+
+ <tr class="bz_bugitem
+ bz_minor bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b169959"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=169959">169959</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Exclusion filter for source folders unclear
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b240657"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240657">240657</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Combo.setText() doesnt set the text if the string is a substring of the strings in combo
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b243529"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243529">243529</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[DND] [Mac] Erratic DND behaviour on Mac OS X
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b244757"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244757">244757</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[ActivityMgmt] ConcurrentModificationException when activities added dynamically
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b268833"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268833">268833</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[rulers] NullPointerException in org.eclipse.jface.text.source.LineNumberRulerColumn.getWidth
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b270472"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270472">270472</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[JFace] Orca cannot read Eclipse status line
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b277574"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277574">277574</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >JDI thread evaluations (Error: Exception processing async thread queue)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b278598"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278598">278598</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[product] ignore certain program arguments when initializing from a launch config
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b284269"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284269">284269</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[KeyBindings] Reduce memory footprint of BindingManager
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_trivial bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b294761"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294761">294761</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Gripper icon on Mac status bar should be transparent
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b294860"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294860">294860</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Left arrow buttons point to the right (Carbon)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b299451"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299451">299451</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[DND] Tracker rectangle appears on wrong screen when dragging part
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b304652"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304652">304652</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Export of a feature based product with source bundles fails
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b306464"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306464">306464</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE in ProblemReporter.missingTypeInMethod(ProblemReporter.java:5113)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b308402"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308402">308402</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[index] PatternSearchJob ignores participant index entries
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b309269"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309269">309269</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Widgets] Table selection event does not return a correct table item
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b311217"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311217">311217</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] New Child macro does not pick-up child topics at the toc level - Fix for Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b311579"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311579">311579</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[DS] Factory component configurations are not disposed when cannot be activated
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b312140"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312140">312140</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >PDE build uses incorrect profile area if Eclipse is read-only
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_enhancement bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b312254"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312254">312254</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Plan verifier to allow third party plugin to veto a provisioning plan
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b312365"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312365">312365</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Carbon: DnD fails when dropping object to a child control.
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313121"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313121">313121</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Font dialog doesn't return selected Font (when opened after MULTI Text)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313153"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153">313153</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Too many blocked "Refreshing external folders" jobs (FUP of bug 302295)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313234"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313234">313234</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >-console <port> terminating OSGi framework in 3.6.RC1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313324"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313324">313324</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Suspicious fall-through
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313409"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313409">313409</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE during Add Artifact to Target Platform
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313447"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313447">313447</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Avoid MD5 computation for publishing from dropins reconciler
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313454"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313454">313454</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[publisher] Add a new flag to the UpdateSitePublisherApplication to generate the JRE's IU.
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313530"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313530">313530</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[hovering] HTMLPrinter should refresh colors if corresponding OS colors change
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313593"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313593">313593</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Accessibility] Implement retrieval of visible children
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313651"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313651">313651</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[formatter] format comments (differs between paste and save action)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313668"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313668">313668</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[search] Call hierarchy doesn't show all calls of the method in workspace
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313740"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313740">313740</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Unable to select any window when JFace warning dialog and file browse dialog are both open
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313744"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313744">313744</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >SimpleArtifactRepository does not allow the user to limit the number of threads used for downloads
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313747"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313747">313747</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >SimpleArtifactRepository fails to transfer files when its location is relative
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313789"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313789">313789</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[comparator] False Positive comparing with different inner class info ordering
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313825"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825">313825</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Erroneous local variable's problems reported at surrounding ParenthesizedExpression
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313905"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313905">313905</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[reconciler] Second startup after update also slow
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313943"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313943">313943</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[hovering] Java source hovers not readable using Ubuntu 10.04 (white-on-black tooltips)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313952"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313952">313952</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE from import page crashes Eclipse
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313953"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313953">313953</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[performance] [reconciler] [query] Super slow startup time after deleting files in dropins
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b313994"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313994">313994</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Webapp] If a toc satisfies a criterion but its children do not it is still displayed - Fix for Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b313996"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313996">313996</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Intro] Slate theme Overview page looks odd with non-white window background - Fix for Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_minor bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314243"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314243">314243</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Widgets] Tooltip for tool item in inactive shell not updated when mouse moved to other item
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b314256"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314256">314256</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] Duplicate links in F1 help - Fix in 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314324"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314324">314324</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] Ton's of EofException/s - Fix in Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b314343"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314343">314343</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[console] IllegalStateException can happen on shutdown if you disconnect from standard console
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314456"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314456">314456</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE at org.eclipse.pde.internal.core.target.provisional.LoadTargetDefinitionJob.handleReload(LoadTargetDefinitionJob.java:370)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b314589"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314589">314589</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] NPE creating new scope in search view - Fix for 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314768"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314768">314768</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >AbstractRepositoryManager eats exception
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b314830"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314830">314830</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[compiler] Switching on a null expression doesn't always throw NullPointerException
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314900"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314900">314900</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Compare task doesn't report added or removed api components
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b314946"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314946">314946</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Accessibility] Title override values not reported in ControlsWithAccessibleNames example
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b314951"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314951">314951</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Accessibility] Spinners report back as 'unknown'
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315092"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315092">315092</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >API Baseline becomes empty
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315620"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">315620</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Progress] WorkbenchWindow is leaked
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315710"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315710">315710</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >headless build fails with java.lang.ClassCastException
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315732"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315732">315732</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[formatter] NullPointerException (always) on inserting a custom template proposal into java code when "Use code formatter" is on
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315746"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315746">315746</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >--launcher.openFile on Solaris fails with error about unresolved symbol sem_open
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315757"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315757">315757</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[publisher][regression] Cannot provide -contextMetadata to publisher application
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315762"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315762">315762</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >bundles with compile errors never published even through p2.publishonerror is set to "true"
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315792"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315792">315792</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE is thrown during the headless build
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315812"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315812">315812</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[accessibility] text-based ToolItems read out their help/tooltip text instead of text
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315839"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315839">315839</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[CommonNavigator] NPE in WorkingSetsContentProvider
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315894"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315894">315894</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >non composable key combinations erases first char in text editors
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315932"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315932">315932</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[printing] Print selection prints whole file
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315939"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315939">315939</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[launcher] Crash in formatVmCommandMsg
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b315948"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315948">315948</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >SWT doesnt work on WinCE 6.0 since v3312. Missing check on OS.IsWinCE
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b315978"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978">315978</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Big regression, eclipse compiles my workspace in 3 mins instead of few seconds
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316011"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316011">316011</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] Restore defaults button does not read remoteHelpPreferred preference correctly. - Fix in Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316078"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316078">316078</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Extra ending comment tag in helloworld-feature.xml
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316164"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316164">316164</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[view management] view activation should be triggered by stack frames in default model
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316238"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316238">316238</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Widgets] Main menu lost when using "open in new window"
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316252"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316252">316252</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Mozilla][Browser]Wrong usage of C.free()
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316432"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316432">316432</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[widgets] SWT Cocoa, StructuredViewer dispatches selectionChanged on refresh()/setInput()
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316456"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456">316456</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[1.5][compiler] Annotation values can access private class members
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316619"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316619">316619</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Debug context activation causes expressions view updates when hidden if selection is empty
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316643"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316643">316643</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Cannot enter Report Conversion Patterns on API Use Report External Tool Launch
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_enhancement bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316645"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316645">316645</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >API Use Report provides no Common tab
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316650"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316650">316650</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >PathUtil doesn't make paths relative correctly across volumes
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316701"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316701">316701</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Contributions] Service initialization wrong! Sources must be initialized before Handlers
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316780"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316780">316780</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[ds] ClassCircularityError
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P2 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316824"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316824">316824</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Help] Search Index makes remote server calls when building if remote priority preference is selected - Fix in Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316839"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316839">316839</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >JobManager.yieldRule() does not update lock graph correctly for jobs that manage rules
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316875"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316875">316875</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[backport] Commit, Apply Patch and Synchronize no longer take keybindings
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316889"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316889">316889</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Internal compiler error: java.lang.NullPointerException with a specific use of recursive generics
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316938"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316938">316938</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Incorrect signature for OS.XGetWindowProperty
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b316975"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316975">316975</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[launcher] memory leak on failure to read launcher.ini file
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b316997"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316997">316997</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Forms] FormText: IllegalArgumentException when copying empty selection - Fix in Eclipse 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317051"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317051">317051</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >reducing item count can send Selection event
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317054"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317054">317054</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Table/Tree item selection can send multiple Selection events
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_VERIFIED bz_FIXED bz_secure bz_secure_mode_manual bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317055"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317055">317055</a>
+ <span style="display: none">[SEC]</span>
+ </td>
+
+ <td >[Webapp][Security] URLEncode url requests from local users
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317068"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317068">317068</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[breadcrumb] BreadcrumbItems not disposed when editor closed
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317100"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317100">317100</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Debug breadcrumb does not allow to switch threads
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317264"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264">317264</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[search] Refactoring is impossible with commons.lang added to project
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317282"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317282">317282</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[implementation] AbstractTextEditor does not dispose its SaveAction.
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317283"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317283">317283</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[breadcrumb] BreadcrumbItems not disposed when editor closed
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317390"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317390">317390</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Editors hang for several seconds when processing input when Windows On-Screen Keyboard accessory is running
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317468"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317468">317468</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Adding elements to an enum body with trailing comma generates bad code
+ </td>
+
+ </tr>
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317755"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317755">317755</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[JUnit] JUnit -> Activate on Error/Failure Only not working
+ </td>
+
+ </tr>
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317760"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317760">317760</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >SimpleArtifactRepository behaviour change
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317782"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317782">317782</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >TextTransfer generates incorrect UTF16 in pasteboard when copying strings from SWT application
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317841"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317841">317841</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[incremental build] unnecessary 'structural changes' due to annotation parameters
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b317902"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317902">317902</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Segmentation Fault When Widget looses focus
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_trivial bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b317972"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317972">317972</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Fix for wrong usages of affect* and effect*
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318020"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318020">318020</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[compiler] wrong initialization flow info with if (true) throw... pattern in else block
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318072"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318072">318072</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Webapp] In org.eclipse.help.webapp, schema folder is not included in build.properties
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P2 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318114"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318114">318114</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >The 3.6 director should use running system for default os/ws/arch values
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318144"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318144">318144</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >transformRepos target in genericTargets.xml doesn't transform if directory contains non-repository files
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318162"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318162">318162</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[backport] Resource filters do not work in CDT 7.0 projects
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318170"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318170">318170</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Backport] Need symlink support in eclipse for windows vista
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318205"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318205">318205</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Translation Question - WSW36#397
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318221"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318221">318221</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Doc] Translation Question - WSW36#406
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318333"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318333">318333</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >equals compares objects of different types
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318540"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318540">318540</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Validation dialog is now modal
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318557"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318557">318557</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[backport] Exception when trying to commit a lot of projects
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318597"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318597">318597</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Backport valid 3.6.1 fix candidates
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318782"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318782">318782</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[DataBinding] StringIndexOutOfBoundsException exception when clearing a Text with SWT.SEARCH
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318797"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318797">318797</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[implementation] Deadlock in SharedASTProvider.getAST() (on breakpoint creation)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318862"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318862">318862</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Viewers] [Provider] ClassCastException happened at jface when selecting tree with using picture-capture software.
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b318893"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318893">318893</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[implementation] NPE in SourceViewer
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b318916"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318916">318916</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Fix for wrong usages of affect* and effect*
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319037"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319037">319037</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >apitooling.apideprecation_reportconversion task has incorrect parameters listed in doc
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319274"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319274">319274</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Baseline is not valid while generating performance results for maintenance builds
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_secure bz_secure_mode_manual bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319344"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319344">319344</a>
+ <span style="display: none">[SEC]</span>
+ </td>
+
+ <td >[Webapp][Security] Phishing on help application
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_enhancement bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319378"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319378">319378</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Preferences->Java Compiler-> Errors/Warnings -> switch case fall through enhancement
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319562"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319562">319562</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >update R3_6_maintenance build scripts to include 3.6.1 feature versions
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319582"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319582">319582</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >AIOOBE calling IAHyperlink methods
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319603"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603">319603</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[1.5][compiler] eclipse fails with 2 generics methods with the same name while javac succeeds
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319645"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319645">319645</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Click throughs still says 3.5
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319677"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319677">319677</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >VoiceOver doesn't read tooltip (help tag)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319688"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319688">319688</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Backport] libunix interface broken for readlink()
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319700"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319700">319700</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[doc] Broken Link, Customizing the p2_UI
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319701"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319701">319701</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[doc] Broken Link, Repository management
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319781"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319781">319781</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Reference to java.util.Timer(String, boolean) not reported as error under 1.4
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319786"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319786">319786</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Change API freeze check in 3.6.x stream to compare against 3.6
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319860"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319860">319860</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[organize imports] Unused import added for reference to nested type from Javadoc
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_minor bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b319900"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319900">319900</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >StringLiteral#setLiteralValue needlessly escapes apostrophes (')
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b319944"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319944">319944</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >PDE feature must be increased to 3.6.1
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320005"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320005">320005</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[launcher] --launcher.XXMaxPermSize: isSunVM should return true for Oracle
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320064"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320064">320064</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >StyledText and CCombo should also use preceding CLabel as accessible name
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320066"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320066">320066</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >DROP_DOWN ToolItems need accessible name
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320123"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320123">320123</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE : Cannot import project as source from target platform
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320124"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320124">320124</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >ArrayIndexOutOfBoundsException can occur when using bundle command in the console
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_blocker bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320167"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320167">320167</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Auto-Activation works only once
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320195"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320195">320195</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Eclipse hangs when processing annotation
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320342"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320342">320342</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Test failure in YieldTest.testResumingThreadJobIsNotRescheduled
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320414"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320414">320414</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Compiler produces incorrect bytecode for null pointer check
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320427"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320427">320427</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >MirrorSelector uses 1.5 methods
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_secure bz_secure_mode_manual bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320547"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320547">320547</a>
+ <span style="display: none">[SEC]</span>
+ </td>
+
+ <td >[Webapp][Security] Misuse of /topic/file
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_secure bz_secure_mode_manual bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320548"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320548">320548</a>
+ <span style="display: none">[SEC]</span>
+ </td>
+
+ <td >[Webapp][Security] Ability to read files not in bundles
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320581"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320581">320581</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Widgets] [GTK2.18] JVM crash when call Control.moveAbove(Control control)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320583"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320583">320583</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Target platform gets out of sync at each Eclipse restart
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320754"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320754">320754</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[formatter] formatter:off/on tags does not work correctly
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320760"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320760">320760</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Eclipse Help System WAR has a deadlock at startup
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320802"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320802">320802</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >ASTParser.createASTs(..) fails silently on multiple missing parameter types.
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320884"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320884">320884</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Update link to J2SE 1.4 Javadocs
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b320946"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320946">320946</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Bad comparison in ProfileBundleContainer.isContentEqual()
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b320959"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320959">320959</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >The Eclipse Platform version specified in .eclipseproduct in Helios is wrong
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b321359"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321359">321359</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Purple-icons drawing image with cairo in Solaris-sparc (big-endian)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b321386"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321386">321386</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Eclipse exits with 0 exit code when application is throwing an exception
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b321505"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321505">321505</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Backport][Import/Export] importing file from big disk hangs UI
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b321850"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321850">321850</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Launch config dialog wrongly asks to save unsaved changes
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b321921"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321921">321921</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Create 3.6.1 freeze plan
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b321926"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926">321926</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Erroneously deems null check conditional branch to be dead code, and produces incorrect bytecode
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b321942"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321942">321942</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Eclipse will not Launch with certain .bundledata.## file in ORG.ECLIPSE.OSGI folder
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b322001"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001">322001</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[1.5][compiler] Name Clash error occurs
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b322137"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322137">322137</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >SWT.ON_TOP shells do not stay above all applications
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b322154"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154">322154</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Compiler bug that does not occur in Galileo 3.5.2
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b322222"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322222">322222</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Widgets] segfault in pango_layout_new when closing a dialog
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b322291"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322291">322291</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[launcher] remember to compile for S390(x)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b322374"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322374">322374</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Webapp][Security] Setting sys prop -Dserver_host=127.0.0.1 does NOT force webserver to listen only on 127.0.0.1 interface
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b322438"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322438">322438</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Browser-Webkit] Mouse events have wrong button values (0,1,2 instead of 1,2,3)
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b322887"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322887">322887</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Mac] [Commands] Command from 'org.eclipse.ui.cocoa' fragment references category defined in 'org.eclipse.ui.cheatsheets'
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323056"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323056">323056</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Accessibility] get_hyperlink returns incorrect address for accessible
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323134"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323134">323134</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[JUnit] JUnit view loses several action states on restart
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323197"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323197">323197</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE in pdebuild if a dropins/somefile.link has a path that doesn't exist
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323246"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323246">323246</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >IBundleProjectService.setBundleRoot() does not accept null argument
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323318"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323318">323318</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Making a few fields protected for Tycho
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_CLOSED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323319"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323319">323319</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[planner] Non greedy handling in the slicer brings in complete repositories
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_blocker bz_P3 bz_CLOSED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323322"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323322">323322</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[planner] Resolution is not stable
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323539"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323539">323539</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Dialogs] Open Resource now interprets "." as "*.", unlike 3.5
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323600"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323600">323600</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >3.6 SWT source and binary no longer a project
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323693"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[1.5][compiler] Compiler fails to diagnose name clash
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_major bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b323953"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323953">323953</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >External Tools Launch delegate no longer supports launch in background
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b323995"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323995">323995</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >[Accessibility] StyledText selection incorrect after caret moved event
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b324072"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324072">324072</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >Debug view "Terminate/Disconnect All" doesn't work
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b324099"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324099">324099</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >p2.user.ui feature version should be incremented in 3.6.1 stream
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b324154"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324154">324154</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >NPE in FlowContext while building
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_critical bz_P3 bz_RESOLVED bz_FIXED bz_secure bz_secure_mode_manual bz_row_even ">
+
+ <td class="first-child">
+ <a name="b324223"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324223">324223</a>
+ <span style="display: none">[SEC]</span>
+ </td>
+
+ <td >Security Vulnerabilities in Eclipse Help
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_VERIFIED bz_FIXED bz_row_odd ">
+
+ <td class="first-child">
+ <a name="b324336"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324336">324336</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >version 0.0.0 for .target resolves to '0 plug-ins available' when newer plug-ins are available in other software sites
+ </td>
+
+ </tr>
+
+
+
+
+
+
+ <tr class="bz_bugitem
+ bz_normal bz_P3 bz_RESOLVED bz_FIXED bz_row_even ">
+
+ <td class="first-child">
+ <a name="b324413"
+ href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324413">324413</a>
+ <span style="display: none"></span>
+ </td>
+
+ <td >declare 3.6.1RC3
+ </td>
+
+ </tr>
+
+
+ </table>
+
+<span class="bz_result_count">192 bugs found.
+</span>
+
+<br>
+
<hr/>
<p>Sun, Solaris, Java and all Java-based trademarks are trademarks of Oracle Corporation.
diff --git a/eclipse/features/org.eclipse.rcp/feature.xml b/eclipse/features/org.eclipse.rcp/feature.xml
index d40eab3..8802cfa 100644
--- a/eclipse/features/org.eclipse.rcp/feature.xml
+++ b/eclipse/features/org.eclipse.rcp/feature.xml
@@ -1,8 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
+<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.rcp"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName"
plugin="org.eclipse.rcp"
image="eclipse_update_120.jpg">
diff --git a/eclipse/features/org.eclipse.sdk/feature.xml b/eclipse/features/org.eclipse.sdk/feature.xml
index 6ee40f1..825bf02 100644
--- a/eclipse/features/org.eclipse.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.sdk/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.sdk"
label="%featureName"
- version="3.6.0.qualifier"
+ version="3.6.1.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg">
diff --git a/eclipse/label.properties b/eclipse/label.properties
index 6af70a4..84a49c5 100644
--- a/eclipse/label.properties
+++ b/eclipse/label.properties
@@ -1,6 +1,6 @@
- timestamp=20100610-0954
+ timestamp=20101001-1111
buildType=I
- buildId=I20100610-0954
- buildLabel=I20100610-0954
+ buildId=I20101001-1111
+ buildLabel=I20101001-1111
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/ant.map b/eclipse/maps/org.eclipse.releng/maps/ant.map
index ad2f608..6063e12 100644
--- a/eclipse/maps/org.eclipse.releng/maps/ant.map
+++ b/eclipse/maps/org.eclipse.releng/maps/ant.map
@@ -7,7 +7,7 @@ plugin at org.eclipse.ant.launching=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclips
plugin at org.eclipse.ant.ui=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.externaltools=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.externaltools=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.externaltools=v20100831_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ant.tests.core=v20091214,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ant.tests.ui=v20100602-1000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/core.map b/eclipse/maps/org.eclipse.releng/maps/core.map
index c86335b..d974ab6 100644
--- a/eclipse/maps/org.eclipse.releng/maps/core.map
+++ b/eclipse/maps/org.eclipse.releng/maps/core.map
@@ -1,7 +1,7 @@
!*************** CORE CONTRIBUTION ********************************************************
!**** OSGi
-plugin at org.eclipse.osgi=v20100517,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
+plugin at org.eclipse.osgi=R36x_v20100806,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
plugin at org.eclipse.osgi.services=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
plugin at org.eclipse.osgi.util=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
@@ -10,7 +10,7 @@ plugin at org.eclipse.equinox.common=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,o
plugin at org.eclipse.equinox.preferences=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
plugin at org.eclipse.equinox.registry=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
plugin at org.eclipse.equinox.supplement=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
-plugin at org.eclipse.equinox.app=v20100512,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
+plugin at org.eclipse.equinox.app=R36x_v20100803,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
plugin at org.eclipse.equinox.device=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
plugin at org.eclipse.equinox.event=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
plugin at org.eclipse.equinox.http=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
@@ -30,7 +30,7 @@ plugin at org.eclipse.equinox.cm=v20100520,kmoir at dev.eclipse.org:/cvsroot/rt,,org.e
plugin at org.eclipse.equinox.concurrent=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
!**** Prosyst Contributions
-plugin at org.eclipse.equinox.ds=v20100507,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
+plugin at org.eclipse.equinox.ds=R36x_v20100803,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
plugin at org.eclipse.equinox.io=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
plugin at org.eclipse.equinox.ip=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
plugin at org.eclipse.equinox.util=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
@@ -55,52 +55,52 @@ fragment at org.eclipse.equinox.weaving.hook=v20100503,kmoir at dev.eclipse.org:/cvsro
!****launcher, startup.jar
plugin at org.eclipse.equinox.launcher=v20100507,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
-fragment at org.eclipse.equinox.launcher.win32.win32.x86=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
-fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
-fragment at org.eclipse.equinox.launcher.win32.win32.ia64=v20100322-1720,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
-fragment at org.eclipse.equinox.launcher.wpf.win32.x86=v20100322-1720,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
-fragment at org.eclipse.equinox.launcher.carbon.macosx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
-fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
-fragment at org.eclipse.equinox.launcher.motif.aix.ppc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
-fragment at org.eclipse.equinox.launcher.motif.linux.x86=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
+fragment at org.eclipse.equinox.launcher.win32.win32.x86=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
+fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
+fragment at org.eclipse.equinox.launcher.win32.win32.ia64=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
+fragment at org.eclipse.equinox.launcher.wpf.win32.x86=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
+fragment at org.eclipse.equinox.launcher.carbon.macosx=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
+fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.aix.ppc=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
+fragment at org.eclipse.equinox.launcher.motif.linux.x86=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
plugin at org.eclipse.equinox.launcher.releng=v20100208,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
!****contributed fragments
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390=v20100507,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=v20100419,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
-fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
-fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390=R36x_v20100823,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=R36x_v20100823,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
+fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
+fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=R36x_v20100810,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
-feature at org.eclipse.equinox.executable=v20100524,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
+feature at org.eclipse.equinox.executable=R36x_v20100823,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
!**** Runtime
plugin at org.eclipse.core.runtime=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.contenttype=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.jobs=v20100515,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.jobs=R36x_v20100824,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Expressions
plugin at org.eclipse.core.expressions=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.expressions.tests=v20091203,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Resources
-plugin at org.eclipse.core.resources=v20100526-0737,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.resources=R36x_v20100825-0600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32.x86=v20100505-1345,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.win32.ia64=v20081020,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.resources.compatibility=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** File System
-plugin at org.eclipse.core.filesystem=v20100526-0737,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86_64=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.ia64=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filesystem=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86_64=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.ia64=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.x86=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.x86_64=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.filesystem.linux.ppc=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
@@ -114,12 +114,12 @@ plugin at org.eclipse.core.runtime.compatibility.auth=v20100517,kmoir at dev.eclipse.o
fragment at org.eclipse.core.runtime.compatibility.registry=v20100520,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Other Core Code
-plugin at org.eclipse.pde.build=v20100603,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
-plugin at org.eclipse.pde.build.tests=v20100602-1630,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
+plugin at org.eclipse.pde.build=R36x_v20100823,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
+plugin at org.eclipse.pde.build.tests=R36x_v20100817,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
feature at org.eclipse.pde.builder=v20040624a,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build/feature
!**** Test Suites
plugin at org.eclipse.core.tests.harness=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.resources=v20100526-0737,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.runtime=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.osgi.tests=v20100505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
\ No newline at end of file
+plugin at org.eclipse.core.tests.resources=R36x_v20100825-0600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.runtime=R36x_v20100719,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.osgi.tests=R36x_v20100723,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/doc.map b/eclipse/maps/org.eclipse.releng/maps/doc.map
index b6fbbf7..71f140f 100644
--- a/eclipse/maps/org.eclipse.releng/maps/doc.map
+++ b/eclipse/maps/org.eclipse.releng/maps/doc.map
@@ -1,9 +1,9 @@
!*************** DOC CONTRIBUTION ********************************************************
-plugin at org.eclipse.platform.doc.user=v20100608,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.platform.doc.isv=v20100608,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.user=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.isv=r361_v20100713,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.user=v20100608,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.isv=v20100602-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.user=r361_v20100721-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.isv=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.pde.doc.user=v20100603-1350,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
\ No newline at end of file
+plugin at org.eclipse.pde.doc.user=v20100727_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/feature.map b/eclipse/maps/org.eclipse.releng/maps/feature.map
index e2205a5..905d31d 100644
--- a/eclipse/maps/org.eclipse.releng/maps/feature.map
+++ b/eclipse/maps/org.eclipse.releng/maps/feature.map
@@ -1,10 +1,10 @@
!*************** FEATURE CONTRIBUTION ******************************************************
-feature at org.eclipse.sdk=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
-plugin at org.eclipse.sdk=v20100216,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
+plugin at org.eclipse.sdk=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.jdt=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
+feature at org.eclipse.jdt=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
-feature at org.eclipse.pde=v20100525,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
+feature at org.eclipse.pde=r361_v20100727,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
feature at org.eclipse.pde.api.tools.ee.cdcfoundation10_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10-feature
feature at org.eclipse.pde.api.tools.ee.cdcfoundation11_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11-feature
feature at org.eclipse.pde.api.tools.ee.j2se12_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12-feature
@@ -17,23 +17,23 @@ feature at org.eclipse.pde.api.tools.ee.osgiminimum10_feature=v20091027-1300,kmoir@
feature at org.eclipse.pde.api.tools.ee.osgiminimum11_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11-feature
feature at org.eclipse.pde.api.tools.ee.osgiminimum12_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12-feature
-feature at org.eclipse.platform=v20100602,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
-plugin at org.eclipse.platform=v20100531,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.platform=r361_v20100909,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
+plugin at org.eclipse.platform=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
feature at org.eclipse.sdk.examples=v20100527,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
plugin at org.eclipse.sdk.examples=v20100527,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.sdk.tests=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
+feature at org.eclipse.sdk.tests=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
plugin at org.eclipse.sdk.tests=v20060605,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-feature at org.eclipse.equinox.sdk=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
+feature at org.eclipse.equinox.sdk=r361_v20100903,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
feature at org.eclipse.cvs=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
plugin at org.eclipse.cvs=v20100414,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
feature at org.eclipse.help=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
-feature at org.eclipse.equinox.p2.user.ui=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
+feature at org.eclipse.equinox.p2.user.ui=r361_v20100903,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
feature at org.eclipse.equinox.p2.sdk=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtapt.map b/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
index c8353a7..6fca523 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
@@ -1,10 +1,10 @@
-!*************** JDT APT CONTRIBUTION [20100512-2100] *******************************************
+!*************** JDT APT CONTRIBUTION *******************************************
-plugin at org.eclipse.jdt.apt.core=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.core=R36_v20100727-0110,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.apt.ui=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.tests=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.tests=R36x_v20100707-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.jdt.compiler.apt=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.compiler.apt.tests=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.core=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.core=R36_v20100727-0110,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.apt.pluggable.tests=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtcore.map b/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
index f1edf05..5f32a43 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
@@ -1,11 +1,11 @@
-!*************** JDT CORE CONTRIBUTION [20100603-0800] *******************************************
+!*************** JDT CORE CONTRIBUTION [20100901-0800] *******************************************
-plugin at org.eclipse.jdt.core=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.tool=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.tool=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.builder=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.compiler=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.model=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.performance=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.tool.tests=v_A58,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.jdt.core.tests.builder=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.compiler=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.model=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.performance=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.tool.tests=v_A68_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map b/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
index 4e2d2c8..519d0f9 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
@@ -1,8 +1,8 @@
!*************** DEBUG CONTRIBUTION ********************************************************
plugin at org.eclipse.debug.core=v20100519,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.ui=v20100601-1530,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.ui=v20100901_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug=v20100715_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.debug.ui=v20100602-0830,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.launching=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.launching.macosx=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
@@ -11,7 +11,7 @@ plugin at org.eclipse.jdt.launching.ui.macosx=v20100505,kmoir at dev.eclipse.org:/cvsr
plugin at org.eclipse.ui.console=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.debug.tests=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.tests=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.tests=v20100624_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.debug.examples.core=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.debug.examples.ui=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtui.map b/eclipse/maps/org.eclipse.releng/maps/jdtui.map
index b0f1746..44ef8fc 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtui.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtui.map
@@ -7,16 +7,16 @@ plugin at org.eclipse.ltk.core.refactoring.tests=v20100520-0800,kmoir at dev.eclipse.o
plugin at org.eclipse.ltk.ui.refactoring=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ltk.ui.refactoring.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.core.manipulation=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui=v20100602-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests=r361_v20100818-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.ui.tests.refactoring=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.core=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.core=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.junit.runtime=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jdt.junit4.runtime=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/maps/org.eclipse.releng/maps/p2.map b/eclipse/maps/org.eclipse.releng/maps/p2.map
index 55f970a..66e0ed7 100644
--- a/eclipse/maps/org.eclipse.releng/maps/p2.map
+++ b/eclipse/maps/org.eclipse.releng/maps/p2.map
@@ -1,12 +1,12 @@
plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20100505,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
-plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
+plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=R36x_v20100901,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
plugin at org.eclipse.equinox.p2.console=CVS,tag=v20100601,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
-plugin at org.eclipse.equinox.p2.core=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
-plugin at org.eclipse.equinox.p2.director=CVS,tag=v20100525,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
-plugin at org.eclipse.equinox.p2.director.app=CVS,tag=v20100527,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
-plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=v20100601,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
+plugin at org.eclipse.equinox.p2.core=CVS,tag=R36x_v20100804,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
+plugin at org.eclipse.equinox.p2.director=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
+plugin at org.eclipse.equinox.p2.director.app=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
+plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=R36x_v20100727,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20100518,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
plugin at org.eclipse.equinox.p2.engine=CVS,tag=v20100606,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
@@ -18,24 +18,24 @@ plugin at org.eclipse.equinox.p2.metadata=CVS,tag=v20100601,cvsRoot=kmoir at dev.eclip
plugin at org.eclipse.equinox.p2.metadata.generator=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator
plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
-plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
+plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100824-2220,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=v20100525,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
-plugin at org.eclipse.equinox.p2.repository=CVS,tag=v20100519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
-plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=v20100520,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
+plugin at org.eclipse.equinox.p2.repository=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
+plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
plugin at org.eclipse.equinox.p2.selfhosting=CVS,tag=_api_cleanup_v20091125,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.selfhosting
-plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
+plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20100518,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20100519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20100507-1815,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
-plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
-plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
-plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
+plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
+plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
+plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
-plugin at org.eclipse.equinox.p2.tests=CVS,tag=v20100525,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
+plugin at org.eclipse.equinox.p2.tests=CVS,tag=R36x_v20100901,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
diff --git a/eclipse/maps/org.eclipse.releng/maps/pde.map b/eclipse/maps/org.eclipse.releng/maps/pde.map
index 6201135..8f711b6 100644
--- a/eclipse/maps/org.eclipse.releng/maps/pde.map
+++ b/eclipse/maps/org.eclipse.releng/maps/pde.map
@@ -1,19 +1,19 @@
!*************** PDE CONTRIBUTION ********************************************************
-plugin at org.eclipse.pde=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
-plugin at org.eclipse.pde.core=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
+plugin at org.eclipse.pde=v20100625_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
+plugin at org.eclipse.pde.core=v20100902_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
plugin at org.eclipse.pde.junit.runtime=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
plugin at org.eclipse.pde.runtime=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
plugin at org.eclipse.pde.launching=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
-plugin at org.eclipse.pde.ui=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
+plugin at org.eclipse.pde.ui=v20100810_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
plugin at org.eclipse.pde.ui.templates=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
-plugin at org.eclipse.pde.ui.tests=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
+plugin at org.eclipse.pde.ui.tests=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
plugin at org.eclipse.ui.views.log=v20100423,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
-plugin at org.eclipse.pde.api.tools=v20100602-0930,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
-plugin at org.eclipse.pde.api.tools.ui=v20100601-1815,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
-plugin at org.eclipse.pde.api.tools.tests=v20100526-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
+plugin at org.eclipse.pde.api.tools=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
+plugin at org.eclipse.pde.api.tools.ui=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
+plugin at org.eclipse.pde.api.tools.tests=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
fragment at org.eclipse.pde.api.tools.ee.j2se12=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
diff --git a/eclipse/maps/org.eclipse.releng/maps/rcp.map b/eclipse/maps/org.eclipse.releng/maps/rcp.map
index e2d9f62..74ee1af 100644
--- a/eclipse/maps/org.eclipse.releng/maps/rcp.map
+++ b/eclipse/maps/org.eclipse.releng/maps/rcp.map
@@ -1,3 +1,3 @@
-feature at org.eclipse.rcp=v20100519,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
+feature at org.eclipse.rcp=r361_v20100827,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
feature at org.eclipse.rcp.sdk=v20080507,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp.sdk
plugin at org.eclipse.rcp=v20100527-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/releng.map b/eclipse/maps/org.eclipse.releng/maps/releng.map
index 49fe41d..02e8510 100644
--- a/eclipse/maps/org.eclipse.releng/maps/releng.map
+++ b/eclipse/maps/org.eclipse.releng/maps/releng.map
@@ -11,7 +11,7 @@ feature at com.ibm.icu.base=v20090119,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.e
feature at org.eclipse.releng.tools=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
plugin at org.eclipse.releng.tools=v20100531,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.releng.tests=v20100519,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tests=r361_v20100831,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.pde.tools.versioning=r20080922,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/plugins/org.eclipse.pde.tools.versioning
diff --git a/eclipse/maps/org.eclipse.releng/maps/swt.map b/eclipse/maps/org.eclipse.releng/maps/swt.map
index 5e42059..096f802 100644
--- a/eclipse/maps/org.eclipse.releng/maps/swt.map
+++ b/eclipse/maps/org.eclipse.releng/maps/swt.map
@@ -1,41 +1,41 @@
!*************** SWT CONTRIBUTION ********************************************************
!*** SWT Plugin
-plugin at org.eclipse.swt=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Platform Fragments
-fragment at org.eclipse.swt.carbon.macosx=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc64=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86_64=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.sparc=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.x86=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.aix.ppc=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.hpux.ia64_32=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.linux.x86=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.solaris.sparc=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.photon.qnx.x86=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.wce_ppc.arm=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86_64=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.ia64=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.carbon.macosx=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc64=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86_64=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.sparc=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.x86=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.aix.ppc=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.hpux.ia64_32=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.linux.x86=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.motif.solaris.sparc=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.photon.qnx.x86=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.wce_ppc.arm=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86_64=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.ia64=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.s390=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.s390x=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390x=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Examples
-plugin at org.eclipse.swt.examples=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser.demos=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.controls=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.launcher=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.layouts=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.ole.win32=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.paint=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser.demos=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.controls=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.launcher=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.layouts=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.ole.win32=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.paint=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!*** SWT Tests and Tools
-plugin at org.eclipse.swt.tests=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.tools=v3650b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.swt.tests=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tools=v3655c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/team.map b/eclipse/maps/org.eclipse.releng/maps/team.map
index 00557a8..2cabf7d 100644
--- a/eclipse/maps/org.eclipse.releng/maps/team.map
+++ b/eclipse/maps/org.eclipse.releng/maps/team.map
@@ -1,11 +1,11 @@
!*************** TEAM CONTRIBUTION ********************************************************
-plugin at org.eclipse.team.core=I20100527-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.core=R36x_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.core=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.ssh=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.cvs.ssh2=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.ui=I20100527-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ui=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.ui=R36x_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ui=R36x_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.net=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.net=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
@@ -19,6 +19,6 @@ plugin at org.eclipse.team.examples.filesystem=I20100526-0800,kmoir at dev.eclipse.org
plugin at org.eclipse.team.tests.core=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.team.tests.cvs.core=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.core.net.win32.x86=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
-fragment at org.eclipse.core.net.linux.x86=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
+fragment at org.eclipse.core.net.linux.x86=R36x_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
fragment at org.eclipse.core.net.linux.x86_64=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
fragment at org.eclipse.core.net.win32.x86_64=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/text.map b/eclipse/maps/org.eclipse.releng/maps/text.map
index d5f9192..3d881f0 100644
--- a/eclipse/maps/org.eclipse.releng/maps/text.map
+++ b/eclipse/maps/org.eclipse.releng/maps/text.map
@@ -1,9 +1,9 @@
!*************** TEXT CONTRIBUTION ********************************************************
plugin at org.eclipse.text=v20100601-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.filebuffers=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.examples.javaeditor=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/maps/org.eclipse.releng/maps/ui.map b/eclipse/maps/org.eclipse.releng/maps/ui.map
index 640e806..ec01eaf 100644
--- a/eclipse/maps/org.eclipse.releng/maps/ui.map
+++ b/eclipse/maps/org.eclipse.releng/maps/ui.map
@@ -1,22 +1,22 @@
!*************** UI CONTRIBUTION *********************************************************
plugin at org.eclipse.core.commands=I20100512-1500,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.observable=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.property=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.core.databinding.beans=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui=I20100603-1100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide.application=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui=M20100826-1330,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide.application=M20100707-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.presentations.r21=I20100517-1500,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.views=I20100527-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench=I20100603-1100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench=M20100826-1330,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.ui.workbench.compatibility=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
fragment at org.eclipse.ui.win32=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.carbon=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.cocoa=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.carbon=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.cocoa=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.examples.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
@@ -29,13 +29,13 @@ plugin at org.eclipse.ui.examples.fieldassist=I20100601-0800,kmoir at dev.eclipse.org:
plugin at org.eclipse.ui.examples.contributions=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.navigator=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.navigator.resources=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator.resources=M20100707-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.views.properties.tabbed=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.tests.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.jface.tests.databinding.conformance=I20090818-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.rcp=I20090525-2000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.navigator=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.views.properties.tabbed=I20090525-2000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/maps/org.eclipse.releng/maps/update.map b/eclipse/maps/org.eclipse.releng/maps/update.map
index 089c670..ed207b1 100644
--- a/eclipse/maps/org.eclipse.releng/maps/update.map
+++ b/eclipse/maps/org.eclipse.releng/maps/update.map
@@ -1,7 +1,7 @@
!*************** UPDATE CONTRIBUTION ********************************************************
plugin at org.eclipse.update.configurator=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.update.core=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.update.core=R36x_v20100629,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.update.scheduler=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.update.ui=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/maps/org.eclipse.releng/maps/userassist.map b/eclipse/maps/org.eclipse.releng/maps/userassist.map
index 9c2ec60..65597b9 100644
--- a/eclipse/maps/org.eclipse.releng/maps/userassist.map
+++ b/eclipse/maps/org.eclipse.releng/maps/userassist.map
@@ -3,13 +3,13 @@
!**** Help
plugin at org.eclipse.help=v20100524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.help.appserver=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.base=v20100520,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.ui=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.webapp=v20100507,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.base=r36_r20100816,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.ui=r36_v20100702,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.webapp=r36_r20100816,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Welcome
plugin at org.eclipse.ui.intro=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.intro.universal=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro.universal=r36_v20100702,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Cheat sheets
plugin at org.eclipse.ui.cheatsheets=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
@@ -18,9 +18,9 @@ plugin at org.eclipse.ui.cheatsheets=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclip
plugin at org.eclipse.ui.browser=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Forms
-plugin at org.eclipse.ui.forms=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.forms=r36_v20100702,kmoir at dev.eclipse.org:/cvsroot/eclipse,
!**** Tests
-plugin at org.eclipse.ua.tests=v20100519,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ua.tests=r36_r20100816,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ua.tests.doc=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
plugin at org.eclipse.ui.tests.forms=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/pluginVersions.properties b/eclipse/pluginVersions.properties
index 45bb40a..8d4be4d 100644
--- a/eclipse/pluginVersions.properties
+++ b/eclipse/pluginVersions.properties
@@ -1,70 +1,70 @@
-#Thu Jun 10 10:29:02 EDT 2010
+#Fri Oct 01 11:18:00 EDT 2010
org.eclipse.help.appserver,0.0.0=v20100427
-org.eclipse.ui.forms,0.0.0=v20100427
-org.eclipse.swt.gtk.linux.s390x,0.0.0=v3650b
+org.eclipse.ui.forms,0.0.0=r36_v20100702
+org.eclipse.swt.gtk.linux.s390x,0.0.0=v3655c
org.eclipse.jdt.debug.ui,0.0.0=v20100602-0830
org.eclipse.jdt.launching.macosx,0.0.0=v20100505
org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=v20100503
-org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=v20100503
+org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=R36x_v20100810
org.eclipse.core.boot,0.0.0=v20100505
org.eclipse.ui.net,0.0.0=I20100505-1245
-org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=v20100503
-org.eclipse.jdt.apt.pluggable.core,0.0.0=v20100513-0845
-org.eclipse.swt.examples.paint,0.0.0=v3650b
+org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=R36x_v20100810
+org.eclipse.jdt.apt.pluggable.core,0.0.0=R36_v20100727-0110
+org.eclipse.swt.examples.paint,0.0.0=v3655c
org.eclipse.core.net.win32.x86,0.0.0=I20100511-0800
org.eclipse.core.filesystem.macosx,0.0.0=v20100505
-org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=v20100503
-org.eclipse.ui.navigator.resources,0.0.0=I20100601-0800
+org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=R36x_v20100810
+org.eclipse.ui.navigator.resources,0.0.0=M20100707-0800
org.eclipse.equinox.p2.metadata.repository,0.0.0=v20100513
-org.eclipse.swt,0.0.0=v3650b
-org.eclipse.swt.win32.win32.x86,0.0.0=v3650b
+org.eclipse.swt,0.0.0=v3655c
+org.eclipse.swt.win32.win32.x86,0.0.0=v3655c
org.eclipse.update.ui,0.0.0=v20100512
-org.eclipse.core.filesystem,0.0.0=v20100526-0737
-org.eclipse.core.externaltools,0.0.0=v20100505
+org.eclipse.core.filesystem,0.0.0=R36x_v20100727-0745
+org.eclipse.core.externaltools,0.0.0=v20100831_r361
org.eclipse.equinox.registry.jmx,0.0.0=v20100503
org.eclipse.equinox.io,0.0.0=v20100503
org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=v20100503
-org.eclipse.pde.api.tools.ui,0.0.0=v20100601-1815
-org.eclipse.jdt.debug,0.0.0=v20100526
+org.eclipse.pde.api.tools.ui,0.0.0=v20100820_r361
+org.eclipse.jdt.debug,0.0.0=v20100715_r361
org.eclipse.sdk.examples,0.0.0=v20100527
-org.eclipse.pde,0.0.0=v20100601
+org.eclipse.pde,0.0.0=v20100625_r361
org.eclipse.compare.core,0.0.0=I20100526-0800
org.eclipse.equinox.p2.engine,0.0.0=v20100606
-org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=v20100503
+org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=R36x_v20100810
org.eclipse.equinox.http,0.0.0=v20100503
-org.eclipse.swt.gtk.linux.x86_64,0.0.0=v3650b
-org.eclipse.swt.photon.qnx.x86,0.0.0=v3650b
+org.eclipse.swt.gtk.linux.x86_64,0.0.0=v3655c
+org.eclipse.swt.photon.qnx.x86,0.0.0=v3655c
org.eclipse.equinox.p2.ui.admin,0.0.0=v20100503
org.eclipse.equinox.weaving.caching.j9,0.0.0=v20100503
org.eclipse.equinox.transforms.xslt,0.0.0=v20100503
org.eclipse.jface.databinding,0.0.0=I20100601-0800
-org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=v20100513
-org.eclipse.help.base,0.0.0=v20100520
+org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=R36x_v20100823
+org.eclipse.help.base,0.0.0=r36_r20100816
org.eclipse.ui.presentations.r21,0.0.0=I20100517-1500
org.eclipse.equinox.frameworkadmin,0.0.0=v20100503
org.eclipse.pde.launching,0.0.0=v20100601
org.eclipse.ui.intro,0.0.0=v20100427
org.eclipse.ltk.ui.refactoring,0.0.0=v20100526-0800
-org.eclipse.swt.examples.ole.win32,0.0.0=v3650b
-org.eclipse.ui.workbench.texteditor,0.0.0=v20100520-0800
+org.eclipse.swt.examples.ole.win32,0.0.0=v3655c
+org.eclipse.ui.workbench.texteditor,0.0.0=r361_v20100714-0800
org.eclipse.ui.examples.multipageeditor,0.0.0=I20100509-0800
org.eclipse.core.filesystem.linux.x86,0.0.0=v20100505-1235
org.eclipse.equinox.p2.ui.discovery,0.0.0=v20100519
org.eclipse.ui.examples.javaeditor,0.0.0=v20100520-0800
org.eclipse.ant.core,0.0.0=v20100427
-org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=v20100503a
-org.eclipse.equinox.p2.updatechecker,0.0.0=v20100503a
+org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=R36x_v20100823
+org.eclipse.equinox.p2.updatechecker,0.0.0=R36x_v20100823
org.eclipse.debug.core,0.0.0=v20100519
org.eclipse.ui.examples.views.properties.tabbed.article,0.0.0=I20100517-1500
org.eclipse.core.databinding,0.0.0=I20100601-0800
org.eclipse.equinox.transforms.hook,0.0.0=v20100503
-org.eclipse.ui.carbon,0.0.0=I20100601-0800
+org.eclipse.ui.carbon,0.0.0=M20100825-0800
org.eclipse.core.contenttype,0.0.0=v20100505-1235
org.eclipse.text,0.0.0=v20100601-1300
-org.eclipse.help.ui,0.0.0=v20100517
+org.eclipse.help.ui,0.0.0=r36_v20100702
org.eclipse.equinox.servletbridge,0.0.0=v20100503
-org.eclipse.jdt.apt.core,0.0.0=v20100513-0845
-org.eclipse.swt.win32.win32.x86_64,0.0.0=v3650b
+org.eclipse.jdt.apt.core,0.0.0=R36_v20100727-0110
+org.eclipse.swt.win32.win32.x86_64,0.0.0=v3655c
org.eclipse.equinox.metatype,0.0.0=v20100503
org.eclipse.pde.ua.ui,0.0.0=v20100504
org.eclipse.equinox.initializer,0.0.0=v20100503
@@ -74,59 +74,59 @@ org.eclipse.osgi.util,0.0.0=v20100503
org.eclipse.search,0.0.0=v20100520-0800
org.eclipse.ui.views,0.0.0=I20100527-0800
org.eclipse.equinox.simpleconfigurator,0.0.0=v20100503
-org.eclipse.team.ui,0.0.0=I20100527-0800
+org.eclipse.team.ui,0.0.0=R36x_v20100825-0800
org.eclipse.equinox.p2.metadata,0.0.0=v20100601
-org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=v3650b
-org.eclipse.swt.gtk.linux.ppc64,0.0.0=v3650b
-org.eclipse.jdt.compiler.tool,0.0.0=v_A58
-org.eclipse.platform,0.0.0=v20100531
+org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=v3655c
+org.eclipse.swt.gtk.linux.ppc64,0.0.0=v3655c
+org.eclipse.jdt.compiler.tool,0.0.0=v_A68_R36x
+org.eclipse.platform,0.0.0=r361_v20100714-0800
org.eclipse.core.databinding.observable,0.0.0=I20100601-0800
org.eclipse.equinox.weaving.aspectj,0.0.0=v20100503
org.eclipse.team.examples.filesystem,0.0.0=I20100526-0800
-org.eclipse.pde.core,0.0.0=v20100601
-org.eclipse.ui.workbench,0.0.0=I20100603-1100
+org.eclipse.pde.core,0.0.0=v20100902_r361
+org.eclipse.ui.workbench,0.0.0=M20100826-1330
org.eclipse.core.runtime,0.0.0=v20100505
org.eclipse.core.resources.win32.x86,0.0.0=v20100505-1345
-org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=v20100503
+org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=R36x_v20100810
org.eclipse.help,0.0.0=v20100524
org.eclipse.pde.api.tools.ee.j2se15,0.0.0=v20100506-0900
org.junit4,0.0.0=v20100525
org.eclipse.update.scheduler,0.0.0=v20100512
-org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=v20100507
+org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=R36x_v20100823
org.eclipse.pde.junit.runtime,0.0.0=v20100601
org.eclipse.osgi.services,0.0.0=v20100503
-org.eclipse.swt.examples.layouts,0.0.0=v3650b
-org.eclipse.jface,0.0.0=I20100601-0800
+org.eclipse.swt.examples.layouts,0.0.0=v3655c
+org.eclipse.jface,0.0.0=M20100825-0800
org.eclipse.equinox.p2.discovery,0.0.0=v20100503
org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=v20100506-0900
org.eclipse.equinox.jmx.server,0.0.0=v20100503
org.eclipse.equinox.jmx.server.rmi,0.0.0=v20100503
-org.eclipse.jdt.ui,0.0.0=v20100602-1600
+org.eclipse.jdt.ui,0.0.0=r361_v20100825-0800
org.eclipse.equinox.security,0.0.0=v20100503
org.eclipse.equinox.launcher,0.0.0=v20100507
org.eclipse.core.runtime.compatibility.registry,0.0.0=v20100520
-org.eclipse.jdt.junit.core,0.0.0=v20100526-0800
+org.eclipse.jdt.junit.core,0.0.0=r361_v20100825-0800
org.eclipse.equinox.http.jetty,2.0.0=v20100503
org.eclipse.jdt.launching,0.0.0=v20100526
org.eclipse.equinox.p2.ql,0.0.0=v20100503a
org.eclipse.ui.console,0.0.0=v20100526
org.eclipse.equinox.weaving.caching,0.0.0=v20100503
-org.eclipse.swt.gtk.linux.s390,0.0.0=v3650b
+org.eclipse.swt.gtk.linux.s390,0.0.0=v3655c
org.eclipse.jdt.apt.ui,0.0.0=v20100513-0845
org.eclipse.equinox.p2.discovery.compatibility,0.0.0=v20100518
org.eclipse.ui.examples.fieldassist,0.0.0=I20100601-0800
-org.eclipse.ui.ide.application,0.0.0=I20100601-0800
-org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=v20100503
-org.eclipse.equinox.launcher.carbon.macosx,0.0.0=v20100503
-org.eclipse.jdt.junit,0.0.0=v20100526-0800
-org.eclipse.pde.api.tools,0.0.0=v20100602-0930
+org.eclipse.ui.ide.application,0.0.0=M20100707-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=R36x_v20100810
+org.eclipse.equinox.launcher.carbon.macosx,0.0.0=R36x_v20100810
+org.eclipse.jdt.junit,0.0.0=r361_v20100825-0800
+org.eclipse.pde.api.tools,0.0.0=v20100820_r361
org.eclipse.core.runtime.compatibility,0.0.0=v20100505
-org.eclipse.equinox.p2.directorywatcher,0.0.0=v20100601
-org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=v20100503
+org.eclipse.equinox.p2.directorywatcher,0.0.0=R36x_v20100727
+org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=R36x_v20100810
org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=v20100505
-org.eclipse.swt.motif.aix.ppc,0.0.0=v3650b
+org.eclipse.swt.motif.aix.ppc,0.0.0=v3655c
org.eclipse.ui.examples.undo,0.0.0=I20100509-0800
-org.eclipse.ui.cocoa,0.0.0=I20100601-0800
+org.eclipse.ui.cocoa,0.0.0=M20100825-0800
org.eclipse.equinox.http.registry,0.0.0=v20100503
org.eclipse.pde.api.tools.ee.jre11,0.0.0=v20100506-0900
org.eclipse.core.net.linux.x86_64,0.0.0=I20100505-1245
@@ -137,66 +137,66 @@ org.eclipse.jdt.launching.ui.macosx,0.0.0=v20100505
org.eclipse.equinox.p2.ui.sdk,0.0.0=v20100513
org.eclipse.compare.examples,0.0.0=I20100505-1245
org.eclipse.pde.ua.core,0.0.0=v20100504
-org.eclipse.platform.doc.isv,0.0.0=v20100608
+org.eclipse.platform.doc.isv,0.0.0=r361_v20100713
org.eclipse.ant.launching,0.0.0=v20100427
org.eclipse.equinox.p2.operations,0.0.0=v20100510
org.eclipse.compare,0.0.0=I20100526-0800
org.eclipse.equinox.http.servletbridge,0.0.0=v20100503
org.eclipse.jdt.compiler.apt,0.0.0=v20100513-0845
-org.eclipse.help.webapp,0.0.0=v20100507
+org.eclipse.help.webapp,0.0.0=r36_r20100816
org.eclipse.pde.ui.templates,0.0.0=v20100601
-org.eclipse.equinox.p2.repository,0.0.0=v20100519
+org.eclipse.equinox.p2.repository,0.0.0=R36x_v20100823
org.eclipse.equinox.p2.metadata.generator,0.0.0=v20100503a
-org.eclipse.equinox.p2.director.app,0.0.0=v20100527
-org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=v20100503
-org.eclipse.equinox.app,0.0.0=v20100512
-org.eclipse.swt.motif.hpux.ia64_32,0.0.0=v3650b
-org.eclipse.swt.gtk.solaris.x86,0.0.0=v3650b
+org.eclipse.equinox.p2.director.app,0.0.0=R36x_v20100823
+org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=R36x_v20100810
+org.eclipse.equinox.app,0.0.0=R36x_v20100803
+org.eclipse.swt.motif.hpux.ia64_32,0.0.0=v3655c
+org.eclipse.swt.gtk.solaris.x86,0.0.0=v3655c
org.eclipse.pde.ds.ui,0.0.0=v20100601
-org.eclipse.core.net.linux.x86,0.0.0=I20100505-1245
+org.eclipse.core.net.linux.x86,0.0.0=R36x_v20100825-0800
org.eclipse.equinox.p2.console,0.0.0=v20100601
org.eclipse.equinox.http.jetty,0.0.0=v20100503
-org.eclipse.swt.examples.browser.demos,0.0.0=v3650b
-org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=v20100503
+org.eclipse.swt.examples.browser.demos,0.0.0=v3655c
+org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=R36x_v20100810
org.eclipse.releng.tools,0.0.0=v20100531
-org.eclipse.pde.doc.user,0.0.0=v20100603-1350
-org.eclipse.swt.motif.linux.x86,0.0.0=v3650b
+org.eclipse.pde.doc.user,0.0.0=v20100727_r361
+org.eclipse.swt.motif.linux.x86,0.0.0=v3655c
org.eclipse.jface.examples.databinding,0.0.0=I20100601-0800
org.eclipse.equinox.jmx.client.rmi,0.0.0=v20100503
org.eclipse.equinox.weaving.hook,0.0.0=v20100503
-org.eclipse.debug.ui,0.0.0=v20100601-1530
+org.eclipse.debug.ui,0.0.0=v20100901_r361
org.eclipse.core.net,0.0.0=I20100511-0800
org.eclipse.core.filesystem.solaris.sparc,0.0.0=v20100505-1235
org.eclipse.equinox.p2.touchpoint.natives,0.0.0=v20100503a
org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=v20100506-0900
-org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=v20100322-1720
-org.eclipse.swt.examples.browser,0.0.0=v3650b
+org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=R36x_v20100810
+org.eclipse.swt.examples.browser,0.0.0=v3655c
org.eclipse.core.filesystem.linux.x86_64,0.0.0=v20100505-1235
org.eclipse.equinox.event,0.0.0=v20100503
-org.eclipse.ui.ide,0.0.0=I20100601-0800
+org.eclipse.ui.ide,0.0.0=M20100825-0800
org.eclipse.ui.views.log,0.0.0=v20100423
org.eclipse.equinox.p2.jarprocessor,0.0.0=v20100503a
org.eclipse.ui.browser,0.0.0=v20100517
org.eclipse.core.expressions,0.0.0=v20100505
org.eclipse.core.databinding.beans,0.0.0=I20100601-0800
-org.eclipse.equinox.ds,0.0.0=v20100507
-org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=v20100503
-org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=v20100503
+org.eclipse.equinox.ds,0.0.0=R36x_v20100803
+org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=R36x_v20100810
+org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=R36x_v20100810
org.eclipse.update.core.linux,0.0.0=v20100512
org.eclipse.core.databinding.property,0.0.0=I20100601-0800
org.eclipse.ui.examples.propertysheet,0.0.0=I20100509-0800
-org.eclipse.core.jobs,0.0.0=v20100515
-org.eclipse.swt.gtk.linux.ppc,0.0.0=v3650b
-org.eclipse.swt.carbon.macosx,0.0.0=v3650b
+org.eclipse.core.jobs,0.0.0=R36x_v20100824
+org.eclipse.swt.gtk.linux.ppc,0.0.0=v3655c
+org.eclipse.swt.carbon.macosx,0.0.0=v3655c
org.eclipse.pde.runtime,0.0.0=v20100601
-org.eclipse.pde.build,0.0.0=v20100603
+org.eclipse.pde.build,0.0.0=R36x_v20100823
org.eclipse.equinox.p2.reconciler.dropins,0.0.0=v20100525
org.eclipse.equinox.device,0.0.0=v20100503
org.eclipse.core.commands,0.0.0=I20100512-1500
-org.eclipse.equinox.p2.repository.tools,0.0.0=v20100520
-org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=v20100419
-org.eclipse.update.core,0.0.0=v20100512
-org.eclipse.team.core,0.0.0=I20100527-0800
+org.eclipse.equinox.p2.repository.tools,0.0.0=R36x_v20100823
+org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=R36x_v20100823
+org.eclipse.update.core,0.0.0=R36x_v20100629
+org.eclipse.team.core,0.0.0=R36x_v20100825-0800
org.eclipse.debug.examples.ui,0.0.0=v20100526
org.eclipse.pde.api.tools.ee.javase16,0.0.0=v20100506-0900
org.eclipse.compare.win32,0.0.0=I20100505-1245
@@ -208,75 +208,75 @@ org.eclipse.equinox.registry,0.0.0=v20100503
org.eclipse.ui.examples.readmetool,0.0.0=I20100509-0800
org.eclipse.jdt.core.manipulation,0.0.0=v20100520-0800
org.eclipse.equinox.http.servlet,0.0.0=v20100503
-org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=v20100503
+org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=R36x_v20100810
org.eclipse.jdt.junit.runtime,0.0.0=v20100526-0800
-org.eclipse.swt.examples.controls,0.0.0=v3650b
+org.eclipse.swt.examples.controls,0.0.0=v3655c
org.eclipse.core.filesystem.linux.ppc,0.0.0=v20100505-1235
org.eclipse.osgi.jmx,0.0.0=v20100503
org.eclipse.ui.workbench.compatibility,0.0.0=I20100511-0800
org.eclipse.core.filesystem.aix.ppc,0.0.0=v20100505-1235
-org.eclipse.swt.cocoa.macosx,0.0.0=v3650b
-org.eclipse.ui,0.0.0=I20100603-1100
+org.eclipse.swt.cocoa.macosx,0.0.0=v3655c
+org.eclipse.ui,0.0.0=M20100826-1330
org.eclipse.equinox.jmx.client.xmlrpc,0.0.0=v20100503
-org.eclipse.swt.win32.wce_ppc.arm,0.0.0=v3650b
+org.eclipse.swt.win32.wce_ppc.arm,0.0.0=v3655c
org.eclipse.compare.examples.xml,0.0.0=I20100505-1245
org.eclipse.equinox.jsp.jasper.registry,0.0.0=v20100503
-org.eclipse.core.resources,0.0.0=v20100526-0737
+org.eclipse.core.resources,0.0.0=R36x_v20100825-0600
org.eclipse.team.cvs.ssh2,0.0.0=I20100526-0800
org.eclipse.equinox.wireadmin,0.0.0=v20100503
org.eclipse.ant.ui,0.0.0=v20100427
-org.eclipse.swt.gtk.solaris.sparc,0.0.0=v3650b
+org.eclipse.swt.gtk.solaris.sparc,0.0.0=v3655c
org.eclipse.core.net.win32.x86_64,0.0.0=I20100505-1245
-org.eclipse.swt.examples.launcher,0.0.0=v3650b
+org.eclipse.swt.examples.launcher,0.0.0=v3655c
org.eclipse.equinox.preferences.jmx,0.0.0=v20100503
org.eclipse.equinox.p2.garbagecollector,0.0.0=v20100503
org.eclipse.equinox.cm,0.0.0=v20100520
org.eclipse.equinox.common,0.0.0=v20100503
-org.eclipse.equinox.p2.director,0.0.0=v20100525
-org.eclipse.equinox.p2.publisher,0.0.0=v20100513
-org.eclipse.jdt.doc.isv,0.0.0=v20100602-1600
+org.eclipse.equinox.p2.director,0.0.0=R36x_v20100823
+org.eclipse.equinox.p2.publisher,0.0.0=v20100824-2220
+org.eclipse.jdt.doc.isv,0.0.0=r361_v20100714-0800
org.eclipse.ltk.core.refactoring,0.0.0=v20100526-0800
-org.eclipse.jdt.core,0.0.0=v_A58
-org.eclipse.equinox.p2.updatesite,0.0.0=v20100503
+org.eclipse.jdt.core,0.0.0=v_A68_R36x
+org.eclipse.equinox.p2.updatesite,0.0.0=R36x_v20100823
org.eclipse.update.configurator,0.0.0=v20100512
-org.eclipse.core.filesystem.win32.x86,0.0.0=v20100505-1235
-org.eclipse.equinox.p2.core,0.0.0=v20100510
-org.eclipse.swt.examples,0.0.0=v3650b
+org.eclipse.core.filesystem.win32.x86,0.0.0=R36x_v20100727-0745
+org.eclipse.equinox.p2.core,0.0.0=R36x_v20100804
+org.eclipse.swt.examples,0.0.0=v3655c
org.eclipse.cvs,0.0.0=v20100414
-org.eclipse.swt.gtk.linux.x86,0.0.0=v3650b
+org.eclipse.swt.gtk.linux.x86,0.0.0=v3655c
org.eclipse.equinox.log,0.0.0=v20100503
org.eclipse.equinox.jmx.client,0.0.0=v20100503
org.eclipse.ui.win32,0.0.0=I20100509-0800
org.eclipse.ui.views.properties.tabbed,0.0.0=I20100509-0800
org.eclipse.equinox.security.ui,0.0.0=v20100503
org.eclipse.pde.api.tools.ee.j2se13,0.0.0=v20100506-0900
-org.eclipse.swt.motif.solaris.sparc,0.0.0=v3650b
+org.eclipse.swt.motif.solaris.sparc,0.0.0=v3655c
org.eclipse.equinox.util,0.0.0=v20100503
org.eclipse.equinox.p2.extensionlocation,0.0.0=v20100518
org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=v20100506-0900
org.eclipse.equinox.concurrent,0.0.0=v20100503
-org.eclipse.platform.doc.user,0.0.0=v20100608
+org.eclipse.platform.doc.user,0.0.0=r361_v20100825-0800
org.eclipse.equinox.security.macosx,0.0.0=v20100503
org.eclipse.equinox.supplement,0.0.0=v20100503
-org.eclipse.sdk,0.0.0=v20100216
-org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=v20100503
+org.eclipse.sdk,0.0.0=r361_v20100714-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=R36x_v20100810
org.eclipse.jsch.ui,0.0.0=I20100505-1245
-org.eclipse.core.filesystem.win32.x86_64,0.0.0=v20100505-1235
+org.eclipse.core.filesystem.win32.x86_64,0.0.0=R36x_v20100727-0745
org.eclipse.equinox.security.win32.x86,0.0.0=v20100503
org.eclipse.core.variables,0.0.0=v20100505
-org.eclipse.pde.ui,0.0.0=v20100601
-org.eclipse.equinox.p2.artifact.repository,0.0.0=v20100513
+org.eclipse.pde.ui,0.0.0=v20100810_r361
+org.eclipse.equinox.p2.artifact.repository,0.0.0=R36x_v20100901
org.eclipse.core.runtime.compatibility.auth,0.0.0=v20100517
-org.eclipse.osgi,0.0.0=v20100517
-org.eclipse.ui.intro.universal,0.0.0=v20100517
+org.eclipse.osgi,0.0.0=R36x_v20100806
+org.eclipse.ui.intro.universal,0.0.0=r36_v20100702
org.eclipse.swt.jmx,0.0.0=v20100503
-org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=v20100503
+org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=R36x_v20100810
org.eclipse.ui.examples.contributions,0.0.0=I20100509-0800
-org.eclipse.team.cvs.ui,0.0.0=I20100526-0800
+org.eclipse.team.cvs.ui,0.0.0=R36x_v20100825-0800
org.eclipse.ui.cheatsheets,0.0.0=v20100427
-org.eclipse.jdt.doc.user,0.0.0=v20100608
+org.eclipse.jdt.doc.user,0.0.0=r361_v20100721-0800
org.eclipse.equinox.useradmin,0.0.0=v20100503
-org.eclipse.jface.text,0.0.0=v20100526-0800
+org.eclipse.jface.text,0.0.0=r361_v20100825-0800
org.eclipse.core.resources.jmx,0.0.0=v20100503
org.eclipse.update.core.win32,0.0.0=v20100512
org.eclipse.ui.externaltools,0.0.0=v20100427
@@ -287,13 +287,13 @@ org.eclipse.ui.navigator,0.0.0=I20100601-0800
org.eclipse.equinox.http.jetty,1.1.100=v20100519
org.eclipse.team.cvs.core,0.0.0=I20100526-0800
org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=v20100506-0900
-org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=v20100322-1720
+org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=R36x_v20100810
org.eclipse.equinox.preferences,0.0.0=v20100503
org.eclipse.equinox.jmx.common,0.0.0=v20100503
org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=v20100507-1815
org.eclipse.equinox.jmx.vm,0.0.0=v20100503
-org.eclipse.ui.editors,0.0.0=v20100520-0800
+org.eclipse.ui.editors,0.0.0=r361_v20100825-0800
org.eclipse.equinox.servletbridge.extensionbundle,0.0.0=v20100503
org.eclipse.core.filebuffers,0.0.0=v20100520-0800
org.eclipse.equinox.ip,0.0.0=v20100503
-org.eclipse.jdt,0.0.0=v20100526-0800
+org.eclipse.jdt,0.0.0=r361_v20100714-0800
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
index dea5ba1..30d373c 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.core.externaltools;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
Bundle-Activator: org.eclipse.core.externaltools.internal.ExternalToolsCore
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
org.eclipse.debug.core;bundle-version="[3.6.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
index 635f340..00d1c63 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -35,6 +35,16 @@ import org.eclipse.osgi.util.NLS;
* Launch delegate for a program.
*/
public class ProgramLaunchDelegate extends LaunchConfigurationDelegate {
+
+ /**
+ * Launch configuration attribute - a boolean value indicating whether a
+ * configuration should be launched in the background. Default value is <code>true</code>.
+ * <p>
+ * This constant is defined in org.eclipse.debug.ui, but has to be copied here to support
+ * headless launching.
+ * </p>
+ */
+ private static final String ATTR_LAUNCH_IN_BACKGROUND = "org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND"; //$NON-NLS-1$
/**
* @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration,
@@ -129,14 +139,14 @@ public class ProgramLaunchDelegate extends LaunchConfigurationDelegate {
process.setAttribute(IProcess.ATTR_CMDLINE,
generateCommandLine(cmdLine));
-// if (launchManager.isLaunchInBackground(configuration)) {
-// // refresh resources after process finishes
-// if (launchManager.getRefreshScope(configuration) != null) {
-// BackgroundResourceRefresher refresher = new BackgroundResourceRefresher(
-// configuration, process);
-// refresher.startBackgroundRefresh();
-// }
-// } else {
+ if (configuration.getAttribute(ATTR_LAUNCH_IN_BACKGROUND, true)) {
+ // refresh resources after process finishes
+ String scope = configuration.getAttribute(RefreshUtil.ATTR_REFRESH_SCOPE, (String)null);
+ if (scope != null) {
+ BackgroundResourceRefresher refresher = new BackgroundResourceRefresher(configuration, process);
+ refresher.startBackgroundRefresh();
+ }
+ } else {
// wait for process to exit
while (!process.isTerminated()) {
try {
@@ -151,7 +161,7 @@ public class ProgramLaunchDelegate extends LaunchConfigurationDelegate {
// refresh resources
RefreshUtil.refreshResources(configuration, monitor);
-// }
+ }
}
private String generateCommandLine(String[] commandLine) {
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
index ea194dc..cb23f6e 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName
Bundle-SymbolicName: org.eclipse.core.filesystem.win32.x86; singleton:=true
-Bundle-Version: 1.1.200.qualifier
+Bundle-Version: 1.1.201.qualifier
Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
Bundle-Localization: fragment
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
index 123a711..dde2c2d 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName
Bundle-SymbolicName: org.eclipse.core.filesystem.win32.x86_64; singleton:=true
-Bundle-Version: 1.1.200.qualifier
+Bundle-Version: 1.1.201.qualifier
Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
Bundle-Localization: fragment
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
index 2cd319b..10b42ef 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.core.filesystem; singleton:=true
-Bundle-Version: 1.3.0.qualifier
+Bundle-Version: 1.3.1.qualifier
Bundle-Localization: plugin
Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)",
org.eclipse.equinox.registry;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
index c2d54e1..575f529 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
+++ b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
@@ -78,9 +78,9 @@ public abstract class UnixFileNatives {
info = new FileInfo();
info.setAttribute(EFS.ATTRIBUTE_SYMLINK, true);
byte target[] = new byte[UnixFileFlags.PATH_MAX];
- long length = readlink(name, target, target.length);
+ int length = readlink(name, target, target.length);
if (length > 0)
- info.setStringAttribute(EFS.ATTRIBUTE_LINK_TARGET, bytesToFileName(target, (int) length));
+ info.setStringAttribute(EFS.ATTRIBUTE_LINK_TARGET, bytesToFileName(target, length));
} else
info = stat.toFileInfo();
} else
@@ -182,7 +182,7 @@ public abstract class UnixFileNatives {
private static final native int lstat(byte[] path, StructStat buf);
- private static final native long readlink(byte[] path, byte[] buf, long bufsiz);
+ private static final native int readlink(byte[] path, byte[] buf, long bufsiz);
private static final native int errno();
diff --git a/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
index fd153d7..5efc247 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.core.jobs; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.core.internal.jobs;x-internal:=true,
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
index a0cfdc6..6f423f6 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
@@ -10,6 +10,7 @@
* Stephan Wahlbrink - Fix for bug 200997.
* Danail Nachev - Fix for bug 109898
* Mike Moreaty - Fix for bug 289790
+ * Oracle Corporation - Fix for bug 316839
*******************************************************************************/
package org.eclipse.core.internal.jobs;
@@ -1336,9 +1337,13 @@ public class JobManager implements IJobManager {
JobManager.debug(job + " will yieldRule to " + unblocked); //$NON-NLS-1$
}
- if (likeThreadJob != null)
+ if (likeThreadJob != null) {
// only null-out threads out for non-ThreadJobs
job.setThread(null);
+ if (likeThreadJob.getRule() != null) {
+ getLockManager().removeLockThread(currentThread, likeThreadJob.getRule());
+ }
+ }
if ((job.getRule() != null) && !(job instanceof ThreadJob))
getLockManager().removeLockThread(currentThread, job.getRule());
diff --git a/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
index 1c45f13..9c99a62 100644
--- a/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-Localization: fragment
Bundle-SymbolicName: org.eclipse.core.net.linux.x86;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.100.qualifier
Fragment-Host: org.eclipse.core.net;bundle-version="1.1.0"
Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86))
Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
index 10276e1..d538383 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
@@ -1655,6 +1655,8 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
workspace.prepareOperation(rule, monitor);
if (!isRoot && !getProject().isAccessible())
return;
+ if (!exists() && isFiltered())
+ return;
workspace.beginOperation(true);
if (getType() == IResource.PROJECT || getType() == IResource.ROOT)
workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_REFRESH, this));
diff --git a/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
index 8bab198..a038a05 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.debug.ui; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.debug.internal.ui.DebugUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugModelContextBindingManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugModelContextBindingManager.java
index 7a744a8..38ea299 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugModelContextBindingManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugModelContextBindingManager.java
@@ -35,6 +35,7 @@ import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchesListener2;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugModelProvider;
+import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.contexts.DebugContextEvent;
@@ -312,8 +313,8 @@ public class DebugModelContextBindingManager implements IDebugContextListener, I
}
}
}
- if (object instanceof IDebugElement) {
- return new String[] { ((IDebugElement) object).getModelIdentifier() };
+ if (object instanceof IStackFrame) {
+ return new String[] { ((IStackFrame) object).getModelIdentifier() };
}
return null;
}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
index 64281cc..914603f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
@@ -1516,6 +1516,8 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
getDuplicateAction().setEnabled(getDuplicateAction().isEnabled());
fTabViewer.refresh();
getButton(ID_LAUNCH_BUTTON).setEnabled(fTabViewer.canLaunch() & fTabViewer.canLaunchWithModes() & !fTabViewer.hasDuplicateDelegates());
+ } else {
+ fTabViewer.refresh();
}
}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
index 52ec2db..910b640 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -31,7 +31,6 @@ import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.ViewerLabel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.events.TraverseEvent;
@@ -122,16 +121,6 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
}
});
-
- fContainer.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- if (fGradientBackground != null) {
- fGradientBackground.dispose();
- fGradientBackground = null;
- }
- }
- });
-
hookControl(fContainer);
int columns= 1000;
@@ -872,5 +861,29 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
private static int blend(int v1, int v2, int ratio) {
int b = (ratio * v1 + (100 - ratio) * v2) / 100;
return Math.min(255, b);
- }
+ }
+
+ /*
+ * @see
+ * org.eclipse.jface.viewers.StructuredViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
+ *
+ * @since 3.7
+ */
+ protected void handleDispose(DisposeEvent event) {
+ if (fGradientBackground != null) {
+ fGradientBackground.dispose();
+ fGradientBackground= null;
+ }
+
+ if (fBreadcrumbItems != null) {
+ Iterator iterator= fBreadcrumbItems.iterator();
+ while (iterator.hasNext()) {
+ BreadcrumbItem item= (BreadcrumbItem)iterator.next();
+ item.dispose();
+ }
+ }
+
+ super.handleDispose(event);
+ }
+
}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
index fcde05b..86eaba6 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
@@ -345,7 +345,9 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
ITreeModelContentProviderTarget treeViewer = getViewer();
// check if selection is allowed
IStructuredSelection candidate = new TreeSelection(getViewerTreePath(delta));
- if (!treeViewer.overrideSelection(treeViewer.getSelection(), candidate)) {
+ if ((delta.getFlags() & IModelDelta.FORCE) == 0 &&
+ !treeViewer.overrideSelection(treeViewer.getSelection(), candidate))
+ {
return;
}
// empty the selection before replacing elements to avoid materializing elements (@see bug 305739)
@@ -371,7 +373,7 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
}
}
TreePath selectionPath = getViewerTreePath(delta);
- if (treeViewer.trySelection(new TreeSelection(selectionPath), false, true)) {
+ if (treeViewer.trySelection(new TreeSelection(selectionPath), false, (delta.getFlags() | IModelDelta.FORCE) == 0)) {
cancelRestore(selectionPath, IModelDelta.SELECT);
}
}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
index f2c515c..bcf9c86 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
@@ -102,6 +102,9 @@ public class ExpressionView extends VariablesView {
* @see org.eclipse.debug.internal.ui.views.variables.VariablesView#contextActivated(org.eclipse.jface.viewers.ISelection)
*/
protected void contextActivated(ISelection selection) {
+ if (!isAvailable() || !isVisible()) {
+ return;
+ }
if (selection == null || selection.isEmpty()) {
super.contextActivated(new StructuredSelection(DebugPlugin.getDefault().getExpressionManager()));
} else {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
index 63178c4..fe0869b 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
@@ -222,11 +222,15 @@ public abstract class DebugCommandAction extends Action implements IDebugContext
}
/**
- * Returns the context this action operates on as a selection.
+ * Returns the context (selection) this action operates on. By default
+ * the active debug context in this action's associated part or window is used,
+ * but subclasses may override as required.
*
* @return the context this action operates on
+ * @nooverride This method is not intended to be re-implemented or extended by clients.
+ * @noreference This method is not intended to be referenced by clients.
*/
- private ISelection getContext() {
+ protected ISelection getContext() {
if (fPart != null) {
getDebugContextService().getActiveContext(fPart.getSite().getId());
}
diff --git a/eclipse/plugins/org.eclipse.ecf.ssl/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ecf.ssl/META-INF/MANIFEST.MF
index 8a14b1d..c58da91 100644
--- a/eclipse/plugins/org.eclipse.ecf.ssl/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ecf.ssl/META-INF/MANIFEST.MF
@@ -2,11 +2,12 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.eclipse.ecf.ssl
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
Fragment-Host: org.eclipse.ecf
Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Import-Package: org.eclipse.osgi.service.security,
- javax.net.ssl
+Import-Package: javax.net,
+ javax.net.ssl,
+ org.eclipse.osgi.service.security
Bundle-Localization: plugin
Export-Package: org.eclipse.ecf.internal.ssl;x-internal:=true
Bundle-Vendor: %plugin.provider
diff --git a/eclipse/plugins/org.eclipse.ecf/javadoc.xml b/eclipse/plugins/org.eclipse.ecf/javadoc.xml
index 2d19741..74944ac 100644
--- a/eclipse/plugins/org.eclipse.ecf/javadoc.xml
+++ b/eclipse/plugins/org.eclipse.ecf/javadoc.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="javadoc">
<target name="javadoc">
- <javadoc access="protected" additionalparam="-J-Xmx256m -tag model:a:Model -tag generated:a:Generated -tag noreference:tcmf:DoNotReference -tag ordered:a:Ordered -tag noimplement:a:NoImplement -tag noextend:a:NoExtend" author="false" classpath="../org.apache.log4j;../org.eclipse.ecf.remoteservice/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.views_3.5.0.I20090914-0830.jar;../org.eclipse.ecf.presence.ui/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.text_3.5.0.v20100513-0800.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.preferences_3.3.0.v20100503.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.app_1.3.0.v20100512.jar;C:\eclipse3.6rc1\eclipse\plugins\org.objectweb.asm_3.2.0.v200909071300.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.security_1.0.200.v20100503.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.jobs_3.5.0.v20100510.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.runtime_3.6.0.v20100505.jar;../org.eclipse.emf.ecore.change/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.commands_3.6.0.I20100512-1500.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.forms_3.5.0.v20100427.jar;../org.eclipse.ecf.provider.remoteservice/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.net_1.2.100.I20100511-0800.jar;../org.eclipse.ecf.presence/bin;../org.eclipse.ecf.provider.xmpp/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.swt_3.6.0.v3647a.jar;bin;../org.eclipse.ecf.provider.datashare/bin;../org.eclipse.ecf.discovery.ui.edit/bin;../org.jivesoftware.smack/bin;../org.eclipse.ecf.sync/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.editors_3.6.0.v20100513-0800.jar;../org.eclipse.ecf.provider.filetransfer/bin;../org.eclipse.ecf.identity/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.filebuffers_3.5.100.v20100513-0800.jar;../org.eclipse.emf.ecore/bin;../org.eclipse.ecf.ui/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.common_3.6.0.v20100503.jar;../org.jivesoftware.smack/jars/xpp.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.registry_3.5.0.v20100503.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.expressions_3.4.200.v20100505.jar;../org.eclipse.emf.edit/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.workbench.texteditor_3.6.0.v20100513-0800.jar;../org.eclipse.ecf.telephony.call/bin;C:\eclipse3.6rc1\eclipse\plugins\org.apache.commons.httpclient_3.1.0.v201005080502.jar;../org.eclipse.ecf.sharedobject/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.console_3.5.0.v20100503.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.equinox.concurrent_1.0.100.v20100503.jar;../org.apache.zookeeper/zookeeper-3.3.0.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.3.0.v20100505\runtime_registry_compatibility.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.6.0.v3647a.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.jface_3.6.0.I20100512-1930.jar;../org.eclipse.emf.edit.ui/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.workbench_3.6.0.I20100512-1500.jar;../org.eclipse.ecf.filetransfer/bin;../org.eclipse.ecf.provider/bin;../ch.ethz.iks.slp/bin;../org.eclipse.ecf.discovery/bin;../org.eclipse.ecf.datashare/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.resources_3.6.0.V20100513-0800.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.core.filesystem_1.3.0.v20100505.jar;../ch.ethz.iks.r_osgi.remote/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.osgi.services_3.2.100.v20100503.jar;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui.ide_3.6.0.I20100513-0500.jar;../org.eclipse.emf.common.ui/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.osgi_3.6.0.v20100512.jar;../org.eclipse.ecf.discovery.ui.model/bin;../org.eclipse.emf.common/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.jface.text_3.6.0.v20100513-0800.jar;../org.eclipse.ecf.discovery.ui/bin;C:\eclipse3.6rc1\eclipse\plugins\org.eclipse.ui_3.6.0.I20100513-0800.jar;../org.eclipse.ecf.osgi.services.discovery/bin" destdir="../ecf documentation/org.eclipse.ecf.docs/api" doctitle="Eclipse Communication Framework (ECF) 3.3.0" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="org.eclipse.ecf.ui.hyperlink,org.eclipse.ecf.core.sharedobject.util,org.eclipse.ecf.filetransfer.ui,org.eclipse.ecf.core.sharedobject.provider,org.eclipse.ecf.example.clients,org.eclipse.ecf.presence.im,org.eclipse.ecf.ui.actions,org.eclipse.ecf.telephony.call.ui.actions,org.eclipse.ecf.core.provider,org.eclipse.ecf.discovery.service,org.eclipse.ecf.presence.bot,org.eclipse.ecf.provider.zookeeper,org.eclipse.ecf.provider.remoteservice,org.eclipse.ecf.core.sharedobject.events,org.eclipse.ecf.provider.jslp.identity,org.eclipse.ecf.remoteservice.soap.identity,org.eclipse.ecf.telephony.call.events,org.eclipse.ecf.presence.collab.ui,org.eclipse.ecf.core.identity,org.eclipse.ecf.provider.remoteservice.generic,org.eclipse.ecf.remoteservice.soap.client,org.eclipse.ecf.docshare,org.eclipse.ecf.presence.collab.ui.url,org.eclipse.ecf.remoteservice.rest,org.eclipse.ecf.internal.docshare,org.eclipse.ecf.presence.roster,org.eclipse.ecf.core.events,org.eclipse.ecf.provider.zookeeper.node.internal,org.eclipse.ecf.discovery.ui.model,org.eclipse.ecf.provider.discovery,org.eclipse.ecf.provider.filetransfer.events.socket,org.eclipse.ecf.provider.generic.gmm,org.eclipse.ecf.examples.remoteservices.hello,org.eclipse.ecf.presence.collab.ui.screencapture,org.eclipse.ecf.provider.zookeeper.core,org.eclipse.ecf.provider.filetransfer.outgoing,org.eclipse.ecf.filetransfer.events,org.eclipse.ecf.datashare.service,org.eclipse.ecf.filetransfer.ui.actions,org.eclipse.ecf.core.sharedobject,org.eclipse.ecf.filetransfer.events.socket,org.eclipse.ecf.sync.doc,org.eclipse.ecf.ui.util,org.eclipse.ecf.core.sharedobject.security,org.eclipse.ecf.provider.zookeeper.core.internal,org.eclipse.ecf.remoteservice.client,org.eclipse.ecf.provider.filetransfer.retrieve,org.eclipse.ecf.core.user,org.eclipse.ecf.presence.chatroom,org.eclipse.ecf.provider.filetransfer.identity,org.eclipse.ecf.remoteservices.ui,org.eclipse.ecf.provider.generic,org.eclipse.ecf.presence.ui.dnd,org.eclipse.ecf.presence.bot.application,org.eclipse.ecf.ui.screencapture,org.eclipse.ecf.provider.comm,org.eclipse.ecf.presence.search.message,org.eclipse.ecf.provider.jslp.container,org.eclipse.ecf.provider.ui.wizards,org.eclipse.ecf.ui.dialogs,org.eclipse.ecf.ui.wizards,org.eclipse.ecf.presence.history,org.eclipse.ecf.core.start,org.eclipse.ecf.presence.collab.ui.view,org.eclipse.ecf.osgi.services.distribution,org.eclipse.ecf.docshare.messages,org.eclipse.ecf.provider.filetransfer.browse,org.eclipse.ecf.provider.localdiscovery,org.eclipse.ecf.remoteservice.rest.util,org.eclipse.ecf.core.security,org.eclipse.ecf.protocol.bittorrent,org.eclipse.ecf.discovery.ui.model.resource,org.eclipse.ecf.remoteservice.rest.client,org.eclipse.ecf.presence.ui.menu,org.eclipse.ecf.protocol.msn.events,org.eclipse.ecf.presence.search,org.eclipse.ecf.provider.zookeeper.util,org.eclipse.ecf.ui,org.eclipse.ecf.provider.comm.tcp,org.eclipse.ecf.protocol.msn,org.eclipse.ecf.remoteservice.util.tracker,org.eclipse.ecf.presence.bot.impl,org.eclipse.ecf.presence.ui,org.eclipse.ecf.storage,org.eclipse.ecf.remoteservice.eventadmin,org.eclipse.ecf.filetransfer.events.socketfactory,org.eclipse.ecf.presence.ui.chatroom,org.eclipse.ecf.server.generic,org.eclipse.ecf.provider.xmpp.identity,org.eclipse.ecf.docshare.menu,org.eclipse.ecf.datashare.events,org.eclipse.ecf.provider.datashare.nio,org.eclipse.ecf.example.clients.applications,org.eclipse.ecf.examples.remoteservices.hello.impl,org.eclipse.ecf.provider.jmdns.identity,org.eclipse.ecf.telephony.call.service,org.eclipse.ecf.filetransfer.identity,org.eclipse.ecf.telephony.call,org.eclipse.ecf.server.generic.app,org.eclipse.ecf.datashare,org.eclipse.ecf.provider.xmpp,org.eclipse.ecf.discovery.ui.model.provider,org.eclipse.ecf.provider.r_osgi.identity,org.eclipse.ecf.remoteservice.util,org.eclipse.ecf.sync,org.eclipse.ecf.discovery.ui.model.impl,org.eclipse.ecf.presence.collab.ui.console,org.eclipse.ecf.provider.jmdns.container,org.eclipse.ecf.datashare.mergeable,org.eclipse.ecf.provider.util,org.eclipse.ecf.discovery.identity,org.eclipse.ecf.presence.ui.roster,org.eclipse.ecf.remoteservice.rest.identity,org.eclipse.ecf.examples.provider.trivial,org.eclipse.ecf.filetransfer.service,org.eclipse.ecf.discovery.ui.model.util,org.eclipse.ecf.presence.service,org.eclipse.ecf.core.util,org.eclipse.ecf.provider.filetransfer.httpclient,org.eclipse.ecf.provider.filetransfer.util,org.eclipse.ecf.core.jobs,org.eclipse.ecf.osgi.services.discovery.local,org.eclipse.ecf.remoteservice.events,org.eclipse.ecf.core.status" source="1.5" sourcefiles="../org.eclipse.ecf.discovery.ui/src/org/eclipse/ecf/discovery/ui/DiscoveryPropertyTesterUtil.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemListener.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceContainerAdapter.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceRegistration.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceHelper.java,src/org/eclipse/ecf/core/ContainerTypeDescription.java,src/org/eclipse/ecf/core/IContainerManager.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceProperties.java,src/org/eclipse/ecf/core/IContainerFactory.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IFQID.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFile.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/Constants.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceProperties.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/FileTransferJob.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferPausable.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceClientManager.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceReference.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/UserCancelledException.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/BrowseFileTransferException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IIncomingFileTransferRequestListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IAsyncRemoteServiceProxy.java,src/org/eclipse/ecf/core/AbstractContainerAdapterFactory.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/SharedObjectDatashareContainerAdapter.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/BaseChannel.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteCallListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxy.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IIncomingFileTransfer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java,src/org/eclipse/ecf/core/ContainerCreateException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceEvent.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceTypeListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteFilter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferRateControl.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AsyncService.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceID.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileAttributes.java,src/org/eclipse/ecf/core/IContainerManagerListener.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceInfo.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IProxyDiscoveryListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileRangeSpecification.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessageEvent.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferInfo.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/Presence.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AsyncMethod.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceSender.java,src/org/eclipse/ecf/core/IReliableContainer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/CallbackRemoteCallListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileInfo.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceContainerEvent.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceListener.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/RemoteServiceEndpointDescription.java,src/org/eclipse/ecf/core/ContainerAuthenticationException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/DiscoveryContainerConfig.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteCallListener.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferRunnable.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IAsyncCallback.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IMMessage.java,../org.eclipse.ecf.discovery.ui/src/org/eclipse/ecf/discovery/ui/DiscoveryHandlerUtil.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/RemoteServicePublication.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteCall.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/InvalidFileRangeSpecificationException.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferListener.java,src/org/eclipse/ecf/core/BaseContainer.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IAccountManager.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerAdapterFactory.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/SendFileTransferException.java,src/org/eclipse/ecf/core/ContainerFactory.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRetrieveFileTransferContainerAdapter.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceTypeContainerEvent.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceID.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerConfig.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IncomingFileTransferException.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/ISendFileTransferContainerAdapter.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessageListener.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemRequest.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresence.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/RemoteFileSystemException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceTypeEvent.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IDiscoveryContainerAdapter.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/AbstractPresenceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IOutgoingFileTransfer.java,src/org/eclipse/ecf/core/AbstractContainer.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceInfo.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransfer.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerAdapter.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteService.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessage.java,src/org/eclipse/ecf/core/IContainerListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteCall.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/FileTransferInfo.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IContainerServiceInfoAdapter.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceClient.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceHost.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceContainerAdapter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemBrowserContainerAdapter.java,src/org/eclipse/ecf/core/IContainer.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IRemoteServiceEndpointDescription.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IHostDiscoveryListener.java,src/org/eclipse/ecf/core/ContainerConnectException.java" sourcepath="../org.eclipse.ecf.provider.jslp/src;../org.eclipse.ecf.provider.ui/src;../org.eclipse.ecf.identity/src;../org.eclipse.ecf.ui/src;../org.eclipse.ecf.presence.collab.ui/src;../org.eclipse.ecf.osgi.services.discovery/src;../org.eclipse.ecf.examples.provider.trivial/src;../org.eclipse.ecf.storage/src;../org.eclipse.ecf.remoteservice.ui/src;../org.eclipse.ecf.server/src;../org.eclipse.ecf.osgi.services.discovery.local/src;../org.eclipse.ecf.provider.r_osgi/src;../org.eclipse.ecf.provider.zookeeper/src;../org.eclipse.ecf.remoteservice.eventadmin/src;../org.eclipse.ecf.protocol.bittorrent/src;../org.eclipse.ecf.provider.datashare.nio/src;../org.eclipse.ecf.osgi.services.distribution/src;../org.eclipse.ecf.provider.filetransfer/src;../org.eclipse.ecf.filetransfer.ui/src;../org.eclipse.ecf.remoteservice.rest/src;../org.eclipse.ecf.protocol.msn/src;../org.eclipse.ecf.provider.filetransfer.httpclient/src;../org.eclipse.ecf.discovery.ui/src;../org.eclipse.ecf.remoteservice/src;../org.eclipse.ecf.provider.localdiscovery/src;../org.eclipse.ecf.provider/src;../org.eclipse.ecf.datashare/src;../org.eclipse.ecf.presence.bot/src;src;../org.eclipse.ecf.discovery.ui.edit/src;../org.eclipse.ecf.presence.ui/src;../org.eclipse.ecf.telephony.call/src;../org.eclipse.ecf.sharedobject/src;../org.eclipse.ecf.sync/src;../org.eclipse.ecf.provider.discovery/src;../org.eclipse.ecf.provider.datashare/src;../org.eclipse.ecf.docshare/src;../org.eclipse.ecf.remoteservice.soap/src;../org.eclipse.ecf.discovery/src;../org.eclipse.ecf.provider.remoteservice/src;../org.eclipse.ecf.provider.jmdns/jmdns;../org.eclipse.ecf.presence/src;../org.eclipse.ecf.telephony.call.ui/src;../org.eclipse.ecf.examples.remoteservices.hello/src;../org.eclipse.ecf.provider.xmpp/src;../org.eclipse.ecf.discovery.ui.model/src;../org.eclipse.ecf.example.clients/src;../org.eclipse.ecf.server.generic/src;../org.eclipse.ecf.filetransfer/src;../org.eclipse.ecf.provider.jmdns/src" splitindex="true" use="true" version="true"/>
+ <javadoc access="protected" additionalparam="-J-Xmx256m -tag model:a:Model -tag generated:a:Generated -tag noreference:tcmf:DoNotReference -tag ordered:a:Ordered -tag noimplement:a:NoImplement -tag noextend:a:NoExtend " author="false" classpath="C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.console_3.5.0.v20100526.jar;../org.apache.log4j;../org.eclipse.ecf.remoteservice/bin;../org.eclipse.ecf.presence.ui/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.swt_3.6.0.v3650.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.jobs_3.5.0.v20100515.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui_3.6.0.I20100527-0800.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.resources_3.6.0.v20100526-0737.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.text_3.5.0.v20100520-0800.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.concurrent_1.0.100.v20100503.jar;../org.eclipse.emf.ecore.change/bin;../org.eclipse.ecf.provider.remoteservice/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.jface_3.6.0.I20100526-1400.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.ide_3.6.0.I20100526-1400.jar;../org.eclipse.ecf.presence/bin;../org.eclipse.ecf.provider.xmpp/bin;bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.forms_3.5.0.v20100427.jar;../org.eclipse.ecf.provider.datashare/bin;../org.eclipse.ecf.discovery.ui.edit/bin;../org.jivesoftware.smack/bin;../org.eclipse.ecf.sync/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.editors_3.6.0.v20100520-0800.jar;../org.eclipse.ecf.provider.filetransfer/bin;../org.eclipse.ecf.identity/bin;../org.eclipse.emf.ecore/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.6.0.v3650.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.preferences_3.3.0.v20100503.jar;../org.eclipse.ecf.ui/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.commands_3.6.0.I20100512-1500.jar;C:\eclipse3.6rc3\eclipse\plugins\org.objectweb.asm_3.2.0.v200909071300.jar;../org.jivesoftware.smack/jars/xpp.jar;../org.eclipse.emf.edit/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.registry_3.5.0.v20100503.jar;../org.eclipse.ecf.telephony.call/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.runtime_3.6.0.v20100505.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.views_3.5.0.I20100527-0800.jar;../org.eclipse.ecf.sharedobject/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.workbench.texteditor_3.6.0.v20100520-0800.jar;C:\eclipse3.6rc3\eclipse\plugins\org.apache.commons.httpclient_3.1.0.v201005080502.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar;../org.apache.zookeeper/zookeeper-3.3.0.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.ui.workbench_3.6.0.I20100526-1400.jar;../org.eclipse.emf.edit.ui/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.3.0.v20100520\runtime_registry_compatibility.jar;../org.eclipse.ecf.filetransfer/bin;../org.eclipse.ecf.provider/bin;../ch.ethz.iks.slp/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.jface.text_3.6.0.v20100526-0800.jar;../org.eclipse.ecf.discovery/bin;../org.eclipse.ecf.datashare/bin;../ch.ethz.iks.r_osgi.remote/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.filebuffers_3.5.100.v20100520-0800.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.net_1.2.100.I20100511-0800.jar;../org.eclipse.emf.common.ui/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.osgi.services_3.2.100.v20100503.jar;../org.eclipse.ecf.discovery.ui.model/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.common_3.6.0.v20100503.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.core.expressions_3.4.200.v20100505.jar;../org.eclipse.emf.common/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.osgi_3.6.0.v20100517.jar;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.security_1.0.200.v20100503.jar;../org.eclipse.ecf.discovery.ui/bin;../org.eclipse.ecf.osgi.services.discovery/bin;C:\eclipse3.6rc3\eclipse\plugins\org.eclipse.equinox.app_1.3.0.v20100512.jar" destdir="../ecf documentation/org.eclipse.ecf.docs/api" doctitle="Eclipse Communication Framework (ECF) 3.3.0" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="org.eclipse.ecf.ui.hyperlink,org.eclipse.ecf.core.sharedobject.util,org.eclipse.ecf.filetransfer.ui,org.eclipse.ecf.core.sharedobject.provider,org.eclipse.ecf.example.clients,org.eclipse.ecf.presence.im,org.eclipse.ecf.ui.actions,org.eclipse.ecf.telephony.call.ui.actions,org.eclipse.ecf.core.provider,org.eclipse.ecf.discovery.service,org.eclipse.ecf.presence.bot,org.eclipse.ecf.provider.zookeeper,org.eclipse.ecf.provider.remoteservice,org.eclipse.ecf.core.sharedobject.events,org.eclipse.ecf.remoteservice.soap.identity,org.eclipse.ecf.provider.jslp.identity,org.eclipse.ecf.telephony.call.events,org.eclipse.ecf.presence.collab.ui,org.eclipse.ecf.core.identity,org.eclipse.ecf.provider.remoteservice.generic,org.eclipse.ecf.remoteservice.soap.client,org.eclipse.ecf.docshare,org.eclipse.ecf.presence.collab.ui.url,org.eclipse.ecf.remoteservice.rest,org.eclipse.ecf.internal.docshare,org.eclipse.ecf.presence.roster,org.eclipse.ecf.core.events,org.eclipse.ecf.discovery.ui.model,org.eclipse.ecf.provider.discovery,org.eclipse.ecf.provider.filetransfer.events.socket,org.eclipse.ecf.provider.generic.gmm,org.eclipse.ecf.examples.remoteservices.hello,org.eclipse.ecf.presence.collab.ui.screencapture,org.eclipse.ecf.provider.zookeeper.core,org.eclipse.ecf.provider.filetransfer.outgoing,org.eclipse.ecf.filetransfer.events,org.eclipse.ecf.datashare.service,org.eclipse.ecf.filetransfer.ui.actions,org.eclipse.ecf.core.sharedobject,org.eclipse.ecf.filetransfer.events.socket,org.eclipse.ecf.sync.doc,org.eclipse.ecf.ui.util,org.eclipse.ecf.core.sharedobject.security,org.eclipse.ecf.remoteservice.client,org.eclipse.ecf.provider.filetransfer.retrieve,org.eclipse.ecf.core.user,org.eclipse.ecf.presence.chatroom,org.eclipse.ecf.provider.filetransfer.identity,org.eclipse.ecf.remoteservices.ui,org.eclipse.ecf.provider.generic,org.eclipse.ecf.presence.ui.dnd,org.eclipse.ecf.provider.comm,org.eclipse.ecf.ui.screencapture,org.eclipse.ecf.presence.bot.application,org.eclipse.ecf.presence.search.message,org.eclipse.ecf.provider.jslp.container,org.eclipse.ecf.provider.ui.wizards,org.eclipse.ecf.ui.dialogs,org.eclipse.ecf.ui.wizards,org.eclipse.ecf.presence.history,org.eclipse.ecf.presence.collab.ui.view,org.eclipse.ecf.core.start,org.eclipse.ecf.osgi.services.distribution,org.eclipse.ecf.docshare.messages,org.eclipse.ecf.provider.filetransfer.browse,org.eclipse.ecf.core.security,org.eclipse.ecf.remoteservice.rest.util,org.eclipse.ecf.provider.localdiscovery,org.eclipse.ecf.protocol.bittorrent,org.eclipse.ecf.discovery.ui.model.resource,org.eclipse.ecf.remoteservice.rest.client,org.eclipse.ecf.presence.ui.menu,org.eclipse.ecf.protocol.msn.events,org.eclipse.ecf.presence.search,org.eclipse.ecf.provider.zookeeper.util,org.eclipse.ecf.ui,org.eclipse.ecf.provider.comm.tcp,org.eclipse.ecf.protocol.msn,org.eclipse.ecf.remoteservice.util.tracker,org.eclipse.ecf.presence.bot.impl,org.eclipse.ecf.presence.ui,org.eclipse.ecf.storage,org.eclipse.ecf.filetransfer.events.socketfactory,org.eclipse.ecf.remoteservice.eventadmin,org.eclipse.ecf.presence.ui.chatroom,org.eclipse.ecf.server.generic,org.eclipse.ecf.provider.xmpp.identity,org.eclipse.ecf.docshare.menu,org.eclipse.ecf.datashare.events,org.eclipse.ecf.provider.datashare.nio,org.eclipse.ecf.example.clients.applications,org.eclipse.ecf.telephony.call.service,org.eclipse.ecf.provider.jmdns.identity,org.eclipse.ecf.examples.remoteservices.hello.impl,org.eclipse.ecf.filetransfer.identity,org.eclipse.ecf.telephony.call,org.eclipse.ecf.server.generic.app,org.eclipse.ecf.datashare,org.eclipse.ecf.provider.xmpp,org.eclipse.ecf.discovery.ui.model.provider,org.eclipse.ecf.provider.r_osgi.identity,org.eclipse.ecf.remoteservice.util,org.eclipse.ecf.sync,org.eclipse.ecf.discovery.ui.model.impl,org.eclipse.ecf.presence.collab.ui.console,org.eclipse.ecf.provider.jmdns.container,org.eclipse.ecf.datashare.mergeable,org.eclipse.ecf.provider.util,org.eclipse.ecf.discovery.identity,org.eclipse.ecf.presence.ui.roster,org.eclipse.ecf.remoteservice.rest.identity,org.eclipse.ecf.examples.provider.trivial,org.eclipse.ecf.filetransfer.service,org.eclipse.ecf.discovery.ui.model.util,org.eclipse.ecf.presence.service,org.eclipse.ecf.core.util,org.eclipse.ecf.provider.filetransfer.httpclient,org.eclipse.ecf.provider.filetransfer.util,org.eclipse.ecf.core.jobs,org.eclipse.ecf.osgi.services.discovery.local,org.eclipse.ecf.remoteservice.events,org.eclipse.ecf.core.status" source="1.5" sourcefiles="../org.eclipse.ecf.discovery.ui/src/org/eclipse/ecf/discovery/ui/DiscoveryPropertyTesterUtil.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemListener.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceContainerAdapter.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceRegistration.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceHelper.java,src/org/eclipse/ecf/core/ContainerTypeDescription.java,src/org/eclipse/ecf/core/IContainerManager.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceProperties.java,src/org/eclipse/ecf/core/IContainerFactory.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IFQID.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFile.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/Constants.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceProperties.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/FileTransferJob.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferPausable.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceClientManager.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceReference.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/UserCancelledException.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/BrowseFileTransferException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IIncomingFileTransferRequestListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IAsyncRemoteServiceProxy.java,src/org/eclipse/ecf/core/AbstractContainerAdapterFactory.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/SharedObjectDatashareContainerAdapter.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/BaseChannel.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteCallListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxy.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IIncomingFileTransfer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java,src/org/eclipse/ecf/core/ContainerCreateException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceEvent.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceTypeListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteFilter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferRateControl.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AsyncService.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceID.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileAttributes.java,src/org/eclipse/ecf/core/IContainerManagerListener.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceInfo.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IProxyDiscoveryListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteServiceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileRangeSpecification.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessageEvent.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferInfo.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/Presence.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AsyncMethod.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceSender.java,src/org/eclipse/ecf/core/IReliableContainer.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/CallbackRemoteCallListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileInfo.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceContainerEvent.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceListener.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/RemoteServiceEndpointDescription.java,src/org/eclipse/ecf/core/ContainerAuthenticationException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/DiscoveryContainerConfig.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteCallListener.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresenceListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferRunnable.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IAsyncCallback.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IMMessage.java,../org.eclipse.ecf.discovery.ui/src/org/eclipse/ecf/discovery/ui/DiscoveryHandlerUtil.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/RemoteServicePublication.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteCall.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/InvalidFileRangeSpecificationException.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransferListener.java,src/org/eclipse/ecf/core/BaseContainer.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IAccountManager.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerAdapterFactory.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/SendFileTransferException.java,src/org/eclipse/ecf/core/ContainerFactory.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRetrieveFileTransferContainerAdapter.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceTypeContainerEvent.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceID.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerConfig.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IncomingFileTransferException.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/ISendFileTransferContainerAdapter.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessageListener.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceListener.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemRequest.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IPresence.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/RemoteFileSystemException.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IServiceTypeEvent.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IDiscoveryContainerAdapter.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/AbstractPresenceContainer.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IOutgoingFileTransfer.java,src/org/eclipse/ecf/core/AbstractContainer.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/ServiceInfo.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IFileTransfer.java,../org.eclipse.ecf.provider.datashare/src/org/eclipse/ecf/provider/datashare/DatashareContainerAdapter.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteService.java,../org.eclipse.ecf.presence/src/org/eclipse/ecf/presence/IIMMessage.java,src/org/eclipse/ecf/core/IContainerListener.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/RemoteCall.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/FileTransferInfo.java,../org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/IContainerServiceInfoAdapter.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceClient.java,../org.eclipse.ecf.server/src/org/eclipse/ecf/server/IServiceHost.java,../org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceContainerAdapter.java,../org.eclipse.ecf.filetransfer/src/org/eclipse/ecf/filetransfer/IRemoteFileSystemBrowserContainerAdapter.java,src/org/eclipse/ecf/core/IContainer.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IRemoteServiceEndpointDescription.java,../org.eclipse.ecf.osgi.services.discovery/src/org/eclipse/ecf/osgi/services/discovery/IHostDiscoveryListener.java,src/org/eclipse/ecf/core/ContainerConnectException.java" sourcepath="../org.eclipse.ecf.provider.jslp/src;../org.eclipse.ecf.provider.ui/src;../org.eclipse.ecf.identity/src;../org.eclipse.ecf.ui/src;../org.eclipse.ecf.presence.collab.ui/src;../org.eclipse.ecf.osgi.services.discovery/src;../org.eclipse.ecf.examples.provider.trivial/src;../org.eclipse.ecf.storage/src;../org.eclipse.ecf.remoteservice.ui/src;../org.eclipse.ecf.server/src;../org.eclipse.ecf.osgi.services.discovery.local/src;../org.eclipse.ecf.provider.r_osgi/src;../org.eclipse.ecf.provider.zookeeper/src;../org.eclipse.ecf.remoteservice.eventadmin/src;../org.eclipse.ecf.protocol.bittorrent/src;../org.eclipse.ecf.provider.datashare.nio/src;../org.eclipse.ecf.osgi.services.distribution/src;../org.eclipse.ecf.provider.filetransfer/src;../org.eclipse.ecf.filetransfer.ui/src;../org.eclipse.ecf.remoteservice.rest/src;../org.eclipse.ecf.protocol.msn/src;../org.eclipse.ecf.provider.filetransfer.httpclient/src;../org.eclipse.ecf.discovery.ui/src;../org.eclipse.ecf.remoteservice/src;../org.eclipse.ecf.provider.localdiscovery/src;../org.eclipse.ecf.provider/src;../org.eclipse.ecf.datashare/src;../org.eclipse.ecf.presence.bot/src;src;../org.eclipse.ecf.discovery.ui.edit/src;../org.eclipse.ecf.presence.ui/src;../org.eclipse.ecf.telephony.call/src;../org.eclipse.ecf.sharedobject/src;../org.eclipse.ecf.sync/src;../org.eclipse.ecf.provider.discovery/src;../org.eclipse.ecf.provider.datashare/src;../org.eclipse.ecf.docshare/src;../org.eclipse.ecf.remoteservice.soap/src;../org.eclipse.ecf.discovery/src;../org.eclipse.ecf.provider.remoteservice/src;../org.eclipse.ecf.provider.jmdns/jmdns;../org.eclipse.ecf.presence/src;../org.eclipse.ecf.telephony.call.ui/src;../org.eclipse.ecf.examples.remoteservices.hello/src;../org.eclipse.ecf.provider.xmpp/src;../org.eclipse.ecf.discovery.ui.model/src;../org.eclipse.ecf.example.clients/src;../org.eclipse.ecf.server.generic/src;../org.eclipse.ecf.filetransfer/src;../org.eclipse.ecf.provider.jmdns/src" splitindex="true" use="true" version="true"/>
</target>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
index 19ebf7f..01e74ee 100644
--- a/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.app; singleton:=true
-Bundle-Version: 1.3.0.qualifier
+Bundle-Version: 1.3.1.qualifier
Bundle-Vendor: %providerName
Bundle-Activator: org.eclipse.equinox.internal.app.Activator
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
index 667dbe3..c302f65 100644
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
@@ -200,7 +200,6 @@ public class EclipseAppHandle extends ApplicationHandle implements ApplicationRu
tempResult = NULL_RESULT;
} finally {
tempResult = setInternalResult(tempResult, false, null);
-
}
if (Activator.DEBUG)
@@ -230,7 +229,8 @@ public class EclipseAppHandle extends ApplicationHandle implements ApplicationRu
setAppStatus(EclipseAppHandle.FLAG_STOPPING); // must ensure the STOPPING event is fired
setAppStatus(EclipseAppHandle.FLAG_STOPPED);
// only set the exit code property if this is the default application
- if (isDefault()) {
+ // (bug 321386) only set the exit code if the result != null; when result == null we assume an exception was thrown
+ if (isDefault() && result != null) {
int exitCode = result instanceof Integer ? ((Integer) result).intValue() : 0;
// Use the EnvironmentInfo Service to set properties
Activator.setProperty(PROP_ECLIPSE_EXITCODE, Integer.toString(exitCode));
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
index fcff57c..44733c9 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %bundleName
Bundle-SymbolicName: org.eclipse.equinox.ds;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.1.qualifier
Bundle-Vendor: %bundleVendor
Bundle-Activator: org.eclipse.equinox.internal.ds.Activator
Bundle-Description: This bundle provides support for OSGi
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
index 02c8472..9127d65 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
@@ -391,16 +391,17 @@ public class InstanceProcess {
}
/**
- * Called by dispatcher ( Resolver) when work available on queue
+ * Called by Resolver when there is a need of dynamic binding of references
*
- * @param refList
- * Map of ReferenceDescription:subtable Subtable Maps scp:service
- * object
+ * @param refList the references to be bound
+ * @return a Vector containing the Reference objects that are still not bound due to ClassCircularityError.
+ * The returned value may be null if all of the passed references are successfully bound
*/
- final void dynamicBind(Vector refList) {
+ final Vector dynamicBind(Vector refList) {
if (refList == null || refList.isEmpty()) {
- return;
+ return null;
}
+ Vector unboundRefs = null;
for (int i = 0; i < refList.size(); i++) {
Reference ref = (Reference) refList.elementAt(i);
ServiceComponentProp scp = ref.scp;
@@ -412,6 +413,12 @@ public class InstanceProcess {
if (compInstance != null) {
try {
scp.bindReference(ref, compInstance);
+ } catch (ClassCircularityError cce) {
+ if (unboundRefs == null) {
+ unboundRefs = new Vector(1);
+ }
+ unboundRefs.add(ref);
+ Activator.log(scp.bc, LogService.LOG_ERROR, NLS.bind(Messages.ERROR_BINDING_REFERENCE, ref.reference), cce);
} catch (Throwable t) {
Activator.log(scp.bc, LogService.LOG_ERROR, NLS.bind(Messages.ERROR_BINDING_REFERENCE, ref.reference), t);
}
@@ -425,6 +432,7 @@ public class InstanceProcess {
}
}
}
+ return unboundRefs;
}
/**
@@ -578,6 +586,11 @@ public class InstanceProcess {
ComponentInstanceImpl componentInstance = null;
try {
componentInstance = scp.build(usingBundle, instance, security);
+ } catch (ClassCircularityError e) {
+ Vector component = new Vector(1);
+ component.add(scp.serviceComponent);
+ resolver.mgr.enqueueWork(resolver.mgr, resolver.mgr.ENABLE_COMPONENTS, component, false);
+ throw new ComponentException(NLS.bind(Messages.ERROR_BUILDING_COMPONENT_INSTANCE, scp.serviceComponent), e);
} catch (ComponentException e) {
Activator.log(null, LogService.LOG_ERROR, e.getMessage(), e.getCause());
throw e;
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
index 440b412..45d5979 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
@@ -316,7 +316,12 @@ public final class Resolver implements WorkPerformer {
//do synchronous bind
if (target != null) {
- instanceProcess.dynamicBind((Vector) target);
+ Vector unboundRefs = instanceProcess.dynamicBind((Vector) target);
+ if (unboundRefs != null) {
+ // put delayed dynamic binds on the queue
+ // (this is used to handle class circularity errors)
+ mgr.enqueueWork(this, Resolver.DYNAMICBIND, unboundRefs, false);
+ }
}
if (!resolvedComponents.isEmpty()) {
@@ -410,7 +415,12 @@ public final class Resolver implements WorkPerformer {
}
if (target != null) {
- instanceProcess.dynamicBind((Vector) target);
+ Vector unboundRefs = instanceProcess.dynamicBind((Vector) target);
+ if (unboundRefs != null) {
+ // put delayed dynamic binds on the queue
+ // (this is used to handle class circularity errors)
+ mgr.enqueueWork(this, Resolver.DYNAMICBIND, unboundRefs, false);
+ }
}
if (!resolvedComponents.isEmpty()) {
instanceProcess.buildComponents(resolvedComponents, false);
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
index 3e1de41..5f28eab 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
@@ -12,6 +12,7 @@
package org.eclipse.equinox.internal.ds.impl;
import java.util.*;
+import org.apache.felix.scr.Component;
import org.eclipse.equinox.internal.ds.*;
import org.eclipse.equinox.internal.ds.model.ServiceComponentProp;
import org.osgi.service.component.*;
@@ -50,6 +51,7 @@ public class ComponentFactoryImpl implements ComponentFactory {
*/
public ComponentInstance newInstance(Dictionary additionalProps) {
ComponentInstanceImpl instance = null;
+ ServiceComponentProp newSCP = null;
try {
if (Activator.DEBUG) {
Activator.log.debug("ComponentFactoryImpl.newInstance(): " + sci.name, null); //$NON-NLS-1$
@@ -60,7 +62,7 @@ public class ComponentFactoryImpl implements ComponentFactory {
SCRUtil.copyTo(props, additionalProps);
// create a new SCP (adds to resolver scpEnabled list)
- ServiceComponentProp newSCP = InstanceProcess.resolver.mapNewFactoryComponent(sci.serviceComponent, props);
+ newSCP = InstanceProcess.resolver.mapNewFactoryComponent(sci.serviceComponent, props);
// register the component and make instance if immediate
Vector toBuild = new Vector(1);
@@ -72,11 +74,20 @@ public class ComponentFactoryImpl implements ComponentFactory {
// or someone has got it as service (if provides one)
instance = (ComponentInstanceImpl) newSCP.instances.firstElement();
}
- if (instance == null) {
+ if (instance == null && !newSCP.isImmediate()) {
// finally build an instance if not done yet
instance = InstanceProcess.staticRef.buildComponent(null, newSCP, null, Activator.security);
}
+ if (instance == null) {
+ //the instance could not be build because the component cannot be activated
+ //throw exception to notify the user
+ throw new ComponentException(Messages.COULD_NOT_CREATE_NEW_INSTANCE);
+ }
} catch (Throwable e) {
+ //remove the component configuration
+ if (newSCP != null) {
+ disposeSCP(newSCP);
+ }
if (e instanceof ComponentException) {
throw (ComponentException) e;
}
@@ -86,6 +97,14 @@ public class ComponentFactoryImpl implements ComponentFactory {
return instance;
}
+ private void disposeSCP(ServiceComponentProp scp) {
+ scp.serviceComponent.componentProps.removeElement(scp);
+ Vector toDispose = new Vector(1);
+ toDispose.addElement(scp);
+ InstanceProcess.resolver.disposeComponentConfigs(toDispose, ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED);
+ scp.setState(Component.STATE_DISPOSED);
+ }
+
/*
* (non-Javadoc)
*
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
index aa653a5..42e1d21 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
@@ -205,9 +205,15 @@ public class ServiceComponentProp implements Component, PrivilegedExceptionActio
if (references != null) {
for (int i = 0; i < references.size(); i++) {
Reference ref = (Reference) references.elementAt(i);
+ ClassCircularityError ccError = null;
if (ref.reference.bind != null) {
- bindReference(ref, componentInstance);
- if (ref.reference.bindMethod == null || !ref.isBound()) {
+ try {
+ bindReference(ref, componentInstance);
+ } catch (ClassCircularityError cce) {
+ ccError = cce;
+ Activator.log(bc, LogService.LOG_ERROR, NLS.bind(Messages.ERROR_BINDING_REFERENCE, ref.reference), cce);
+ }
+ if (ref.reference.bindMethod == null || ccError != null || !ref.isBound()) {
//the bind method is not found and called for some reason or it has thrown exception
if (ref.reference.cardinality == ComponentReference.CARDINALITY_1_1 || ref.reference.cardinality == ComponentReference.CARDINALITY_1_N) {
//unbind the already bound references
@@ -217,6 +223,10 @@ public class ServiceComponentProp implements Component, PrivilegedExceptionActio
unbindReference(ref, componentInstance);
}
}
+ if (ccError != null) {
+ //rethrow the error so it is further processed according to the use case
+ throw ccError;
+ }
return false;
}
}
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
index f0ca9a2..0d21e54 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.carbon.macosx;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=carbon) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
Bundle-Localization: launcher.carbon.macosx
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
index c2d0db1..807ab25 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.x86_64;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
Bundle-Localization: launcher.cocoa.macosx.x86_64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
index 62a4c00..534d132 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
Bundle-Localization: launcher.cocoa.macosx
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
index 015b6bd..a90e479 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc))
Bundle-Localization: launcher.gtk.linux.ppc
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/.project b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/.project
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/.project
copy to eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/.project
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
index ef15459..0c55814 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc64;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc64))
Bundle-Localization: launcher.gtk.linux.ppc64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/about.html b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/about.html
rename to eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
copy to eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/customBuildCallbacks.xml
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/customBuildCallbacks.xml
copy to eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/customBuildCallbacks.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
copy to eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
index f81992a..57288ac 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390))
Bundle-Localization: launcher.gtk.linux.s390
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
index 87a2366..28fa3d0 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390x;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390x))
Bundle-Localization: launcher.gtk.linux.s390x
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
index 544b8c3..4874f8a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86))
Bundle-Localization: launcher.gtk.linux.x86
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
index e2a8efc..c1691e4 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86_64;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86_64))
Bundle-Localization: launcher.gtk.linux.x86_64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
index db9f427..4c2df53 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=sparc))
Bundle-Localization: launcher.gtk.solaris.sparc
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
index 5acb9fc..cf6ad8a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.x86;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=x86))
Bundle-Localization: launcher.gtk.solaris.x86
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
index 09d2a7c..ae7748f 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.aix.ppc;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=aix) (osgi.arch=ppc))
Bundle-Localization: launcher.motif.aix.ppc
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
index 3b9a7c1..8599977 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.hpux.ia64_32;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Bundle-Vendor: %providerName
Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=hpux) (osgi.arch=ia64_32) )
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
index 2ff0f8f..bd375a7 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.linux.x86;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=linux) (osgi.arch=x86))
Bundle-Localization: launcher.motif.linux.x86
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
index 228b4b5..1604561 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sparc Fragment
Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=solaris) (osgi.arch=sparc))
Bundle-Localization: launcher.motif.solaris.sparc
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
index 0401283..e69c7f3 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.ia64;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=ia64))
Bundle-Localization: launcher.win32.win32.ia64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
index 6abe8ba..dd5cfdc 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86; singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
Bundle-Localization: launcher.win32.win32.x86
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
index 8675dc0..a5a4fb5 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86_64;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))
Bundle-Localization: launcher.win32.win32.x86_64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.classpath b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.project b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.project
deleted file mode 100644
index c8be0ba..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.equinox.launcher.wpf.win32.x86</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
index 01280ea..6ca4a07 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.wpf.win32.x86; singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
Eclipse-PlatformFilter: (& (osgi.ws=wpf) (osgi.os=win32) (osgi.arch=x86))
Bundle-Localization: launcher.wpf.win32.x86
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties
deleted file mode 100644
index adb8345..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-bin.includes = META-INF/,\
- eclipse_*.dll,\
- com_*.dll,\
- launcher.wpf.win32.x86.properties,\
- about.html
-generateSourceBundle=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties
deleted file mode 100644
index 253aace..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Launcher WPF Win32 X86 Fragment
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
index 2cce6bc..2eb1090 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.artifact.repository;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.artifact.repository.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
index 1fbd11d..2d4ca3c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -44,7 +44,7 @@ public class MirrorSelector {
private static final long PRIMARY_FAILURE_LINGER_TIME = 30000; // Retry again after 30 seconds
private static final long SECONDARY_FAILURE_LINGER_TIME = 300000; // Wait 5 minutes
private static final int ACCEPTABLE_FILE_NOT_FOUND_COUNT = 5; // Given an established connection, those are generally quick
- private static final Timer resetFailure = new Timer("Mirror failure timer", true); //$NON-NLS-1$
+ private static final Timer resetFailure = new Timer(true);
long bytesPerSecond;
int failureCount;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
index 343ec0a..329611e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
@@ -679,15 +679,15 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
}
public synchronized URI getLocation(IArtifactDescriptor descriptor) {
- if (flatButPackedEnabled(descriptor)) {
- return getLocationForPackedButFlatArtifacts(descriptor);
- }
-
// if the artifact has a uuid then use it
String uuid = descriptor.getProperty(ARTIFACT_UUID);
if (uuid != null)
return blobStore.fileFor(bytesFromHexString(uuid));
+ if (flatButPackedEnabled(descriptor)) {
+ return getLocationForPackedButFlatArtifacts(descriptor);
+ }
+
try {
// if the artifact is just a reference then return the reference location
if (descriptor instanceof SimpleArtifactDescriptor) {
@@ -708,7 +708,8 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
if (result != null) {
if (isFolderBased(descriptor) && URIUtil.lastSegment(result).endsWith(JAR_EXTENSION))
return URIUtil.removeFileExtension(result);
-
+ if (result.getScheme() == null && "file".equals(getLocation().getScheme())) //$NON-NLS-1$
+ return URIUtil.makeAbsolute(result, new File(System.getProperty("user.dir")).toURI()); //$NON-NLS-1$
return result;
}
}
@@ -723,14 +724,23 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
* Returns the maximum number of concurrent download threads.
*/
private int getMaximumThreads() {
+ int repoMaxThreads = DEFAULT_MAX_THREADS;
+ int userMaxThreads = DEFAULT_MAX_THREADS;
try {
String maxThreadString = getProperties().get(PROP_MAX_THREADS);
if (maxThreadString != null)
- return Math.max(1, Integer.parseInt(maxThreadString));
+ repoMaxThreads = Math.max(1, Integer.parseInt(maxThreadString));
+ } catch (NumberFormatException nfe) {
+ // default number of threads
+ }
+ try {
+ String maxThreadString = Activator.getContext().getProperty(PROP_MAX_THREADS);
+ if (maxThreadString != null)
+ userMaxThreads = Math.max(1, Integer.parseInt(maxThreadString));
} catch (NumberFormatException nfe) {
- // return default number of threads
+ // default number of threads
}
- return DEFAULT_MAX_THREADS;
+ return Math.min(repoMaxThreads, userMaxThreads);
}
public OutputStream getOutputStream(IArtifactDescriptor descriptor) throws ProvisionException {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
index f386452..0bad3ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.core;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.2.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.equinox.internal.p2.core.Activator
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
index 037ea71..829e767 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.core</artifactId>
- <version>2.0.0.qualifier</version>
+ <version>2.0.2.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
index b7fb78d..7712732 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
@@ -36,6 +36,7 @@ public class Tracing {
public static boolean DEBUG_REMOVE_REPO = false;
public static boolean DEBUG_UPDATE_CHECK = false;
public static boolean DEBUG_EVENTS_CLIENT = false;
+ public static boolean DEBUG_VERIFIER = false;
static {
DebugOptions options = (DebugOptions) ServiceHelper.getService(Activator.context, DebugOptions.class.getName());
@@ -55,6 +56,7 @@ public class Tracing {
DEBUG_RECONCILER = options.getBooleanOption(Activator.ID + "/reconciler", false); //$NON-NLS-1$
DEBUG_REMOVE_REPO = options.getBooleanOption(Activator.ID + "/core/removeRepo", false); //$NON-NLS-1$
DEBUG_UPDATE_CHECK = options.getBooleanOption(Activator.ID + "/updatechecker", false); //$NON-NLS-1$
+ DEBUG_VERIFIER = options.getBooleanOption(Activator.ID + "/verifier", false); //$NON-NLS-1$
}
}
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
index 0f930c1..16245de 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.director.app;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.201.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.director.app.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
index 47cce15..c7e4be0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
@@ -610,6 +610,13 @@ public class DirectorApplication implements IApplication {
return;
}
+ // Set platform environment defaults
+ EnvironmentInfo info = (EnvironmentInfo) ServiceHelper.getService(Activator.getContext(), EnvironmentInfo.class.getName());
+ os = info.getOS();
+ ws = info.getWS();
+ nl = info.getNL();
+ arch = info.getOSArch();
+
for (int i = 0; i < args.length; i++) {
// check for args without parameters (i.e., a flag arg)
String opt = args[i];
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
index a9490e1..0fdb954 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.director;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.2.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.equinox.internal.p2.director.DirectorActivator
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
index 5c1fd84..7977545 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.director</artifactId>
- <version>2.0.0.qualifier</version>
+ <version>2.0.2.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
index 65be6f2..1d77cdc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
@@ -269,10 +269,15 @@ public class Projector {
BigInteger maxWeight = POWER;
for (Entry<String, Map<Version, IInstallableUnit>> entry : s) {
Map<Version, IInstallableUnit> conflictingEntries = entry.getValue();
+
+ List<IInstallableUnit> toSort = new ArrayList<IInstallableUnit>(conflictingEntries.values());
if (conflictingEntries.size() == 1) {
+ IInstallableUnit iu = toSort.get(0);
+ if (iu != metaIu) {
+ weightedObjects.add(WeightedObject.newWO(iu, POWER));
+ }
continue;
}
- List<IInstallableUnit> toSort = new ArrayList<IInstallableUnit>(conflictingEntries.values());
Collections.sort(toSort, Collections.reverseOrder());
BigInteger weight = POWER;
int count = toSort.size();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
index a42ac71..93080db 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
@@ -31,6 +31,8 @@ import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescriptio
import org.eclipse.equinox.p2.planner.*;
import org.eclipse.equinox.p2.query.*;
import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
public class SimplePlanner implements IPlanner {
private static boolean DEBUG = Tracing.DEBUG_PLANNER_OPERANDS;
@@ -69,13 +71,77 @@ public class SimplePlanner implements IPlanner {
Map<IInstallableUnit, RequestStatus>[] changes = computeActualChangeRequest(toState, changeRequest);
Map<IInstallableUnit, RequestStatus> requestChanges = (changes == null) ? null : changes[0];
Map<IInstallableUnit, RequestStatus> requestSideEffects = (changes == null) ? null : changes[1];
+
QueryableArray plannedState = new QueryableArray(toState.toArray(new IInstallableUnit[toState.size()]));
PlannerStatus plannerStatus = new PlannerStatus(Status.OK_STATUS, null, requestChanges, requestSideEffects, plannedState);
+
plan.setStatus(plannerStatus);
plan.setInstallerPlan(installerPlan);
+
+ IStatus verificationStatus = verifyPlan(plan);
+ if (!verificationStatus.isOK())
+ plan.setStatus(verificationStatus);
+
return plan;
}
+ /*
+ * Give clients the opportunity to veto the given provisioning plan. Return a status
+ * indicating the result of the verifier's analysis of the plan. If a verifier is not
+ * registered, if verification is disabled, or if the verifier is misbehaving then
+ * return an OK status and continue with the provisioning operation as if the verifier
+ * had not run at all.
+ */
+ private IStatus verifyPlan(final IProvisioningPlan plan) {
+ final BundleContext context = DirectorActivator.context;
+ if (context == null)
+ return Status.OK_STATUS;
+ String value = context.getProperty("eclipse.p2.verifyPlan"); //$NON-NLS-1$
+ if ("false".equalsIgnoreCase(value)) { //$NON-NLS-1$
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Plan verification disabled by user."); //$NON-NLS-1$
+ return Status.OK_STATUS;
+ }
+ ServiceReference ref = context.getServiceReference(PlanVerifier.class.getName());
+ if (ref == null) {
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Skipping plan verification. No verifier available."); //$NON-NLS-1$
+ return Status.OK_STATUS;
+ }
+ final PlanVerifier verifier = (PlanVerifier) context.getService(ref);
+ if (verifier == null) {
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Skipping plan verification. No verifier available."); //$NON-NLS-1$
+ return Status.OK_STATUS;
+ }
+ final IStatus[] result = new IStatus[1];
+ result[0] = Status.OK_STATUS;
+ ISafeRunnable job = new ISafeRunnable() {
+ public void handleException(Throwable exception) {
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Exception while running verifier. Check log for details."); //$NON-NLS-1$
+ // log the exception
+ LogHelper.log(new Status(IStatus.ERROR, DirectorActivator.PI_DIRECTOR, "Exception while running plan verifier.", exception)); //$NON-NLS-1$
+ // don't let a bad verifier prevent the operation. fall through and return OK so execution of the plan continues
+ }
+
+ public void run() throws Exception {
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Running plan verifier."); //$NON-NLS-1$
+ long start = System.currentTimeMillis();
+ result[0] = verifier.verify(plan);
+ if (Tracing.DEBUG_VERIFIER)
+ Tracing.debug("Verification complete in " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ };
+ try {
+ SafeRunner.run(job);
+ } finally {
+ context.ungetService(ref);
+ }
+ return result[0];
+ }
+
private Map<IInstallableUnit, RequestStatus>[] buildDetailedErrors(ProfileChangeRequest changeRequest) {
Collection<IInstallableUnit> requestedAdditions = changeRequest.getAdditions();
Collection<IInstallableUnit> requestedRemovals = changeRequest.getRemovals();
@@ -829,4 +895,5 @@ public class SimplePlanner implements IPlanner {
public IProfileChangeRequest createChangeRequest(IProfile profileToChange) {
return new ProfileChangeRequest(profileToChange);
}
+
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Slicer.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Slicer.java
index a7dd4aa..b9544ac 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Slicer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Slicer.java
@@ -64,6 +64,7 @@ public class Slicer {
}
processIU(toProcess.removeFirst());
}
+ computeNonGreedyIUs();
if (DEBUG) {
long stop = System.currentTimeMillis();
System.out.println("Slicing complete: " + (stop - start)); //$NON-NLS-1$
@@ -78,6 +79,22 @@ public class Slicer {
return new QueryableArray(considered.toArray(new IInstallableUnit[considered.size()]));
}
+ private void computeNonGreedyIUs() {
+ IQueryable<IInstallableUnit> queryable = new QueryableArray(considered.toArray(new IInstallableUnit[considered.size()]));
+ Iterator<IInstallableUnit> it = queryable.query(QueryUtil.ALL_UNITS, new NullProgressMonitor()).iterator();
+ while (it.hasNext()) {
+ Collection<IRequirement> reqs = getRequirements(it.next().unresolved());
+ for (IRequirement req : reqs) {
+ if (!isApplicable(req))
+ continue;
+
+ if (!isGreedy(req)) {
+ nonGreedyIUs.addAll(queryable.query(QueryUtil.createMatchQuery(req.getMatches()), null).toUnmodifiableSet());
+ }
+ }
+ }
+ }
+
public MultiStatus getStatus() {
return result;
}
@@ -123,7 +140,6 @@ public class Slicer {
continue;
if (!isGreedy(req)) {
- nonGreedyIUs.addAll(possibilites.query(QueryUtil.createMatchQuery(req.getMatches()), null).toUnmodifiableSet());
continue;
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java
new file mode 100644
index 0000000..5231685
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.provisional.p2.director;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.engine.IProvisioningPlan;
+
+/**
+ * Verifier is responsible for checking plan sanity
+ */
+public abstract class PlanVerifier {
+ /**
+ * Verifies provisioning plan from P2 solver
+ */
+ public abstract IStatus verify(IProvisioningPlan plan);
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
index 9ec20c5..252df21 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.directorywatcher;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.202.qualifier
Bundle-Activator: org.eclipse.equinox.internal.provisional.p2.directorywatcher.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
index aa29c9b..7cec2ae 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.directorywatcher</artifactId>
- <version>1.0.200.qualifier</version>
+ <version>1.0.202.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
index 36bfd20..574a856 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
@@ -37,18 +37,22 @@ public class CachingArtifactRepository implements IArtifactRepository, IFileArti
}
public void save() {
- savePropertyChanges();
- saveAdditions();
- saveRemovals();
+ innerRepo.executeBatch(new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ savePropertyChanges();
+ saveAdditions();
+ saveRemovals();
+ }
+ }, null);
}
- private void saveRemovals() {
+ void saveRemovals() {
for (IArtifactDescriptor desc : descriptorsToRemove)
innerRepo.removeDescriptor(desc);
descriptorsToRemove.clear();
}
- private void saveAdditions() {
+ void saveAdditions() {
if (descriptorsToAdd.isEmpty())
return;
innerRepo.addDescriptors(descriptorsToAdd.toArray(new IArtifactDescriptor[descriptorsToAdd.size()]));
@@ -56,7 +60,7 @@ public class CachingArtifactRepository implements IArtifactRepository, IFileArti
artifactMap.clear();
}
- private void savePropertyChanges() {
+ void savePropertyChanges() {
for (String key : propertyChanges.keySet()) {
String value = propertyChanges.get(key);
innerRepo.setProperty(key, value == NULL ? null : value);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
index e8213ed..36302dd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
@@ -73,7 +73,7 @@ public class RepositoryListener extends DirectoryChangeListener {
info.setArtifactRepository(artifactRepository);
info.setMetadataRepository(metadataRepository);
info.addAdvice(advice);
- info.setArtifactOptions(IPublisherInfo.A_INDEX);
+ info.setArtifactOptions(IPublisherInfo.A_INDEX | IPublisherInfo.A_NO_MD5);
}
protected CachingArtifactRepository initializeArtifactRepository(String repositoryName, URI repositoryLocation, boolean hidden) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
index f73f932..aae9cab 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %bundleName
Bundle-SymbolicName: org.eclipse.equinox.p2.publisher;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.2.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.publisher.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
index fc100a8..745ba5c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.publisher</artifactId>
- <version>1.1.0.qualifier</version>
+ <version>1.1.2.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
index c35c1d8..6fac40d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
@@ -19,9 +19,9 @@ import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.eclipse.equinox.frameworkadmin.BundleInfo;
import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.p2.metadata.VersionedId;
import org.eclipse.equinox.internal.p2.publisher.Activator;
import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.VersionedId;
import org.eclipse.osgi.service.datalocation.Location;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
@@ -33,15 +33,15 @@ import org.xml.sax.helpers.DefaultHandler;
public class ProductFile extends DefaultHandler implements IProductDescriptor {
private static final String ATTRIBUTE_PATH = "path"; //$NON-NLS-1$
private static final String ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$
- private static final String ATTRIBUTE_FRAGMENT = "fragment"; //$NON-NLS-1$
+ protected static final String ATTRIBUTE_FRAGMENT = "fragment"; //$NON-NLS-1$
private static final String ATTRIBUTE_APPLICATION = "application"; //$NON-NLS-1$
private static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
private static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
private static final String ATTRIBUTE_LOCATION = "location"; //$NON-NLS-1$
private static final String ATTRIBUTE_AUTO_START = "autoStart"; //$NON-NLS-1$
private static final String ATTRIBUTE_START_LEVEL = "startLevel"; //$NON-NLS-1$
- private static final String ATTRIBUTE_VERSION = "version"; //$NON-NLS-1$
- private static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
+ protected static final String ATTRIBUTE_VERSION = "version"; //$NON-NLS-1$
+ protected static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
private static final String ATTRIBUTE_UID = "uid"; //$NON-NLS-1$
private static final String PROPERTY_ECLIPSE_APPLICATION = "eclipse.application"; //$NON-NLS-1$
@@ -129,8 +129,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
private String id = null;
private String uid = null;
private boolean useFeatures = false;
- private List<IVersionedId> plugins = null;
- private List<IVersionedId> fragments = null;
+ protected List<IVersionedId> plugins = null;
+ protected List<IVersionedId> fragments = null;
private List<IVersionedId> features = null;
private String splashLocation = null;
private String productName = null;
@@ -638,7 +638,7 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
launcherArgs.setProperty(key, value);
}
- private void processPlugin(Attributes attributes) {
+ protected void processPlugin(Attributes attributes) {
String fragment = attributes.getValue(ATTRIBUTE_FRAGMENT);
IVersionedId name = new VersionedId(attributes.getValue(ATTRIBUTE_ID), attributes.getValue(ATTRIBUTE_VERSION));
if (fragment != null && new Boolean(fragment).booleanValue()) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
index 7407536..99410f0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
@@ -11,11 +11,11 @@
*******************************************************************************/
package org.eclipse.equinox.p2.publisher;
-import org.eclipse.equinox.p2.query.QueryUtil;
-
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
@@ -26,9 +26,9 @@ import org.eclipse.equinox.internal.p2.publisher.Messages;
import org.eclipse.equinox.p2.core.*;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.repository.artifact.ArtifactKeyQuery;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.osgi.util.NLS;
import org.osgi.framework.ServiceReference;
@@ -180,47 +180,29 @@ public abstract class AbstractPublisherApplication implements IApplication {
publisherInfo.setConfigurations(AbstractPublisherAction.getArrayFromString(parameter, ",")); //$NON-NLS-1$
if (arg.equalsIgnoreCase("-contextMetadata")) //$NON-NLS-1$
- publisherInfo.setContextMetadataRepository(processMetadataRepositoryList(parameter));
+ setContextRepositories(processRepositoryList(parameter), contextArtifactRepositories);
if (arg.equalsIgnoreCase("-contextArtifacts")) //$NON-NLS-1$
- publisherInfo.setContextArtifactRepository(processArtifactRepositoryList(parameter));
+ setContextRepositories(contextMetadataRepositories, processRepositoryList(parameter));
}
- private IArtifactRepository processArtifactRepositoryList(String parameter) {
+ private URI[] processRepositoryList(String parameter) {
String[] list = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
if (list == null || list.length == 0)
return null;
- CompositeArtifactRepository result = CompositeArtifactRepository.createMemoryComposite(agent);
+ List<URI> result = new ArrayList<URI>(list.length);
if (result != null) {
for (int i = 0; i < list.length; i++) {
try {
- result.addChild(URIUtil.fromString(list[i]));
+ result.add(URIUtil.fromString(list[i]));
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- return result;
- }
-
- private IMetadataRepository processMetadataRepositoryList(String parameter) {
- String[] list = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
- if (list == null || list.length == 0)
- return null;
-
- CompositeMetadataRepository result = CompositeMetadataRepository.createMemoryComposite(agent);
- if (result != null) {
- for (int i = 0; i < list.length; i++) {
- try {
- result.addChild(URIUtil.fromString(list[i]));
- } catch (URISyntaxException e) {
- // TODO Auto-generated catch block
- }
- }
- }
- return result;
+ return result.toArray(new URI[result.size()]);
}
protected void processFlag(String arg, PublisherInfo publisherInfo) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
index e804e2d..bba320f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
@@ -35,6 +35,13 @@ public interface IPublisherInfo {
public static final int A_OVERWRITE = 4;
/**
+ * A bitwise flag indicating that MD5 hash should not be generated when
+ * publishing an artifact. When this flag is not specified the MD5 hash will
+ * be generated by default.
+ */
+ public static final int A_NO_MD5 = 8;
+
+ /**
* Returns the artifact repository into which any publishable artifacts are published
* or <code>null</code> if none.
* @return a destination artifact repository or <code>null</code>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
index e64e63c..3da9abb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
@@ -116,8 +116,8 @@ public class BundlesAction extends AbstractPublisherAction {
Version hostVersion = Version.parseVersion(configInfo.getVersion());
VersionRange range = hostVersion == Version.emptyVersion ? VersionRange.emptyRange : new VersionRange(hostVersion, true, Version.MAX_VERSION, true);
cu.setHost(new IRequirement[] { //
- MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, hostId, range, null, false, false, true), //
- MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false), null, false, false, false)});
+ MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, hostId, range, null, false, false, true), //
+ MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false), null, false, false, false)});
//Adds capabilities for fragment, self, and describing the flavor supported
cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
@@ -593,7 +593,7 @@ public class BundlesAction extends AbstractPublisherAction {
try {
if (bundles == null)
bundles = getBundleDescriptions(expandLocations(locations), monitor);
- generateBundleIUs(bundles, results, monitor);
+ generateBundleIUs(bundles, publisherInfo, results, monitor);
bundles = null;
} catch (OperationCanceledException e) {
return Status.CANCEL_STATUS;
@@ -659,7 +659,12 @@ public class BundlesAction extends AbstractPublisherAction {
}
}
+ //TODO remove this method
protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherResult result, IProgressMonitor monitor) {
+ generateBundleIUs(bundleDescriptions, null, result, monitor);
+ }
+
+ protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherInfo info, IPublisherResult result, IProgressMonitor monitor) {
// This assumes that hosts are processed before fragments because for each fragment the host
// is queried for the strings that should be translated.
@@ -679,7 +684,7 @@ public class BundlesAction extends AbstractPublisherAction {
}
File location = new File(bd.getLocation());
- IArtifactDescriptor ad = PublisherHelper.createArtifactDescriptor(info.getArtifactRepository(), key, location);
+ IArtifactDescriptor ad = PublisherHelper.createArtifactDescriptor(info, key, location);
processArtifactPropertiesAdvice(bundleIU, ad, info);
// Publish according to the shape on disk
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
index 892c9d5..72f059c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
@@ -605,7 +605,7 @@ public class FeaturesAction extends AbstractPublisherAction {
Collection<IArtifactKey> artifacts = featureIU.getArtifacts();
for (IArtifactKey artifactKey : artifacts) {
File file = new File(feature.getLocation());
- ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(info.getArtifactRepository(), artifactKey, file);
+ ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(info, artifactKey, file);
processArtifactPropertiesAdvice(featureIU, ad, publisherInfo);
ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
// if the artifact is a dir then zip it up.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
index 6d2e2f0..9136fa8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -88,10 +88,26 @@ public class PublisherHelper {
public static final IProvidedCapability FEATURE_CAPABILITY = MetadataFactory.createProvidedCapability(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_FEATURE, Version.createOSGi(1, 0, 0));
public static IArtifactDescriptor createArtifactDescriptor(IArtifactKey key, File pathOnDisk) {
- return createArtifactDescriptor(null, key, pathOnDisk);
+ return createArtifactDescriptor(null, null, key, pathOnDisk);
}
+ //TODO remove because the method with IPublisherInfo is more powerful
public static IArtifactDescriptor createArtifactDescriptor(IArtifactRepository artifactRepo, IArtifactKey key, File pathOnDisk) {
+ return createArtifactDescriptor(null, artifactRepo, key, pathOnDisk);
+ }
+
+ /**
+ * Creates an artifact descriptor for the given key and path.
+ * @param info the publisher info
+ * @param key the key of the artifact to publish
+ * @param pathOnDisk the path of the artifact on disk
+ * @return a new artifact descriptor
+ */
+ public static IArtifactDescriptor createArtifactDescriptor(IPublisherInfo info, IArtifactKey key, File pathOnDisk) {
+ return createArtifactDescriptor(info, info.getArtifactRepository(), key, pathOnDisk);
+ }
+
+ private static IArtifactDescriptor createArtifactDescriptor(IPublisherInfo info, IArtifactRepository artifactRepo, IArtifactKey key, File pathOnDisk) {
IArtifactDescriptor result = artifactRepo != null ? artifactRepo.createArtifactDescriptor(key) : new ArtifactDescriptor(key);
if (result instanceof ArtifactDescriptor) {
ArtifactDescriptor descriptor = (ArtifactDescriptor) result;
@@ -99,9 +115,11 @@ public class PublisherHelper {
descriptor.setProperty(IArtifactDescriptor.ARTIFACT_SIZE, Long.toString(pathOnDisk.length()));
descriptor.setProperty(IArtifactDescriptor.DOWNLOAD_SIZE, Long.toString(pathOnDisk.length()));
}
- String md5 = computeMD5(pathOnDisk);
- if (md5 != null)
- descriptor.setProperty(IArtifactDescriptor.DOWNLOAD_MD5, md5);
+ if (info == null || (info.getArtifactOptions() & IPublisherInfo.A_NO_MD5) == 0) {
+ String md5 = computeMD5(pathOnDisk);
+ if (md5 != null)
+ descriptor.setProperty(IArtifactDescriptor.DOWNLOAD_MD5, md5);
+ }
}
return result;
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
index 7ed59ee..ba0b5d4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %bundleName
Bundle-SymbolicName: org.eclipse.equinox.p2.repository.tools;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.1.qualifier
Bundle-Activator: org.eclipse.equinox.p2.internal.repository.tools.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
index 69a9bfb..0572230 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
@@ -819,6 +819,28 @@ public class Disassembler {
int length = innerClassesAttributeEntries.length;
int innerClassNameIndex, outerClassNameIndex, innerNameIndex, accessFlags;
InnerClassesAttributeEntry innerClassesAttributeEntry;
+ if (length > 1) {
+ final char[] EMPTY_CHAR_ARRAY = Utility.EMPTY_STRING.toCharArray();
+ Arrays.sort(innerClassesAttributeEntries, new Comparator<InnerClassesAttributeEntry>() {
+ public int compare(InnerClassesAttributeEntry o1, InnerClassesAttributeEntry o2) {
+ final char[] innerClassName1 = o1.getInnerClassName();
+ final char[] innerClassName2 = o2.getInnerClassName();
+ final char[] innerName1 = o1.getInnerName();
+ final char[] innerName2 = o2.getInnerName();
+ final char[] outerClassName1 = o1.getOuterClassName();
+ final char[] outerClassName2 = o2.getOuterClassName();
+ StringBuffer buffer1 = new StringBuffer();
+ buffer1.append(innerClassName1 == null ? EMPTY_CHAR_ARRAY : innerClassName1);
+ buffer1.append(innerName1 == null ? EMPTY_CHAR_ARRAY : innerName1);
+ buffer1.append(outerClassName1 == null ? EMPTY_CHAR_ARRAY : outerClassName1);
+ StringBuffer buffer2 = new StringBuffer();
+ buffer2.append(innerClassName2 == null ? EMPTY_CHAR_ARRAY : innerClassName2);
+ buffer2.append(innerName2 == null ? EMPTY_CHAR_ARRAY : innerName2);
+ buffer2.append(outerClassName2 == null ? EMPTY_CHAR_ARRAY : outerClassName2);
+ return buffer1.toString().compareTo(buffer2.toString());
+ }
+ });
+ }
for (int i = 0; i < length; i++) {
if (i != 0) {
buffer.append(Messages.disassembler_comma);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
index 63428ef..ca2653e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.repository;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.1.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.repository.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
index e2fe061..a772bee 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
@@ -232,7 +232,7 @@ public class CacheManager {
* @return A {@link File} pointing to the cache file or <code>null</code> if
* the cache file does not exist.
*/
- private File getCache(URI repositoryLocation, String prefix) {
+ protected File getCache(URI repositoryLocation, String prefix) {
File[] files = getCacheFiles(repositoryLocation, prefix);
if (files[0].exists())
return files[0];
@@ -242,7 +242,7 @@ public class CacheManager {
/**
* Returns the file corresponding to the data area to be used by the cache manager.
*/
- private File getCacheDirectory() {
+ protected File getCacheDirectory() {
return URIUtil.toFile(agentLocation.getDataArea(Activator.ID + "/cache/")); //$NON-NLS-1$
}
@@ -313,7 +313,7 @@ public class CacheManager {
bus.removeListener(busListener);
}
- private void updateCache(File cacheFile, URI remoteFile, long lastModifiedRemote, SubMonitor submonitor) throws FileNotFoundException, IOException, ProvisionException {
+ protected void updateCache(File cacheFile, URI remoteFile, long lastModifiedRemote, SubMonitor submonitor) throws FileNotFoundException, IOException, ProvisionException {
cacheFile.getParentFile().mkdirs();
File downloadDir = new File(cacheFile.getParentFile(), DOWNLOADING);
if (!downloadDir.exists())
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
index b359e26..4eeed0b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
@@ -300,13 +300,12 @@ public abstract class AbstractRepositoryManager<T> implements IRepositoryManager
*/
protected Object createExecutableExtension(IExtension extension, String element) {
IConfigurationElement[] elements = extension.getConfigurationElements();
- CoreException failure = null;
for (int i = 0; i < elements.length; i++) {
if (elements[i].getName().equals(element)) {
try {
return elements[i].createExecutableExtension("class"); //$NON-NLS-1$
} catch (CoreException e) {
- log("Error loading repository extension: " + extension.getUniqueIdentifier(), failure); //$NON-NLS-1$
+ log("Error loading repository extension: " + extension.getUniqueIdentifier(), e); //$NON-NLS-1$
return null;
}
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
index ded4824..a39151a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.touchpoint.eclipse;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.2.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.touchpoint.eclipse.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
index 1196437..7c7fef2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.touchpoint.eclipse</artifactId>
- <version>2.0.0.qualifier</version>
+ <version>2.0.2.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationWriter.java
index 7ee7ae5..be55efd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationWriter.java
@@ -12,8 +12,7 @@ package org.eclipse.equinox.internal.p2.update;
import java.io.*;
import java.net.*;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
import org.eclipse.equinox.internal.p2.core.helpers.URLUtil;
@@ -36,11 +35,10 @@ public class ConfigurationWriter implements ConfigurationConstants {
writer = new XMLWriter(output);
Map<String, String> args = new HashMap<String, String>();
- String value = configuration.getDate();
- if (value != null)
- args.put(ATTRIBUTE_DATE, value);
+ // always write out an up-to-date timestamp
+ args.put(ATTRIBUTE_DATE, Long.toString(new Date().getTime()));
- value = configuration.getSharedUR();
+ String value = configuration.getSharedUR();
if (value != null)
args.put(ATTRIBUTE_SHARED_UR, value);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/PathUtil.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/PathUtil.java
index 1a98b00..ece1efc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/PathUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/PathUtil.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -12,11 +12,12 @@ package org.eclipse.equinox.internal.p2.update;
import java.io.File;
import java.net.URL;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.*;
/**
- *
+ * Note the methods on this class have inconsistent and unintuitive behaviour. However
+ * they are unchanged for backwards compatibility. Clients should really use
+ * {@link URIUtil} instead.
* @since 1.0
*/
public class PathUtil {
@@ -64,10 +65,12 @@ public class PathUtil {
/*
* Make the given path relative to the specified root, if applicable. If not, then
* return the path as-is.
- *
- * Method similar to one from SimpleConfigurationManipulatorImpl.
*/
private static String makeRelative(IPath toRel, IPath base) {
+ //can't make relative if devices are not equal
+ final String device = toRel.getDevice();
+ if (device != base.getDevice() && (device == null || !device.equalsIgnoreCase(base.getDevice())))
+ return toRel.toOSString();
int i = base.matchingFirstSegments(toRel);
if (i == 0) {
return toRel.toOSString();
@@ -78,6 +81,7 @@ public class PathUtil {
}
if (i == toRel.segmentCount())
return "."; //$NON-NLS-1$
+ //TODO This will return mixed path with some / and some \ on windows!!
result += toRel.setDevice(null).removeFirstSegments(i).toOSString();
return result;
}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
index 867c41c..4474697 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %bundleName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.equinox.p2.ui.admin.rcp; singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.101.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.ui.admin.rcp.Activator
Bundle-RequiredExecutionEnvironment: J2SE-1.4,
CDC-1.1/Foundation-1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
index b84e33c..a2ffba8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.ui.admin.rcp</artifactId>
- <version>1.0.0.qualifier</version>
+ <version>1.0.100.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
index cbd937e..3f610cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.updatechecker;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.101.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.equinox.internal.p2.updatechecker;x-internal:=true,
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
index b523afe..fe21958 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.equinox.p2.updatechecker</artifactId>
- <version>1.1.0.qualifier</version>
+ <version>1.1.100.qualifier</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
index 8273b9e..d1ca6b1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.p2.updatesite;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.201.qualifier
Bundle-Activator: org.eclipse.equinox.internal.p2.updatesite.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
index bfba4f7..6997734 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
@@ -11,6 +11,7 @@ package org.eclipse.equinox.internal.p2.updatesite;
import java.net.URISyntaxException;
import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.JREAction;
/**
* <p>
@@ -40,6 +41,24 @@ public class UpdateSitePublisherApplication extends AbstractPublisherApplication
protected IPublisherAction[] createActions() {
LocalUpdateSiteAction action = new LocalUpdateSiteAction(source, categoryQualifier);
action.setCategoryVersion(categoryVersion);
+ if (addJRE) {
+ return new IPublisherAction[] {action, new JREAction((String) null)};
+ }
return new IPublisherAction[] {action};
}
+
+ /** by default don't generate the JRE IU */
+ private boolean addJRE = false;
+
+ /**
+ * Detect the flag -addJREIU to turn on the generation of the JREIU.
+ */
+ protected void processFlag(String flag, PublisherInfo publisherInfo) {
+ super.processFlag(flag, publisherInfo);
+ if (flag.equalsIgnoreCase("-addJREIU"))//$NON-NLS-1$
+ {
+ addJRE = true;
+ }
+ }
+
}
diff --git a/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
index a1e43d5..7ec8d5a 100644
--- a/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %help_base_plugin_name
Bundle-SymbolicName: org.eclipse.help.base; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.2.qualifier
Bundle-Activator: org.eclipse.help.internal.base.HelpBasePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BaseHelpSystem.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BaseHelpSystem.java
index 8b7507e..7c89a4a 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BaseHelpSystem.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BaseHelpSystem.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -191,7 +191,8 @@ public final class BaseHelpSystem {
public static URL resolve(String href, boolean documentOnly) {
String url = null;
- if (href == null || href.indexOf("://") != -1) //$NON-NLS-1$
+ if (href == null || href.indexOf("://") != -1 //$NON-NLS-1$
+ || isFileProtocol(href))
url = href;
else {
BaseHelpSystem.ensureWebappRunning();
@@ -210,7 +211,8 @@ public final class BaseHelpSystem {
public static URL resolve(String href, String servlet) {
String url = null;
- if (href == null || href.indexOf("://") != -1) { //$NON-NLS-1$
+ if (href == null || href.indexOf("://") != -1 //$NON-NLS-1$
+ || isFileProtocol(href)) {
url = href;
}
else {
@@ -231,6 +233,12 @@ public final class BaseHelpSystem {
}
}
+ private static boolean isFileProtocol(String href) {
+ // Test for file: or /file:
+ int index = href.indexOf("file:"); //$NON-NLS-1$
+ return ( index == 0 || (index == 1 && href.charAt(0) == '/' ));
+ }
+
public static String unresolve(URL url) {
return unresolve(url.toString());
}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
index 9ab6a3a..87e4fd0 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
@@ -25,6 +25,8 @@ import org.eclipse.osgi.util.NLS;
*/
public class HelpDisplay {
+ private String hrefOpenedFromHelpDisplay;
+
/**
* Constructor.
*/
@@ -52,6 +54,7 @@ public class HelpDisplay {
* </ul>
*/
public void displayHelpResource(String href, boolean forceExternal) {
+ setHrefOpenedFromHelpDisplay(href);
if (href.startsWith("/file")) { //$NON-NLS-1$
displayHelpResource(href.substring(1), forceExternal);
return;
@@ -250,4 +253,12 @@ public class HelpDisplay {
return null;
}
+ public String getHrefOpenedFromHelpDisplay() {
+ return hrefOpenedFromHelpDisplay;
+ }
+
+ private void setHrefOpenedFromHelpDisplay(String hrefOpenedFromHelpDisplay) {
+ this.hrefOpenedFromHelpDisplay = hrefOpenedFromHelpDisplay;
+ }
+
}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
index 8f0a7f2..75c0f97 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
@@ -36,16 +36,21 @@ public class ScopeUtils {
* Function to determine whether a topic should be shown in the toc.
* For hierarchical scopes the element itself must be in scope.
* For non hierarchical scopes if any child is in scope the element should show.
- * A toc with no topics does not display
+ * A toc with no in scope topics does not display
*/
public static boolean showInTree(IToc toc, AbstractHelpScope scope) {
- return (scope.inScope(toc) || !scope.isHierarchicalScope()) && hasInScopeDescendent(toc, scope);
+ if (scope.isHierarchicalScope() && !scope.inScope(toc)) {
+ return false;
+ }
+ return hasInScopeDescendent(toc, scope);
+
}
/*
* Function to determine whether a topic should be shown in the toc.
* For hierarchical scopes the element itself must be in scope.
* For non hierarchical scopes if any child is in scope the element should show.
+ * Leaf topics with no href do not show in the toc
*/
public static boolean showInTree(ITopic topic, AbstractHelpScope scope) {
if (scope.inScope(topic)) {
@@ -64,28 +69,38 @@ public class ScopeUtils {
return (scope.inScope(entry) || !scope.isHierarchicalScope()) && hasInScopeDescendent(entry, scope);
}
+ /*
+ * Returns true if one of the children meets the conditions
+ * necessary to be shown in the Toc tree
+ */
public static boolean hasInScopeDescendent(ITopic topic, AbstractHelpScope scope) {
ITopic[] subtopics = topic.getSubtopics();
for (int i = 0; i < subtopics.length; i++) {
- if (showInTree(subtopics[i], scope) ||
- (scope.isHierarchicalScope() && hasInScopeDescendent(subtopics[i], scope))) {
+ if (showInTree(subtopics[i], scope)) {
return true;
}
}
return false;
}
+ /*
+ * Returns true if one of the children meets the conditions
+ * necessary to be shown in the Toc tree
+ */
public static boolean hasInScopeDescendent(IToc toc, AbstractHelpScope scope) {
ITopic[] topics = toc.getTopics();
for (int i = 0; i < topics.length; i++) {
- if (showInTree(topics[i], scope) ||
- (scope.isHierarchicalScope() && hasInScopeDescendent(topics[i], scope))) {
+ if (showInTree(topics[i], scope)) {
return true;
}
}
return false;
}
+ /*
+ * Returns true if one of the children meets the conditions
+ * necessary to be shown in the Index
+ */
public static boolean hasInScopeDescendent(IIndexEntry entry,
AbstractHelpScope scope) {
ITopic[] topics = entry.getTopics();
@@ -96,8 +111,7 @@ public class ScopeUtils {
}
IIndexEntry[] entries = entry.getSubentries();
for (int e = 0; e < entries.length; e++) {
- if (showInTree(entries[e], scope) ||
- (scope.isHierarchicalScope() && hasInScopeDescendent(entries[e], scope))) {
+ if (showInTree(entries[e], scope)) {
return true;
}
}
@@ -126,12 +140,15 @@ public class ScopeUtils {
if (target == null) {
return false;
}
- return scope.inScope(target) || hasInScopeDescendent(target, scope);
+ return showInTree(target, scope);
}
return false;
}
public static boolean showInTree(IIndexSee see, AbstractHelpScope scope) {
+ if (scope.isHierarchicalScope() && !scope.inScope(see)) {
+ return false;
+ }
if (see instanceof IndexSee) {
IndexSee indexSee = (IndexSee)see;
UAElement ancestor = indexSee.getParentElement();
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
index e7350de..c32cc60 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
@@ -71,13 +71,18 @@ public class HelpURLConnection extends URLConnection {
protected String file;
protected String locale;
private static String appserverImplPluginId;
+ private boolean localOnly;
/**
* Constructor for HelpURLConnection
*/
public HelpURLConnection(URL url) {
+ this(url, false);
+ }
+
+ public HelpURLConnection(URL url, boolean localOnly) {
super(url);
-
+ this.localOnly = localOnly;
String urlFile = url.getFile();
// Strip off everything before and including the PLUGINS_ROOT
@@ -117,11 +122,12 @@ public class HelpURLConnection extends URLConnection {
throw new IOException("Resource not found."); //$NON-NLS-1$
}
- if (getFile() == null || "".equals(getFile())) { //$NON-NLS-1$
+ if (getFile() == null || "".equals(getFile()) || getFile().indexOf("..\\") >= 0) { //$NON-NLS-1$ //$NON-NLS-2$
throw new IOException("Resource not found."); //$NON-NLS-1$
}
- int helpOption=PreferenceFileHandler.getEmbeddedHelpOption();
+ int helpOption=localOnly ? PreferenceFileHandler.LOCAL_HELP_ONLY
+ : PreferenceFileHandler.getEmbeddedHelpOption();
InputStream in = null;
if (plugin != null && (helpOption==PreferenceFileHandler.LOCAL_HELP_ONLY || helpOption==PreferenceFileHandler.LOCAL_HELP_PRIORITY)) {
in = getLocalHelp(plugin);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
index 34bf6e8..1ff3019 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
@@ -26,9 +26,12 @@ public class HelpURLStreamHandler extends URLStreamHandler {
String protocol = url.getProtocol();
if (protocol.equals("help")) { //$NON-NLS-1$
return new HelpURLConnection(url);
+ } else if (protocol.equals("localhelp")) { //$NON-NLS-1$
+ return new HelpURLConnection(url, true);
}
return null;
}
+
public static URLStreamHandler getDefault() {
if (instance == null) {
instance = new HelpURLStreamHandler();
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
index a91be06..fb299c7 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
@@ -1037,7 +1037,7 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
query.append("&id=" + id); //$NON-NLS-1$
if (participantId != null)
query.append("&participantId=" + participantId); //$NON-NLS-1$
- return new URL("help", //$NON-NLS-1$
+ return new URL("localhelp", //$NON-NLS-1$
null, -1, url + query.toString(), HelpURLStreamHandler.getDefault());
} catch (MalformedURLException mue) {
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
index af5540a..68cbcb9 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -67,6 +67,11 @@ public class JettyHelpServer extends HelpServer {
// suppress Jetty INFO/DEBUG messages to stderr
Logger.getLogger("org.mortbay").setLevel(Level.WARNING); //$NON-NLS-1$
+ String hostCommandLineOverride = HelpBasePlugin.getBundleContext().getProperty("server_host"); //$NON-NLS-1$
+ if (hostCommandLineOverride != null && hostCommandLineOverride.trim().length() > 0) {
+ d.put("http.host", hostCommandLineOverride); //$NON-NLS-1$
+ }
+
JettyConfigurator.startServer(webappName, d);
} catch (Throwable t) {
setException(t);
diff --git a/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
index 6bf7c01..3f23867 100644
--- a/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %help_system_plugin_name
Bundle-SymbolicName: org.eclipse.help.ui; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.2.qualifier
Bundle-Activator: org.eclipse.help.ui.internal.HelpUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
index c17d654..703f6cb 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
@@ -102,9 +102,11 @@ public class HelpContentPreferencePage extends PreferencePage implements
currentBlock.getRemoteICviewer().getRemoteICList().removeAllRemoteICs(currentBlock.getRemoteICList());
currentBlock.getRemoteICviewer().getRemoteICList().loadDefaultPreferences();
currentBlock.restoreDefaultButtons();
- searchLocalHelpOnly.setSelection(!(new DefaultPreferenceFileHandler().isRemoteHelpOn()));
- searchLocalHelpFirst.setSelection(new DefaultPreferenceFileHandler().isRemoteHelpPreferred());
- searchLocalHelpLast.setSelection(new DefaultPreferenceFileHandler().isRemoteHelpPreferred());
+ boolean remoteHelpOn = new DefaultPreferenceFileHandler().isRemoteHelpOn();
+ boolean remoteHelpPreferred = new DefaultPreferenceFileHandler().isRemoteHelpPreferred();
+ searchLocalHelpOnly.setSelection(!remoteHelpOn);
+ searchLocalHelpFirst.setSelection(remoteHelpOn && !remoteHelpPreferred);
+ searchLocalHelpLast.setSelection(remoteHelpOn && remoteHelpPreferred);
changeListener.handleEvent(null);
}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
index ef0f20d..74e32e2 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
@@ -86,7 +86,9 @@ public class LocalHelpPage extends RootScopePage {
searchAll.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
contentTree.getTree().setEnabled(false);
- criteriaTree.getTree().setEnabled(false);
+ if (criteriaTree != null) {
+ criteriaTree.getTree().setEnabled(false);
+ }
}
});
@@ -98,7 +100,10 @@ public class LocalHelpPage extends RootScopePage {
searchSelected.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
contentTree.getTree().setEnabled(true);
- criteriaTree.getTree().setEnabled(true);
+ if (criteriaTree != null) {
+ criteriaTree.getTree().setEnabled(true);
+
+ }
}
});
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
index 655ebe3..85a92a0 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,7 +11,9 @@
package org.eclipse.help.ui.internal.views;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.core.runtime.Platform;
import org.eclipse.help.HelpSystem;
@@ -42,7 +44,6 @@ import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.osgi.util.NLS;
-
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.graphics.Font;
@@ -396,13 +397,31 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
}
return buff.length() > 0 ? buff.toString().trim() : null;
}
+
+ private class SearchTerms {
+
+ private List terms = new ArrayList();
+ private Set termSet = new HashSet();
+ public void add(String term) {
+ String lowerCaseTerm = term.toLowerCase();
+ // Do not allow duplicates
+ if (!termSet.contains(lowerCaseTerm)) {
+ termSet.add(lowerCaseTerm);
+ terms.add(term);
+ }
+ }
+
+ public String[] toArray() {
+ return (String[]) terms.toArray(new String[terms.size()]);
+ }
+ }
/*
* Used for both dynamic help and to get a useful title
*/
private String[] computeSearchTerms(Control c) {
Composite parent = c.getParent();
- List searchTerms = new ArrayList();
+ SearchTerms searchTerms = new SearchTerms();
while (parent != null) {
Object data = parent.getData();
if (data instanceof IWizardContainer) {
@@ -451,7 +470,7 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
}
parent = parent.getParent();
}
- return (String[]) searchTerms.toArray(new String[searchTerms.size()]);
+ return (String[]) searchTerms.toArray();
}
private String getPageName(Control focusControl, Object page) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
index a4dde15..afeb608 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %help_webapp_plugin_name
Bundle-SymbolicName: org.eclipse.help.webapp;singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.2.qualifier
Bundle-Activator: org.eclipse.help.internal.webapp.HelpWebappPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.help.webapp/build.properties b/eclipse/plugins/org.eclipse.help.webapp/build.properties
index ba224f8..807ba3c 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/build.properties
+++ b/eclipse/plugins/org.eclipse.help.webapp/build.properties
@@ -10,7 +10,8 @@
###############################################################################
source.. = src/
-src.includes=about.html
+src.includes = about.html,\
+ schema/
customBuildCallbacks=buildJSPs.xml
bin.includes = plugin.xml,\
.,\
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
index 2fbfd00..06a5602 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
@@ -119,7 +119,7 @@ public class LayoutData extends RequestData {
else {
TocData tocData = new TocData(context, request, response);
String topic = tocData.getSelectedTopic();
- if (topic == null || !UrlUtil.isValidTopicURL(topic)) {
+ if (topic == null || !UrlUtil.isValidTopicParamOrWasOpenedFromHelpDisplay(topic)) {
return UrlUtil.getHelpURL(preferences.getHelpHome());
}
return topic;
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
index 45d247c..83d0d92 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
@@ -144,13 +144,24 @@ public class UrlUtil {
}
/**
- * Tests to see if this path is permitted in the topic parameter passed in a help URL
+ * Tests to see if the path specified in a topic parameter can be opened in
+ * the content frame. See Bug 233466 for an explanation of why in general we do
+ * do not want to open external sites in the content frame.
+ *
+ * If the preference org.eclipse.help.base/restrictTopicParameter is false any
+ * path is permitted. Any href which was just opened from the help display is
+ * also permitted, this is required for cheat sheets and intro. Otherwise the
+ * path is permitted only if it does not contain a protocol.
* @param path the path passed as a ?topic parameter. May not be null.
- * @return true unless topic parameters are restricted and the path has a protocol specified
+ * @return true if the conditions above are met.
*/
- public static boolean isValidTopicURL(String path) {
- if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_INFOCENTER
- && new WebappPreferences().isRestrictTopicParameter()) {
+ public static boolean isValidTopicParamOrWasOpenedFromHelpDisplay(String path) {
+ // Topics opened via the help display ( including cheat sheets and intro )
+ // are always valid
+ if (path.equals(BaseHelpSystem.getHelpDisplay().getHrefOpenedFromHelpDisplay())) {
+ return true;
+ }
+ if (new WebappPreferences().isRestrictTopicParameter()) {
if (path.indexOf("://") >= 0) { //$NON-NLS-1$
return false;
}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ChildLinkInserter.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ChildLinkInserter.java
index c2bb0ad..ba2570d 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ChildLinkInserter.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ChildLinkInserter.java
@@ -42,9 +42,7 @@ public class ChildLinkInserter {
}
public void addContents(String encoding) throws IOException {
- ITopic topic = getTopic();
- if (topic == null || topic.getHref() == null) return;
- ITopic[] subtopics = topic.getSubtopics();
+ ITopic[] subtopics = getSubtopics();
if (subtopics.length == 0) {
return;
}
@@ -77,20 +75,22 @@ public class ChildLinkInserter {
}
}
- private ITopic getTopic() {
+ private ITopic[] getSubtopics() {
String locale = UrlUtil.getLocale(req, null);
String pathInfo = req.getPathInfo();
String servletPath = req.getServletPath();
- if ("/nav".equals(servletPath)) return null; //$NON-NLS-1$
- String topicPath= servletPath + pathInfo;
- int[] path = UrlUtil.getTopicPath(topicPath, locale );
- if (path == null || path.length == 1) return null;
- Toc[] tocs = HelpPlugin.getTocManager().getTocs(locale.toString());
- ITopic topic = tocs[path[0]].getTopics()[path[1]];
- for (int i = 2; i < path.length; i++) {
- topic = topic.getSubtopics()[path[i]];
+ if ("/nav".equals(servletPath)) return new ITopic[0]; //$NON-NLS-1$
+ Toc[] tocs = HelpPlugin.getTocManager().getTocs(locale);
+ for (int i = 0; i < tocs.length; i++) {
+ if (pathInfo.equals(tocs[i].getTopic())) {
+ return tocs[i].getTopics();
+ }
+ ITopic topic = tocs[i].getTopic(pathInfo);
+ if (topic != null) {
+ return topic.getSubtopics();
+ }
}
- return topic;
+ return new ITopic[0];
}
private String getBackpath(String path) {
@@ -106,16 +106,14 @@ public class ChildLinkInserter {
}
public void addStyle() throws UnsupportedEncodingException, IOException {
- ITopic topic = getTopic();
- if (topic != null && topic.getHref() != null) {
- ITopic[] subtopics = topic.getSubtopics();
- for (int i = 0; i < subtopics.length; ++i) {
- if (ScopeUtils.showInTree(subtopics[i], scope)) {
- out.write(HAS_CHILDREN.getBytes(UTF_8));
- return;
- }
+ ITopic[] subtopics = getSubtopics();
+ for (int i = 0; i < subtopics.length; ++i) {
+ if (ScopeUtils.showInTree(subtopics[i], scope)) {
+ out.write(HAS_CHILDREN.getBytes(UTF_8));
+ return;
}
}
+
out.write(NO_CHILDREN.getBytes(UTF_8));
}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
index 06dfbce..26211e5 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
@@ -92,8 +92,7 @@ public class EclipseConnector {
return;
}
String lowerCaseuRL = url.toLowerCase(Locale.ENGLISH);
- if (lowerCaseuRL.startsWith("file:") //$NON-NLS-1$
- || lowerCaseuRL.startsWith("jar:") //$NON-NLS-1$
+ if (lowerCaseuRL.startsWith("jar:") //$NON-NLS-1$
|| lowerCaseuRL.startsWith("platform:")) { //$NON-NLS-1$
int i = url.indexOf('?');
if (i != -1)
@@ -188,7 +187,11 @@ public class EclipseConnector {
}
transferContent(is, out);
- out.close();
+ try {
+ out.close();
+ } catch (IOException ioe) {
+ // Bug 314324 - do not report an error
+ }
is.close();
} catch (Exception e) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/FramesetFilter.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/FramesetFilter.java
index f60372c..01d0c4f 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/FramesetFilter.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/FramesetFilter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
package org.eclipse.help.internal.webapp.servlet;
import java.io.*;
+import java.net.URLEncoder;
import javax.servlet.http.*;
@@ -31,6 +32,7 @@ public class FramesetFilter implements IFilter {
*/
public OutputStream filter(HttpServletRequest req, OutputStream out) {
String uri = req.getRequestURI();
+ String url = req.getPathInfo();
if (uri == null) {
return out;
}
@@ -64,7 +66,15 @@ public class FramesetFilter implements IFilter {
} else {
script.append("index.jsp?topic="); //$NON-NLS-1$
}
- script.append(req.getPathInfo());
+
+ try{
+ // Bug 317055 - [webapp] URLEncode url requests from local users
+ url = URLEncoder.encode(url, "UTF-8"); //$NON-NLS-1$
+ script.append(url);
+ } catch (UnsupportedEncodingException uee){
+ return out;
+ }
+
script.append(scriptPart3);
try {
return new FilterHTMLHeadOutputStream(out, script.toString()
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
index e25da94..2a0e40d 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.apt.core; singleton:=true
-Bundle-Version: 3.3.400.qualifier
+Bundle-Version: 3.3.401.qualifier
Bundle-Localization: plugin
Export-Package: com.sun.mirror.apt,
com.sun.mirror.declaration,
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html b/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
index 82f3e16..9fa837b 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
@@ -12,6 +12,18 @@
<h1>Eclipse Platform Build Notes (3.6)<br>
JDT Annotation Processing</h1>
+<p>Integration Build (July 26, 2010, 11:09 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320195">Bug 320195</a>. Eclipse hangs when processing annotation (FIXED)<br>
+ </p>
+
+<p>Integration Build (July 06, 2010, 9:58 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313324">Bug 313324</a>. Suspicious fall-through (NEW)<br>
+ </p>
+
<p>Integration Build (April 20, 2010, 11:23 p.m.)</p>
<p>Problem reports updated</p>
<p>
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/declaration/AnnotationValueImpl.java b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/declaration/AnnotationValueImpl.java
index 21e9533..c573a6c 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/declaration/AnnotationValueImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/declaration/AnnotationValueImpl.java
@@ -105,7 +105,8 @@ public class AnnotationValueImpl implements EclipseMirrorObject, AnnotationValue
break;
case ANNOTATION_ELEMENT:
final AnnotationElementDeclarationImpl element = (AnnotationElementDeclarationImpl)_parent;
- astNode = element.getAstNodeForDefault();
+ astNode = element.getAstNodeForDefault();
+ break;
default:
throw new IllegalStateException(); // should never reach this point.
}
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
index 10190b4..4f9cccd 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.apt.pluggable.core;singleton:=true
-Bundle-Version: 1.0.300.qualifier
+Bundle-Version: 1.0.301.qualifier
Bundle-Activator: org.eclipse.jdt.internal.apt.pluggable.core.Apt6Plugin
Bundle-Vendor: %providerName
Require-Bundle: org.eclipse.core.runtime,
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeFilerImpl.java b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeFilerImpl.java
index 2cfca87..a89aed2 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeFilerImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeFilerImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2009 BEA Systems, Inc. and others
+ * Copyright (c) 2007 - 2010 BEA Systems, Inc. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.HashSet;
import java.util.Set;
import javax.annotation.processing.Filer;
+import javax.annotation.processing.FilerException;
import javax.lang.model.element.Element;
import javax.tools.FileObject;
import javax.tools.JavaFileObject;
@@ -31,6 +32,7 @@ import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.apt.core.internal.AptCompilationParticipant;
import org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedSourceFolderManager;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.apt.pluggable.core.Apt6Plugin;
@@ -90,8 +92,10 @@ public class IdeFilerImpl implements Filer {
throw new IllegalArgumentException("Relative name is zero length");
}
IFile file = getFileFromOutputLocation(location, pkg, relativeName);
+ if (AptCompilationParticipant.getInstance().getJava6GeneratedFiles().contains(file)) {
+ throw new FilerException("Source file already created: " + file.getFullPath()); //$NON-NLS-1$
+ }
- //TODO: check whether file has already been generated in this run
Set<IFile> parentFiles;
if (originatingElements != null && originatingElements.length > 0) {
parentFiles = new HashSet<IFile>(originatingElements.length);
@@ -120,7 +124,11 @@ public class IdeFilerImpl implements Filer {
if (null == name) {
throw new IllegalArgumentException("Name is null");
}
- //TODO: check whether file has already been generated in this run
+ IFile file = _env.getAptProject().getGeneratedFileManager().getIFileForTypeName(name.toString());
+ if (AptCompilationParticipant.getInstance().getJava6GeneratedFiles().contains(file)) {
+ throw new FilerException("Source file already created: " + file.getFullPath()); //$NON-NLS-1$
+ }
+
Set<IFile> parentFiles = Collections.emptySet();
if (originatingElements != null && originatingElements.length > 0) {
parentFiles = new HashSet<IFile>(originatingElements.length);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/.settings/.api_filters b/eclipse/plugins/org.eclipse.jdt.core/.settings/.api_filters
deleted file mode 100644
index fc466c9..0000000
--- a/eclipse/plugins/org.eclipse.jdt.core/.settings/.api_filters
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jdt.core" version="2">
- <resource path="dom/org/eclipse/jdt/core/dom/ASTParser.java" type="org.eclipse.jdt.core.dom.ASTParser">
- <filter id="1142947843">
- <message_arguments>
- <message_argument value="3.5.2"/>
- <message_argument value="setIgnoreMethodBodies(boolean)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="model/org/eclipse/jdt/core/ICompilationUnit.java" type="org.eclipse.jdt.core.ICompilationUnit">
- <filter id="1210056707">
- <message_arguments>
- <message_argument value="3.5.2"/>
- <message_argument value="IGNORE_METHOD_BODIES"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="search/org/eclipse/jdt/core/search/TypeNameMatch.java" type="org.eclipse.jdt.core.search.TypeNameMatch">
- <filter id="336744520">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.search.TypeNameMatch"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
index 37df549..5fd845e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.jdt.core.JavaCore
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
index 48f7ba8..b2415d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
@@ -15,7 +15,7 @@
#Format: compiler.name = word1 word2 word3
compiler.name = Eclipse Compiler for Java(TM)
#Format: compiler.version = 0.XXX[, other words (don't forget the comma if adding other words)]
-compiler.version = 0.A58, 3.6.0
+compiler.version = 0.A68_R36x, 3.6.1
compiler.copyright = Copyright IBM Corp 2000, 2010. All rights reserved.
### progress
diff --git a/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html b/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
index bfa4eff..3398d55 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -40,6 +40,170 @@
</td>
</tr>
</table>
+<a name="v_A68_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - September 1, 2010 - 3.6.1
+<br>Project org.eclipse.jdt.core v_A68_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A68_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324154">324154</a>
+NPE in FlowContext while building
+
+<a name="v_A67_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - September 1, 2010
+<br>Project org.eclipse.jdt.core v_A67_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A67_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320754">320754</a>
+[formatter] formatter:off/on tags does not work correctly
+
+<a name="v_A66_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - August 27, 2010
+<br>Project org.eclipse.jdt.core v_A66_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A66_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
+[1.5][compiler] Compiler fails to diagnose name clash
+
+<a name="v_A65_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - August 25, 2010
+<br>Project org.eclipse.jdt.core v_A65_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A65_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264">317264</a>
+[search] Refactoring is impossible with commons.lang added to project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926">321926</a>
+Erroneously deems null check conditional branch to be dead code, and produces incorrect bytecode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308402">308402</a>
+[index] PatternSearchJob ignores participant index entries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320802">320802</a>
+ASTParser.createASTs(..) fails silently on multiple missing parameter types.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154">322154</a>
+Compiler bug that does not occur in Galileo 3.5.2
+
+<a name="v_A64_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - August 11, 2010
+<br>Project org.eclipse.jdt.core v_A64_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A64_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001">322001</a>
+[1.5][compiler] Name Clash error occurs
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320167">320167</a>
+Auto-Activation works only once
+
+<a name="v_A63_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - July 28, 2010
+<br>Project org.eclipse.jdt.core v_A63_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A63_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320414">320414</a>
+Compiler produces incorrect bytecode for null pointer check
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603">319603</a>
+[1.5][compiler] eclipse fails with 2 generics methods with the same name while javac succeeds
+
+<a name="v_A62_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - July 21, 2010
+<br>Project org.eclipse.jdt.core v_A62_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A62_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318020">318020</a>
+[compiler] wrong initialization flow info with if (true) throw... pattern in else block
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319900">319900</a>
+StringLiteral#setLiteralValue needlessly escapes apostrophes (')
+
+<a name="v_A61_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - July 14, 2010
+<br>Project org.eclipse.jdt.core v_A61_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A61_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306464">306464</a>
+NPE in ProblemReporter.missingTypeInMethod(ProblemReporter.java:5113)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317841">317841</a>
+[incremental build] unnecessary 'structural changes' due to annotation parameters
+
+<a name="v_A60_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - July 7, 2010
+<br>Project org.eclipse.jdt.core v_A60_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A60_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153">313153</a>
+Too many blocked "Refreshing external folders" jobs (FUP of bug 302295)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317468">317468</a>
+Adding elements to an enum body with trailing comma generates bad code
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313668">313668</a>
+[search] Call hierarchy doesn't show all calls of the method in workspace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317972">317972</a>
+Fix for wrong usages of affect* and effect*
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316889">316889</a>
+Internal compiler error: java.lang.NullPointerException with a specific use of recursive generics
+
+<a name="v_A59_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - June 24, 2010
+<br>Project org.eclipse.jdt.core v_A59_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A59_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313651">313651</a>
+[formatter] format comments (differs between paste and save action)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978">315978</a>
+Big regression, eclipse compiles my workspace in 3 mins instead of few seconds
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315732">315732</a>
+[formatter] NullPointerException (always) on inserting a custom template proposal into java code when "Use code formatter" is on
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456">316456</a>
+[1.5][compiler] Annotation values can access private class members
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314830">314830</a>
+[compiler] Switching on a null expression doesn't always throw NullPointerException
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825">313825</a>
+Erroneous local variable's problems reported at surrounding ParenthesizedExpression
+
<a name="v_A58"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index 4c3fd62..94a9110 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -68,6 +68,7 @@ import org.eclipse.jdt.internal.core.BinaryTypeConverter;
import org.eclipse.jdt.internal.core.SearchableEnvironment;
import org.eclipse.jdt.internal.core.SourceTypeElementInfo;
import org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment;
+import org.eclipse.jdt.internal.core.search.matching.MatchLocator;
import org.eclipse.jdt.internal.core.util.Messages;
/**
@@ -498,6 +499,8 @@ public final class CompletionEngine
private final static int SUPERTYPE = 1;
private final static int SUBTYPE = 2;
+ private final static char[] DOT_ENUM = ".enum".toCharArray(); //$NON-NLS-1$
+
int expectedTypesPtr = -1;
TypeBinding[] expectedTypes = new TypeBinding[1];
int expectedTypesFilter;
@@ -613,6 +616,7 @@ public final class CompletionEngine
public void setFieldIndex(int depth){/* empty */}
public int sourceEnd() { return 0; }
public int sourceStart() { return 0; }
+ public TypeBinding expectedType() { return null; }
};
private int foundTypesCount;
@@ -11721,6 +11725,14 @@ public final class CompletionEngine
}
}
}
+
+ // filter packages ending with enum for projects above 1.5
+ // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264
+ if (MatchLocator.SHOULD_FILTER_ENUM && this.compilerOptions.sourceLevel >= ClassFileConstants.JDK1_5 &&
+ CharOperation.endsWith(givenPkgName, DOT_ENUM)) { //note: it should be .enum and not just enum
+ return true;
+ }
+
return false;
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
index 371e85e..8ce36b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -2097,7 +2097,7 @@ public static final int indexOf(final char[] toBeFound, final char[] array, fina
public static final int indexOf(final char[] toBeFound, final char[] array, final boolean isCaseSensitive, final int start, final int end) {
final int arrayLength = end;
final int toBeFoundLength = toBeFound.length;
- if (toBeFoundLength > arrayLength) return -1;
+ if (toBeFoundLength > arrayLength || start < 0) return -1;
if (toBeFoundLength == 0) return 0;
if (toBeFoundLength == arrayLength) {
if (isCaseSensitive) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
index c193e9b..5c4c539 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
@@ -244,6 +244,7 @@ private static void checkAlternateBinding(BlockScope scope, Expression receiver,
public void setFieldIndex(int depth){ /* ignore */}
public int sourceStart() { return 0; }
public int sourceEnd() { return 0; }
+ public TypeBinding expectedType() { return invocationSite.expectedType(); }
};
MethodBinding bindingIfNoCast;
if (binding.isConstructor()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
index b35f4bb..b9e19f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
@@ -315,7 +315,7 @@ public void finalizeProblems() {
IrritantSet tokenIrritants = CompilerOptions.warningTokenToIrritants(cst.stringValue());
if (tokenIrritants != null
&& !tokenIrritants.areAllSet() // no complaint against @SuppressWarnings("all")
- && options.isAnyEnabled(tokenIrritants) // if irritant is effectevely enabled
+ && options.isAnyEnabled(tokenIrritants) // if irritant is effectively enabled
&& (foundIrritants[iSuppress] == null || !foundIrritants[iSuppress].isAnySet(tokenIrritants))) { // if irritant had no matching problem
if (unusedWarningTokenIsWarning) {
int start = value.sourceStart, end = value.sourceEnd;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
index 3228d46..3373f89 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
@@ -101,7 +101,11 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
actionInfo.addPotentialNullInfoFrom(
condInfo.initsWhenTrue().unconditionalInits()));
}
-
+ if (loopingContext.hasEscapingExceptions()) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926
+ FlowInfo loopbackFlowInfo = flowInfo.copy();
+ loopbackFlowInfo.mergedWith(condInfo.initsWhenTrue().unconditionalCopy());
+ loopingContext.simulateThrowAfterLoopBack(loopbackFlowInfo);
+ }
// end of loop
FlowInfo mergedInfo =
FlowInfo.mergedOptimizedBranches(
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
index 1b92645..300fd48 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
@@ -194,7 +194,13 @@ public class ForStatement extends Statement {
incrementContext.complainOnDeferredNullChecks(currentScope,
actionInfo);
}
-
+ if (loopingContext.hasEscapingExceptions()) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926
+ FlowInfo loopbackFlowInfo = flowInfo.copy();
+ if (this.continueLabel != null) { // we do get to the bottom
+ loopbackFlowInfo.mergedWith(actionInfo.unconditionalCopy());
+ }
+ loopingContext.simulateThrowAfterLoopBack(loopbackFlowInfo);
+ }
//end of loop
FlowInfo mergedInfo = FlowInfo.mergedOptimizedBranches(
(loopingContext.initsOnBreak.tagBits &
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
index fd0f779..b2551e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
@@ -65,7 +65,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
if (isConditionOptimizedFalse) {
thenFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
}
- FlowInfo elseFlowInfo = conditionFlowInfo.initsWhenFalse();
+ FlowInfo elseFlowInfo = conditionFlowInfo.initsWhenFalse().copy();
if (isConditionOptimizedTrue) {
elseFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
}
@@ -127,7 +127,8 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
elseFlowInfo,
isConditionOptimizedFalse,
true /*if(true){ return; } fake-reachable(); */,
- flowInfo);
+ flowInfo,
+ this);
this.mergedInitStateIndex = currentScope.methodScope().recordInitializationStates(mergedInfo);
return mergedInfo;
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
index e7a614b..afa81d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
@@ -549,6 +549,9 @@ public void setExpectedType(TypeBinding expectedType) {
public void setFieldIndex(int depth) {
// ignore for here
}
+public TypeBinding expectedType() {
+ return this.expectedType;
+}
public void traverse(ASTVisitor visitor, BlockScope blockScope) {
if (visitor.visit(this, blockScope)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
index 6b71e11..3378343 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
@@ -93,7 +93,9 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
} else if (localBinding.useFlag == LocalVariableBinding.UNUSED) {
localBinding.useFlag = LocalVariableBinding.FAKE_USED;
}
- checkNPE(currentScope, flowContext, flowInfo, true);
+ if (needValue) {
+ checkNPE(currentScope, flowContext, flowInfo, true);
+ }
}
if (needValue) {
@@ -190,12 +192,14 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
if (!flowInfo.isDefinitelyAssigned(localBinding = (LocalVariableBinding) this.binding)) {
currentScope.problemReporter().uninitializedLocalVariable(localBinding, this);
}
- if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+ if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
localBinding.useFlag = LocalVariableBinding.USED;
} else if (localBinding.useFlag == LocalVariableBinding.UNUSED) {
localBinding.useFlag = LocalVariableBinding.FAKE_USED;
}
- checkNPE(currentScope, flowContext, flowInfo, true);
+ if (needValue) {
+ checkNPE(currentScope, flowContext, flowInfo, true);
+ }
}
if (needValue) {
manageEnclosingInstanceAccessIfNecessary(currentScope, flowInfo);
@@ -214,7 +218,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
public void checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, boolean checkString) {
// cannot override localVariableBinding because this would project o.m onto o when
- // analysing assignments
+ // analyzing assignments
if ((this.bits & ASTNode.RestrictiveFlagMASK) == Binding.LOCAL) {
LocalVariableBinding local = (LocalVariableBinding) this.binding;
if (local != null &&
@@ -225,7 +229,7 @@ public void checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInf
FlowContext.MAY_NULL, flowInfo);
}
flowInfo.markAsComparedEqualToNonNull(local);
- // from thereon it is set
+ // from thereon it is set
if (flowContext.initsOnFinally != null) {
flowContext.initsOnFinally.markAsComparedEqualToNonNull(local);
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
index 4936b87..ec7212e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
@@ -191,4 +191,12 @@ public Constant resolveCase(BlockScope scope, TypeBinding testType, SwitchStatem
resolve(scope);
return Constant.NotAConstant;
}
+/**
+ * Implementation of {@link org.eclipse.jdt.internal.compiler.lookup.InvocationSite#expectedType}
+ * suitable at this level. Subclasses should override as necessary.
+ * @see org.eclipse.jdt.internal.compiler.lookup.InvocationSite#expectedType()
+ */
+public TypeBinding expectedType() {
+ return null;
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
index 0d2e13f..5a71646 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ public class SwitchStatement extends Statement {
int mergedInitStateIndex = -1;
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
- try {
+ try {
flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
SwitchFlowContext switchContext =
new SwitchFlowContext(flowContext, this, (this.breakLabel = new BranchLabel()));
@@ -94,8 +94,8 @@ public class SwitchStatement extends Statement {
}
final TypeBinding resolvedTypeBinding = this.expression.resolvedType;
- if (this.caseCount > 0 && resolvedTypeBinding.isEnum()) {
- final SourceTypeBinding sourceTypeBinding = this.scope.classScope().referenceContext.binding;
+ if (resolvedTypeBinding.isEnum()) {
+ final SourceTypeBinding sourceTypeBinding = currentScope.classScope().referenceContext.binding;
this.synthetic = sourceTypeBinding.addSyntheticMethodForSwitchEnum(resolvedTypeBinding);
}
// if no default case, then record it may jump over the block directly to the end
@@ -111,9 +111,9 @@ public class SwitchStatement extends Statement {
this.mergedInitStateIndex =
currentScope.methodScope().recordInitializationStates(mergedInfo);
return mergedInfo;
- } finally {
- if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
- }
+ } finally {
+ if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
+ }
}
/**
@@ -124,7 +124,7 @@ public class SwitchStatement extends Statement {
*/
public void generateCode(BlockScope currentScope, CodeStream codeStream) {
- try {
+ try {
if ((this.bits & IsReachable) == 0) {
return;
}
@@ -133,36 +133,37 @@ public class SwitchStatement extends Statement {
// prepare the labels and constants
this.breakLabel.initialize(codeStream);
CaseLabel[] caseLabels = new CaseLabel[this.caseCount];
- boolean needSwitch = this.caseCount != 0;
- for (int i = 0; i < this.caseCount; i++) {
+ for (int i = 0, max = this.caseCount; i < max; i++) {
this.cases[i].targetLabel = (caseLabels[i] = new CaseLabel(codeStream));
caseLabels[i].tagBits |= BranchLabel.USED;
}
CaseLabel defaultLabel = new CaseLabel(codeStream);
- if (needSwitch) defaultLabel.tagBits |= BranchLabel.USED;
+ final boolean hasCases = this.caseCount != 0;
+ if (hasCases) defaultLabel.tagBits |= BranchLabel.USED;
if (this.defaultCase != null) {
this.defaultCase.targetLabel = defaultLabel;
}
final TypeBinding resolvedType = this.expression.resolvedType;
+ boolean valueRequired = false;
if (resolvedType.isEnum()) {
- if (needSwitch) {
- // go through the translation table
- codeStream.invoke(Opcodes.OPC_invokestatic, this.synthetic, null /* default declaringClass */);
- this.expression.generateCode(currentScope, codeStream, true);
- // get enum constant ordinal()
- codeStream.invokeEnumOrdinal(resolvedType.constantPoolName());
- codeStream.iaload();
- } else {
- // no need to go through the translation table
- this.expression.generateCode(currentScope, codeStream, false);
+ // go through the translation table
+ codeStream.invoke(Opcodes.OPC_invokestatic, this.synthetic, null /* default declaringClass */);
+ this.expression.generateCode(currentScope, codeStream, true);
+ // get enum constant ordinal()
+ codeStream.invokeEnumOrdinal(resolvedType.constantPoolName());
+ codeStream.iaload();
+ if (!hasCases) {
+ // we can get rid of the generated ordinal value
+ codeStream.pop();
}
} else {
+ valueRequired = this.expression.constant == Constant.NotAConstant || hasCases;
// generate expression
- this.expression.generateCode(currentScope, codeStream, needSwitch); // value required (switch without cases)
+ this.expression.generateCode(currentScope, codeStream, valueRequired);
}
// generate the appropriate switch table/lookup bytecode
- if (needSwitch) {
+ if (hasCases) {
int[] sortedIndexes = new int[this.caseCount];
// we sort the keys to be able to generate the code for tableswitch or lookupswitch
for (int i = 0; i < this.caseCount; i++) {
@@ -194,6 +195,8 @@ public class SwitchStatement extends Statement {
codeStream.lookupswitch(defaultLabel, this.constants, sortedIndexes, caseLabels);
}
codeStream.updateLastRecordedEndPC(this.scope, codeStream.position);
+ } else if (valueRequired) {
+ codeStream.pop();
}
// generate the switch block statements
@@ -234,9 +237,9 @@ public class SwitchStatement extends Statement {
defaultLabel.place();
}
codeStream.recordPositionsFrom(pc, this.sourceStart);
- } finally {
- if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
- }
+ } finally {
+ if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
+ }
}
public StringBuffer printStatement(int indent, StringBuffer output) {
@@ -258,8 +261,7 @@ public class SwitchStatement extends Statement {
}
public void resolve(BlockScope upperScope) {
-
- try {
+ try {
boolean isEnumSwitch = false;
TypeBinding expressionType = this.expression.resolveType(upperScope);
if (expressionType != null) {
@@ -285,7 +287,7 @@ public class SwitchStatement extends Statement {
}
}
if (this.statements != null) {
- this.scope = /*explicitDeclarations == 0 ? upperScope : */new BlockScope(upperScope);
+ this.scope = new BlockScope(upperScope);
int length;
// collection of cases is too big but we will only iterate until caseCount
this.cases = new CaseStatement[length = this.statements.length];
@@ -355,9 +357,9 @@ public class SwitchStatement extends Statement {
}
}
}
- } finally {
- if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
- }
+ } finally {
+ if (this.scope != null) this.scope.enclosingCase = null; // no longer inside switch case block
+ }
}
public void traverse(
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
index 00db5c9..4362a9a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
@@ -137,6 +137,13 @@ public class WhileStatement extends Statement {
actionInfo.unconditionalInits()).
addInitializationsFrom(condInfo.initsWhenFalse());
}
+ if (loopingContext.hasEscapingExceptions()) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926
+ FlowInfo loopbackFlowInfo = flowInfo.copy();
+ if (this.continueLabel != null) { // we do get to the bottom
+ loopbackFlowInfo.mergedWith(actionInfo.unconditionalCopy());
+ }
+ loopingContext.simulateThrowAfterLoopBack(loopbackFlowInfo);
+ }
}
// end of loop
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/AnnotationInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/AnnotationInfo.java
index 109bc66..13f27ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/AnnotationInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/AnnotationInfo.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2009 BEA Systems, Inc.
+ * Copyright (c) 2005, 2010 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,15 +7,19 @@
*
* Contributors:
* tyeung at bea.com - initial API and implementation
+ * olivier_thomann at ca.ibm.com - add hashCode() and equals(..) methods
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.classfmt;
+import java.util.Arrays;
+
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
import org.eclipse.jdt.internal.compiler.codegen.ConstantPool;
import org.eclipse.jdt.internal.compiler.env.*;
import org.eclipse.jdt.internal.compiler.impl.*;
import org.eclipse.jdt.internal.compiler.lookup.TagBits;
+import org.eclipse.jdt.internal.compiler.util.Util;
public class AnnotationInfo extends ClassFileStruct implements IBinaryAnnotation {
/** The name of the annotation type */
@@ -376,4 +380,30 @@ public String toString() {
}
return buffer.toString();
}
+public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Util.hashCode(this.pairs);
+ result = prime * result + CharOperation.hashCode(this.typename);
+ return result;
+}
+public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ AnnotationInfo other = (AnnotationInfo) obj;
+ if (!Arrays.equals(this.pairs, other.pairs)) {
+ return false;
+ }
+ if (!Arrays.equals(this.typename, other.typename)) {
+ return false;
+ }
+ return true;
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
index 4e41433..d2a2b62 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -974,8 +974,27 @@ private boolean hasStructuralAnnotationChanges(IBinaryAnnotation[] currentAnnota
for (int j = 0; j < currentPairsLength; j++) {
if (!CharOperation.equals(currentPairs[j].getName(), otherPairs[j].getName()))
return true;
- if (!currentPairs[j].getValue().equals(otherPairs[j].getValue()))
+ final Object value = currentPairs[j].getValue();
+ final Object value2 = otherPairs[j].getValue();
+ if (value instanceof Object[]) {
+ Object[] currentValues = (Object[]) value;
+ if (value2 instanceof Object[]) {
+ Object[] currentValues2 = (Object[]) value2;
+ final int length = currentValues.length;
+ if (length != currentValues2.length) {
+ return true;
+ }
+ for (int n = 0; n < length; n++) {
+ if (!currentValues[n].equals(currentValues2[n])) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+ } else if (!value.equals(value2)) {
return true;
+ }
}
}
return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ElementValuePairInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ElementValuePairInfo.java
index 188051b..5a40c0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ElementValuePairInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ElementValuePairInfo.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2010 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,9 +7,14 @@
*
* Contributors:
* tyeung at bea.com - initial API and implementation
+ * olivier_thomann at ca.ibm.com - add hashCode() and equals(..) methods
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.classfmt;
+import java.util.Arrays;
+
+import org.eclipse.jdt.core.compiler.CharOperation;
+
public class ElementValuePairInfo implements org.eclipse.jdt.internal.compiler.env.IBinaryElementValuePair {
static final ElementValuePairInfo[] NoMembers = new ElementValuePairInfo[0];
@@ -45,4 +50,34 @@ public String toString() {
}
return buffer.toString();
}
+public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + CharOperation.hashCode(this.name);
+ result = prime * result + ((this.value == null) ? 0 : this.value.hashCode());
+ return result;
+}
+public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ElementValuePairInfo other = (ElementValuePairInfo) obj;
+ if (!Arrays.equals(this.name, other.name)) {
+ return false;
+ }
+ if (this.value == null) {
+ if (other.value != null) {
+ return false;
+ }
+ } else if (!this.value.equals(other.value)) {
+ return false;
+ }
+ return true;
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/ClassSignature.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/ClassSignature.java
index 6c68a09..f3e4685 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/ClassSignature.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/ClassSignature.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2010 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,9 +7,14 @@
*
* Contributors:
* tyeung at bea.com - initial API and implementation
+ * olivier_thomann at ca.ibm.com - add hashCode() and equals(..) methods
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.env;
+import java.util.Arrays;
+
+import org.eclipse.jdt.core.compiler.CharOperation;
+
/**
* Represents a class reference in the class file.
* One of the possible results for the default value of an annotation method or an element value pair.
@@ -35,4 +40,25 @@ public String toString() {
buffer.append(".class"); //$NON-NLS-1$
return buffer.toString();
}
+
+public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + CharOperation.hashCode(this.className);
+ return result;
+}
+
+public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ClassSignature other = (ClassSignature) obj;
+ return Arrays.equals(this.className, other.className);
+}
}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/EnumConstantSignature.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/EnumConstantSignature.java
index 66a8434..437df94 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/EnumConstantSignature.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/env/EnumConstantSignature.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2010 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,9 +7,13 @@
*
* Contributors:
* tyeung at bea.com - initial API and implementation
+ * olivier_thomann at ca.ibm.com - add hashCode() and equals(..) methods
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.env;
+import java.util.Arrays;
+
+import org.eclipse.jdt.core.compiler.CharOperation;
/**
* Represents a reference to a enum constant in the class file.
* One of the possible results for the default value of an annotation method.
@@ -45,4 +49,29 @@ public String toString() {
buffer.append(this.constName);
return buffer.toString();
}
+
+public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + CharOperation.hashCode(this.constName);
+ result = prime * result + CharOperation.hashCode(this.typeName);
+ return result;
+}
+
+public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ EnumConstantSignature other = (EnumConstantSignature) obj;
+ if (!Arrays.equals(this.constName, other.constName)) {
+ return false;
+ }
+ return Arrays.equals(this.typeName, other.typeName);
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
index 7e04211..369d24e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.flow;
+import java.util.ArrayList;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
@@ -92,6 +93,7 @@ public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location
// all related catch blocks are marked as reachable... instead of those only
// until the point where it is safely handled (Smarter - see comment at the end)
FlowContext traversedContext = this;
+ ArrayList abruptlyExitedLoops = null;
while (traversedContext != null) {
SubRoutineStatement sub;
if (((sub = traversedContext.subroutine()) != null) && sub.isSubRoutineEscaping()) {
@@ -115,6 +117,12 @@ public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location
int state = caughtException == null
? Scope.EQUAL_OR_MORE_SPECIFIC /* any exception */
: Scope.compareTypes(raisedException, caughtException);
+ if (abruptlyExitedLoops != null && caughtException != null && state != Scope.NOT_RELATED) {
+ for (int i = 0, abruptlyExitedLoopsCount = abruptlyExitedLoops.size(); i < abruptlyExitedLoopsCount; i++) {
+ LoopingFlowContext loop = (LoopingFlowContext) abruptlyExitedLoops.get(i);
+ loop.recordCatchContextOfEscapingException(exceptionContext, caughtException);
+ }
+ }
switch (state) {
case Scope.EQUAL_OR_MORE_SPECIFIC :
exceptionContext.recordHandlingException(
@@ -156,6 +164,11 @@ public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location
}
break; // not handled anywhere, thus jump to error handling
}
+ } else if (traversedContext instanceof LoopingFlowContext) {
+ if (abruptlyExitedLoops == null) {
+ abruptlyExitedLoops = new ArrayList(5);
+ }
+ abruptlyExitedLoops.add(traversedContext);
}
traversedContext.recordReturnFrom(flowInfo.unconditionalInits());
@@ -195,6 +208,7 @@ public void checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode locat
raisedCount);
FlowContext traversedContext = this;
+ ArrayList abruptlyExitedLoops = null;
while (traversedContext != null) {
SubRoutineStatement sub;
if (((sub = traversedContext.subroutine()) != null) && sub.isSubRoutineEscaping()) {
@@ -220,6 +234,12 @@ public void checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode locat
int state = caughtException == null
? Scope.EQUAL_OR_MORE_SPECIFIC /* any exception */
: Scope.compareTypes(raisedException, caughtException);
+ if (abruptlyExitedLoops != null && caughtException != null && state != Scope.NOT_RELATED) {
+ for (int i = 0, abruptlyExitedLoopsCount = abruptlyExitedLoops.size(); i < abruptlyExitedLoopsCount; i++) {
+ LoopingFlowContext loop = (LoopingFlowContext) abruptlyExitedLoops.get(i);
+ loop.recordCatchContextOfEscapingException(exceptionContext, caughtException);
+ }
+ }
switch (state) {
case Scope.EQUAL_OR_MORE_SPECIFIC :
exceptionContext.recordHandlingException(
@@ -282,6 +302,11 @@ public void checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode locat
}
break; // not handled anywhere, thus jump to error handling
}
+ } else if (traversedContext instanceof LoopingFlowContext) {
+ if (abruptlyExitedLoops == null) {
+ abruptlyExitedLoops = new ArrayList(5);
+ }
+ abruptlyExitedLoops.add(traversedContext);
}
if (remainingCount == 0)
return;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
index a027566..fed1648 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.flow;
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.eclipse.jdt.internal.compiler.ast.IfStatement;
import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
@@ -300,7 +302,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranches(
public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
FlowInfo initsWhenTrue, boolean isOptimizedTrue,
FlowInfo initsWhenFalse, boolean isOptimizedFalse,
- boolean allowFakeDeadBranch, FlowInfo flowInfo) {
+ boolean allowFakeDeadBranch, FlowInfo flowInfo, IfStatement ifStatement) {
UnconditionalFlowInfo mergedInfo;
if (isOptimizedTrue){
if (initsWhenTrue == FlowInfo.DEAD_END && allowFakeDeadBranch) {
@@ -327,7 +329,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
}
}
else if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0 &&
- (initsWhenFalse.tagBits & FlowInfo.UNREACHABLE) != 0 &&
+ (ifStatement.bits & ASTNode.IsElseStatementUnreachable) != 0 &&
initsWhenTrue != FlowInfo.DEAD_END &&
initsWhenFalse != FlowInfo.DEAD_END) {
// Done when the then branch will always be executed but the condition does not have a boolean
@@ -344,7 +346,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
}
else if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0 &&
- (initsWhenTrue.tagBits & FlowInfo.UNREACHABLE) != 0 && initsWhenTrue != FlowInfo.DEAD_END
+ (ifStatement.bits & ASTNode.IsThenStatementUnreachable) != 0 && initsWhenTrue != FlowInfo.DEAD_END
&& initsWhenFalse != FlowInfo.DEAD_END) {
// Done when the else branch will always be executed but the condition does not have a boolean
// true or false (i.e if(true), etc) for sure
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
index 8b02bc7..69fe575 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.flow;
+import java.util.ArrayList;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.Expression;
import org.eclipse.jdt.internal.compiler.ast.Reference;
@@ -17,6 +18,7 @@ import org.eclipse.jdt.internal.compiler.codegen.BranchLabel;
import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
import org.eclipse.jdt.internal.compiler.lookup.Scope;
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
import org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
@@ -45,6 +47,23 @@ public class LoopingFlowContext extends SwitchFlowContext {
int[] nullCheckTypes;
int nullCount;
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926
+ static private class EscapingExceptionCatchSite {
+ final ReferenceBinding caughtException;
+ final ExceptionHandlingFlowContext catchingContext;
+ public EscapingExceptionCatchSite(ExceptionHandlingFlowContext catchingContext, ReferenceBinding caughtException) {
+ this.catchingContext = catchingContext;
+ this.caughtException = caughtException;
+ }
+ void simulateThrowAfterLoopBack(FlowInfo flowInfo) {
+ this.catchingContext.recordHandlingException(this.caughtException,
+ flowInfo.unconditionalInits(), null, // raised exception, irrelevant here
+ null, /* invocation site, irrelevant here */ true // we have no business altering the needed status.
+ );
+ }
+ }
+ private ArrayList escapingExceptionCatchSites = null;
+
Scope associatedScope;
public LoopingFlowContext(
@@ -608,4 +627,31 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
}
}
}
+
+ /* Simulate a throw of an exception from inside a loop in its second or subsequent iteration.
+ See https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926
+ */
+ public void simulateThrowAfterLoopBack(FlowInfo flowInfo) {
+ if (this.escapingExceptionCatchSites != null) {
+ for (int i = 0, exceptionCount = this.escapingExceptionCatchSites.size(); i < exceptionCount; i++) {
+ ((EscapingExceptionCatchSite) this.escapingExceptionCatchSites.get(i)).simulateThrowAfterLoopBack(flowInfo);
+ }
+ this.escapingExceptionCatchSites = null; // don't care for it anymore.
+ }
+ }
+
+ /* Record the fact that some exception thrown by code within this loop
+ is caught by an outer catch block. This is used to propagate data flow
+ along the edge back to the next iteration. See simulateThrowAfterLoopBack
+ */
+ public void recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext, ReferenceBinding caughtException) {
+ if (this.escapingExceptionCatchSites == null) {
+ this.escapingExceptionCatchSites = new ArrayList(5);
+ }
+ this.escapingExceptionCatchSites.add(new EscapingExceptionCatchSite(catchingContext, caughtException));
+ }
+
+ public boolean hasEscapingExceptions() {
+ return this.escapingExceptionCatchSites != null;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
index af70d44..4f486df 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@ public class BooleanConstant extends Constant {
private static final BooleanConstant TRUE = new BooleanConstant(true);
private static final BooleanConstant FALSE = new BooleanConstant(false);
- public static BooleanConstant fromValue(boolean value) {
+ public static Constant fromValue(boolean value) {
return value ? BooleanConstant.TRUE : BooleanConstant.FALSE;
}
@@ -41,4 +41,22 @@ public class BooleanConstant extends Constant {
public int typeID() {
return T_boolean;
}
+
+ public int hashCode() {
+ return this.value ? 1231 : 1237;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ BooleanConstant other = (BooleanConstant) obj;
+ return this.value == other.value;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ByteConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ByteConstant.java
index 28de82b..f563962 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ByteConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ByteConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -62,4 +62,22 @@ public class ByteConstant extends Constant {
public int typeID() {
return T_byte;
}
+
+ public int hashCode() {
+ return this.value;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ByteConstant other = (ByteConstant) obj;
+ return this.value == other.value;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CharConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CharConstant.java
index 538315e..6f740d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CharConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CharConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -62,4 +62,22 @@ public class CharConstant extends Constant {
public int typeID() {
return T_char;
}
+
+ public int hashCode() {
+ return this.value;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ CharConstant other = (CharConstant) obj;
+ return this.value == other.value;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/DoubleConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/DoubleConstant.java
index a163d81..ef841cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/DoubleConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/DoubleConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -63,4 +63,23 @@ public class DoubleConstant extends Constant {
public int typeID() {
return T_double;
}
+
+ public int hashCode() {
+ long temp = Double.doubleToLongBits(this.value);
+ return (int) (temp ^ (temp >>> 32));
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ DoubleConstant other = (DoubleConstant) obj;
+ return Double.doubleToLongBits(this.value) == Double.doubleToLongBits(other.value);
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/FloatConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/FloatConstant.java
index 8a2b9c6..41ced2d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/FloatConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/FloatConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -61,4 +61,22 @@ public class FloatConstant extends Constant {
public int typeID() {
return T_float;
}
+
+ public int hashCode() {
+ return Float.floatToIntBits(this.value);
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ FloatConstant other = (FloatConstant) obj;
+ return Float.floatToIntBits(this.value) == Float.floatToIntBits(other.value);
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IntConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IntConstant.java
index 8464934..01fb04a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IntConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IntConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -97,4 +97,22 @@ public class IntConstant extends Constant {
public int typeID() {
return T_int;
}
+
+ public int hashCode() {
+ return this.value;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ IntConstant other = (IntConstant) obj;
+ return this.value == other.value;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/LongConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/LongConstant.java
index 3f83954..99f9f8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/LongConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/LongConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -71,4 +71,22 @@ public String toString(){
public int typeID() {
return T_long;
}
+
+public int hashCode() {
+ return (int) (this.value ^ (this.value >>> 32));
+}
+
+public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ LongConstant other = (LongConstant) obj;
+ return this.value == other.value;
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ShortConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ShortConstant.java
index 9afba0f..6f107ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ShortConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/ShortConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -63,4 +63,22 @@ public class ShortConstant extends Constant {
public int typeID() {
return T_short;
}
+
+ public int hashCode() {
+ return this.value;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ShortConstant other = (ShortConstant) obj;
+ return this.value == other.value;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/StringConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/StringConstant.java
index adf9158..37d493f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/StringConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/StringConstant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -39,4 +39,29 @@ public class StringConstant extends Constant {
public int typeID() {
return T_JavaLangString;
}
+
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((this.value == null) ? 0 : this.value.hashCode());
+ return result;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ StringConstant other = (StringConstant) obj;
+ if (this.value == null) {
+ return other.value == null;
+ } else {
+ return this.value.equals(other.value);
+ }
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
index 9d3442f..d01198d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
@@ -222,8 +222,8 @@ void checkParameterizedTypes() {
* be actually outputed if sitting inside unreachable code.
*/
public char[] computeConstantPoolName(LocalTypeBinding localType) {
- if (localType.constantPoolName() != null) {
- return localType.constantPoolName();
+ if (localType.constantPoolName != null) {
+ return localType.constantPoolName;
}
// delegates to the outermost enclosing classfile, since it is the only one with a global vision of its innertypes.
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
index 7d3c766..061da43 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
@@ -24,4 +24,5 @@ public interface InvocationSite {
void setFieldIndex(int depth);
int sourceEnd();
int sourceStart();
+ TypeBinding expectedType();
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
index c01f3a1..4344638 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
@@ -114,7 +114,12 @@ public char[] computeUniqueKey(boolean isLeaf) {
}
public char[] constantPoolName() /* java/lang/Object */ {
- return this.constantPoolName;
+ if (this.constantPoolName == null && this.scope != null) {
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154, we do have some
+ // cases where the left hand does not know what the right is doing.
+ this.constantPoolName = this.scope.compilationUnitScope().computeConstantPoolName(this);
+ }
+ return this.constantPoolName;
}
ArrayBinding createArrayType(int dimensionCount, LookupEnvironment lookupEnvironment) {
@@ -139,7 +144,7 @@ ArrayBinding createArrayType(int dimensionCount, LookupEnvironment lookupEnviron
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=99686)
*/
public char[] genericTypeSignature() {
- if (this.genericReferenceTypeSignature == null && constantPoolName() == null) {
+ if (this.genericReferenceTypeSignature == null && this.constantPoolName == null) {
if (isAnonymousType())
setConstantPoolName(superclass().sourceName());
else
@@ -213,7 +218,7 @@ public void setConstantPoolName(char[] computedConstantPoolName) /* java/lang/Ob
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=102284)
*/
public char[] signature() {
- if (this.signature == null && constantPoolName() == null) {
+ if (this.signature == null && this.constantPoolName == null) {
if (isAnonymousType())
setConstantPoolName(superclass().sourceName());
else
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
index e15f117..6381130 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
@@ -353,9 +353,6 @@ public List collectMissingTypes(List missingTypes) {
}
}
}
- if (missingTypes == null) {
- System.err.println("Could not find missing types in " + this); //$NON-NLS-1$
- }
return missingTypes;
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
index 904a6ce..e7dd1db 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
@@ -617,6 +617,12 @@ MethodBinding computeSubstituteMethod(MethodBinding inheritedMethod, MethodBindi
boolean detectInheritedNameClash(MethodBinding inherited, MethodBinding otherInherited) {
if (!inherited.areParameterErasuresEqual(otherInherited))
return false;
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693
+ // When reporting a name clash between two inherited methods, we should not look for a
+ // signature clash, but instead should be looking for method descriptor clash.
+ if (inherited.returnType.erasure() != otherInherited.returnType.erasure())
+ return false;
// skip it if otherInherited is defined by a subtype of inherited's declaringClass or vice versa.
// avoid being order sensitive and check with the roles reversed also.
if (inherited.declaringClass.erasure() != otherInherited.declaringClass.erasure()) {
@@ -631,10 +637,17 @@ boolean detectInheritedNameClash(MethodBinding inherited, MethodBinding otherInh
}
boolean detectNameClash(MethodBinding current, MethodBinding inherited, boolean treatAsSynthetic) {
MethodBinding methodToCheck = inherited;
+ MethodBinding original = methodToCheck.original(); // can be the same as inherited
+ if (!current.areParameterErasuresEqual(original))
+ return false;
if (!treatAsSynthetic) {
// For a user method, see if current class overrides the inherited method. If it does,
// then any grievance we may have ought to be against the current class's method and
// NOT against any super implementations. https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615
+
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978 : we now defer this rather expensive
+ // check to just before reporting (the incorrect) name clash. In the event there is no name
+ // clash to report to begin with (the common case), no penalty needs to be paid.
MethodBinding[] currentNamesakes = (MethodBinding[]) this.currentMethods.get(inherited.selector);
if (currentNamesakes.length > 1) { // we know it ought to at least one and that current is NOT the override
for (int i = 0, length = currentNamesakes.length; i < length; i++) {
@@ -646,7 +659,7 @@ boolean detectNameClash(MethodBinding current, MethodBinding inherited, boolean
}
}
}
- MethodBinding original = methodToCheck.original(); // can be the same as inherited
+ original = methodToCheck.original(); // can be the same as inherited
if (!current.areParameterErasuresEqual(original))
return false;
original = inherited.original(); // For error reporting use, inherited.original()
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
index a32b2bc..b58bc94 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.lookup;
-import org.eclipse.jdt.internal.compiler.ast.MessageSend;
-
/**
* Binding denoting a generic method after type parameter substitutions got performed.
* On parameterized type bindings, all methods got substituted, regardless whether
@@ -61,12 +59,7 @@ public class ParameterizedGenericMethodBinding extends ParameterizedMethodBindin
System.arraycopy(inferenceContext.substitutes, 0, uncheckedArguments = new TypeBinding[length], 0, length);
}
if (methodSubstitute.returnType != TypeBinding.VOID) {
- TypeBinding expectedType = null;
- // if message invocation has expected type
- if (invocationSite instanceof MessageSend) {
- MessageSend message = (MessageSend) invocationSite;
- expectedType = message.expectedType;
- }
+ TypeBinding expectedType = invocationSite.expectedType();
if (expectedType != null) {
// record it was explicit from context, as opposed to assumed by default (see below)
inferenceContext.hasExplicitExpectedType = true;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.java
index 26e97c2..22b5afa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.java
@@ -29,12 +29,15 @@ public class ParameterizedMethodBinding extends MethodBinding {
super(
originalMethod.modifiers,
originalMethod.selector,
- originalMethod.returnType,
+ originalMethod.returnType,
originalMethod.parameters,
originalMethod.thrownExceptions,
parameterizedDeclaringClass);
this.originalMethod = originalMethod;
- this.tagBits = originalMethod.tagBits;
+ /* missing type bit cannot be copied as is it might come from the return type or a parameter type that
+ * is substituted by a raw type.
+ */
+ this.tagBits = originalMethod.tagBits & ~TagBits.HasMissingType;
final TypeVariableBinding[] originalVariables = originalMethod.typeVariables;
Substitution substitution = null;
@@ -61,13 +64,13 @@ public class ParameterizedMethodBinding extends MethodBinding {
return !isStatic && parameterizedDeclaringClass.isRawSubstitution();
}
public TypeBinding substitute(TypeVariableBinding typeVariable) {
- // check this variable can be substituted given copied variables
- if (typeVariable.rank < length && originalVariables[typeVariable.rank] == typeVariable) {
+ // check this variable can be substituted given copied variables
+ if (typeVariable.rank < length && originalVariables[typeVariable.rank] == typeVariable) {
return substitutedVariables[typeVariable.rank];
- }
- if (!isStatic)
+ }
+ if (!isStatic)
return parameterizedDeclaringClass.substitute(typeVariable);
- return typeVariable;
+ return typeVariable;
}
};
@@ -105,8 +108,8 @@ public class ParameterizedMethodBinding extends MethodBinding {
this.returnType = Scope.substitute(substitution, this.returnType);
this.parameters = Scope.substitute(substitution, this.parameters);
this.thrownExceptions = Scope.substitute(substitution, this.thrownExceptions);
- // error case where exception type variable would have been substituted by a non-reference type (207573)
- if (this.thrownExceptions == null) this.thrownExceptions = Binding.NO_EXCEPTIONS;
+ // error case where exception type variable would have been substituted by a non-reference type (207573)
+ if (this.thrownExceptions == null) this.thrownExceptions = Binding.NO_EXCEPTIONS;
}
checkMissingType: {
if ((this.tagBits & TagBits.HasMissingType) != 0)
@@ -143,7 +146,10 @@ public class ParameterizedMethodBinding extends MethodBinding {
originalMethod.thrownExceptions,
declaringClass);
this.originalMethod = originalMethod;
- this.tagBits = originalMethod.tagBits;
+ /* missing type bit cannot be copied as is it might come from the return type or a parameter type that
+ * is substituted by a raw type.
+ */
+ this.tagBits = originalMethod.tagBits & ~TagBits.HasMissingType;
final TypeVariableBinding[] originalVariables = originalMethod.typeVariables;
Substitution substitution = null;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
index 33183d4..ec7c1dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -26,8 +26,30 @@ public class RawTypeBinding extends ParameterizedTypeBinding {
*/
public RawTypeBinding(ReferenceBinding type, ReferenceBinding enclosingType, LookupEnvironment environment){
super(type, null, enclosingType, environment);
- if (enclosingType == null || (enclosingType.modifiers & ExtraCompilerModifiers.AccGenericSignature) == 0)
+ this.tagBits &= ~TagBits.HasMissingType;
+ if ((type.tagBits & TagBits.HasMissingType) != 0) {
+ if (type instanceof MissingTypeBinding) {
+ this.tagBits |= TagBits.HasMissingType;
+ } else if (type instanceof ParameterizedTypeBinding) {
+ ParameterizedTypeBinding parameterizedTypeBinding = (ParameterizedTypeBinding) type;
+ if (parameterizedTypeBinding.genericType() instanceof MissingTypeBinding) {
+ this.tagBits |= TagBits.HasMissingType;
+ }
+ }
+ }
+ if (enclosingType != null && (enclosingType.tagBits & TagBits.HasMissingType) != 0) {
+ if (enclosingType instanceof MissingTypeBinding) {
+ this.tagBits |= TagBits.HasMissingType;
+ } else if (enclosingType instanceof ParameterizedTypeBinding) {
+ ParameterizedTypeBinding parameterizedTypeBinding = (ParameterizedTypeBinding) enclosingType;
+ if (parameterizedTypeBinding.genericType() instanceof MissingTypeBinding) {
+ this.tagBits |= TagBits.HasMissingType;
+ }
+ }
+ }
+ if (enclosingType == null || (enclosingType.modifiers & ExtraCompilerModifiers.AccGenericSignature) == 0) {
this.modifiers &= ~ExtraCompilerModifiers.AccGenericSignature; // only need signature if enclosing needs one
+ }
}
public char[] computeUniqueKey(boolean isLeaf) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index e106904..697af73 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -986,8 +986,10 @@ public abstract class Scope {
currentType.initializeForStaticImports();
FieldBinding field = currentType.getField(fieldName, needResolve);
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456
+ boolean insideTypeAnnotations = this instanceof MethodScope && ((MethodScope) this).insideTypeAnnotation;
if (field != null) {
- if (invocationSite == null
+ if (invocationSite == null || insideTypeAnnotations
? field.canBeSeenBy(getCurrentPackage())
: field.canBeSeenBy(currentType, invocationSite, this))
return field;
@@ -3633,6 +3635,7 @@ public abstract class Scope {
public void setFieldIndex(int depth) { /* ignore */}
public int sourceStart() { return invocationSite.sourceStart(); }
public int sourceEnd() { return invocationSite.sourceStart(); }
+ public TypeBinding expectedType() { return invocationSite.expectedType(); }
};
MethodBinding[] moreSpecific = new MethodBinding[visibleSize];
int count = 0;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
index 51fe498..c281de2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
@@ -295,7 +295,7 @@ public TypeBinding findSuperTypeOriginatingFrom(TypeBinding otherType) {
int nextPosition = 0;
do {
ReferenceBinding[] itsInterfaces = currentType.superInterfaces();
- if (itsInterfaces != Binding.NO_SUPERINTERFACES) {
+ if (itsInterfaces != null && itsInterfaces != Binding.NO_SUPERINTERFACES) {
if (interfacesToVisit == null) {
interfacesToVisit = itsInterfaces;
nextPosition = interfacesToVisit.length;
@@ -320,7 +320,7 @@ public TypeBinding findSuperTypeOriginatingFrom(TypeBinding otherType) {
if (currentType.original() == otherType)
return currentType;
ReferenceBinding[] itsInterfaces = currentType.superInterfaces();
- if (itsInterfaces != Binding.NO_SUPERINTERFACES) {
+ if (itsInterfaces != null && itsInterfaces != Binding.NO_SUPERINTERFACES) {
int itsLength = itsInterfaces.length;
if (nextPosition + itsLength >= interfacesToVisit.length)
System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
index ba70de5..678f940 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
@@ -3659,8 +3659,13 @@ public void invalidType(ASTNode location, TypeBinding type) {
if (type.isParameterizedType()) {
List missingTypes = type.collectMissingTypes(null);
if (missingTypes != null) {
+ ReferenceContext savedContext = this.referenceContext;
for (Iterator iterator = missingTypes.iterator(); iterator.hasNext(); ) {
- invalidType(location, (TypeBinding) iterator.next());
+ try {
+ invalidType(location, (TypeBinding) iterator.next());
+ } finally {
+ this.referenceContext = savedContext;
+ }
}
return;
}
@@ -3684,10 +3689,10 @@ public void invalidType(ASTNode location, TypeBinding type) {
break;
case ProblemReasons.NonStaticReferenceInStaticContext :
id = IProblem.NonStaticTypeFromStaticInvocation;
- break;
+ break;
case ProblemReasons.IllegalSuperTypeVariable :
- id = IProblem.IllegalTypeVariableSuperReference;
- break;
+ id = IProblem.IllegalTypeVariableSuperReference;
+ break;
case ProblemReasons.NoError : // 0
default :
needImplementation(location); // want to fail to see why we were here...
@@ -5119,6 +5124,10 @@ public void missingSynchronizedOnInheritedMethod(MethodBinding currentMethod, Me
}
public void missingTypeInConstructor(ASTNode location, MethodBinding constructor) {
List missingTypes = constructor.collectMissingTypes(null);
+ if (missingTypes == null) {
+ System.err.println("The constructor " + constructor + " is wrongly tagged as containing missing types"); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
TypeBinding missingType = (TypeBinding) missingTypes.get(0);
int start = location.sourceStart;
int end = location.sourceEnd;
@@ -5147,6 +5156,10 @@ public void missingTypeInConstructor(ASTNode location, MethodBinding constructor
public void missingTypeInMethod(MessageSend messageSend, MethodBinding method) {
List missingTypes = method.collectMissingTypes(null);
+ if (missingTypes == null) {
+ System.err.println("The method " + method + " is wrongly tagged as containing missing types"); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
TypeBinding missingType = (TypeBinding) missingTypes.get(0);
this.handle(
IProblem.MissingTypeInMethod,
@@ -6889,6 +6902,7 @@ public void unresolvableReference(NameReference nameRef, Binding binding) {
*/
String[] arguments = new String[] {new String(binding.readableName())};
int end = nameRef.sourceEnd;
+ int sourceStart = nameRef.sourceStart;
if (nameRef instanceof QualifiedNameReference) {
QualifiedNameReference ref = (QualifiedNameReference) nameRef;
if (isRecoveredName(ref.tokens)) return;
@@ -6897,6 +6911,11 @@ public void unresolvableReference(NameReference nameRef, Binding binding) {
} else {
SingleNameReference ref = (SingleNameReference) nameRef;
if (isRecoveredName(ref.token)) return;
+ int numberOfParens = (ref.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT;
+ if (numberOfParens != 0) {
+ sourceStart = retrieveStartingPositionAfterOpeningParenthesis(sourceStart, end, numberOfParens);
+ end = retrieveEndingPositionAfterOpeningParenthesis(sourceStart, end, numberOfParens);
+ }
}
int problemId = (nameRef.bits & Binding.VARIABLE) != 0 && (nameRef.bits & Binding.TYPE) == 0
? IProblem.UnresolvedVariable
@@ -6905,7 +6924,7 @@ public void unresolvableReference(NameReference nameRef, Binding binding) {
problemId,
arguments,
arguments,
- nameRef.sourceStart,
+ sourceStart,
end);
}
public void unsafeCast(CastExpression castExpression, Scope scope) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
index 7f2dd7b..5805a0c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
@@ -522,7 +522,17 @@ public class Util implements SuffixConstants {
}
}
}
-
+ public static int hashCode(Object[] array) {
+ int prime = 31;
+ if (array == null) {
+ return 0;
+ }
+ int result = 1;
+ for (int index = 0; index < array.length; index++) {
+ result = prime * result + (array[index] == null ? 0 : array[index].hashCode());
+ }
+ return result;
+ }
/**
* Returns whether the given name is potentially a zip archive file name
* (it has a file extension and it is not ".java" nor ".class")
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
index ec7a585..68b3c40 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
@@ -902,7 +902,7 @@ public class CompilationUnit extends ASTNode {
* on record. Subsequence modifications made to the AST
* are added to the ones already on record. If this method
* is called again later, the resulting text edit object will
- * accurately reflect the net cumulative affect of all those
+ * accurately reflect the net cumulative effect of all those
* changes.
* </p>
*
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
index f2e34c0..b68c4f1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -291,9 +291,6 @@ public class StringLiteral extends Expression {
case '\"':
b.append("\\\""); //$NON-NLS-1$
break;
- case '\'':
- b.append("\\\'"); //$NON-NLS-1$
- break;
case '\\':
b.append("\\\\"); //$NON-NLS-1$
break;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
index d9875db..6d8a6ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
@@ -169,7 +169,7 @@ public class ASTRewrite {
* on record. Subsequence modifications are added to the ones
* already on record. If this method is called again later,
* the resulting text edit object will accurately reflect
- * the net cumulative affect of all those changes.
+ * the net cumulative effect of all those changes.
* </p>
*
* @param document original document containing source code
@@ -224,7 +224,7 @@ public class ASTRewrite {
* on record. Subsequence modifications are added to the ones
* already on record. If this method is called again later,
* the resulting text edit object will accurately reflect
- * the net cumulative affect of all those changes.
+ * the net cumulative effect of all those changes.
* </p>
*
* @return text edit object describing the changes to the
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
index edd688e..49b4ce7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
@@ -1008,7 +1008,7 @@ public final class ImportRewrite {
* <p>
* Calling this methods does not discard the modifications on record. Subsequence modifications are added
* to the ones already on record. If this method is called again later, the resulting text edit object will accurately
- * reflect the net cumulative affect of all those changes.
+ * reflect the net cumulative effect of all those changes.
* </p>
* @param monitor the progress monitor or <code>null</code>
* @return text edit object describing the changes to the document corresponding to the changes
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
index a23cc32..235e582 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
@@ -3403,7 +3403,22 @@ public final class ASTRewriteAnalyzer extends ASTVisitor {
String str= this.formatter.FIRST_ENUM_CONST.getPrefix(indent - 1);
doTextInsert(pos, str, getEditGroup(children[0]));
}
- doTextInsert(pos, ";", getEditGroup(children[0])); //$NON-NLS-1$
+ if (token == TerminalTokens.TokenNameCOMMA) {
+ // a comma is at the end of the enum constant before a potential semicolon
+ int endPos= getScanner().getCurrentEndOffset();
+ int nextToken= getScanner().readNext(endPos, true);
+ if (nextToken != TerminalTokens.TokenNameSEMICOLON) {
+ doTextInsert(endPos, ";", getEditGroup(children[0])); //$NON-NLS-1$
+ } else {
+ endPos= getScanner().getCurrentEndOffset();
+ if (isAllOfKind(children, RewriteEvent.REMOVED)) {
+ doTextRemove(pos, endPos - pos, getEditGroup(children[0]));
+ }
+ }
+ pos= endPos;
+ } else {
+ doTextInsert(pos, ";", getEditGroup(children[0])); //$NON-NLS-1$
+ }
} else if (hasSemicolon) {
int endPos= getScanner().getCurrentEndOffset();
if (isAllOfKind(children, RewriteEvent.REMOVED)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
index c46b4f2..c4f04f8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
@@ -875,6 +875,7 @@ public class Scribe implements IJavaDocTagConstants {
}
int getCurrentIndentation(char[] whitespaces, int offset) {
+ if (whitespaces == null) return offset;
int length = whitespaces.length;
if (this.tabLength == 0) return length;
int indentation = offset;
@@ -2363,7 +2364,6 @@ public class Scribe implements IJavaDocTagConstants {
boolean hasLineComment = false;
boolean hasWhitespaces = false;
int lines = 0;
- int previousFoundTaskCount = this.scanner.foundTaskCount;
while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
int foundTaskCount = this.scanner.foundTaskCount;
switch(this.currentToken) {
@@ -2488,15 +2488,14 @@ public class Scribe implements IJavaDocTagConstants {
currentTokenStartPosition = this.scanner.currentPosition;
break;
case TerminalTokens.TokenNameCOMMENT_LINE :
- if (this.useTags && this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
if (!this.editsEnabled && this.editsIndex > 1) {
OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
printNewLinesBeforeDisablingComment();
}
}
- previousFoundTaskCount = foundTaskCount;
}
if (rejectLineComment) break;
if (lines >= 1) {
@@ -2513,20 +2512,19 @@ public class Scribe implements IJavaDocTagConstants {
currentTokenStartPosition = this.scanner.currentPosition;
hasLineComment = true;
lines = 0;
- if (this.useTags && !this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
}
break;
case TerminalTokens.TokenNameCOMMENT_BLOCK :
- if (this.useTags && this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
if (!this.editsEnabled && this.editsIndex > 1) {
OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
printNewLinesBeforeDisablingComment();
}
}
- previousFoundTaskCount = foundTaskCount;
}
if (trailing > NO_TRAILING_COMMENT && lines >= 1) {
// a block comment on next line means that there's no trailing comment
@@ -2550,20 +2548,19 @@ public class Scribe implements IJavaDocTagConstants {
hasLineComment = false;
hasComment = true;
lines = 0;
- if (this.useTags && !this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
}
break;
case TerminalTokens.TokenNameCOMMENT_JAVADOC :
- if (this.useTags && this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
if (!this.editsEnabled && this.editsIndex > 1) {
OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
printNewLinesBeforeDisablingComment();
}
}
- previousFoundTaskCount = foundTaskCount;
}
if (trailing > NO_TRAILING_COMMENT) {
// a javadoc comment should not be considered as a trailing comment
@@ -2587,8 +2584,8 @@ public class Scribe implements IJavaDocTagConstants {
} else {
printBlockComment(true);
}
- if (this.useTags && !this.editsEnabled && foundTaskCount > previousFoundTaskCount) {
- setEditsEnabled(foundTaskCount, previousFoundTaskCount);
+ if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
}
printNewLine();
currentTokenStartPosition = this.scanner.currentPosition;
@@ -2602,7 +2599,6 @@ public class Scribe implements IJavaDocTagConstants {
this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1);
return;
}
- previousFoundTaskCount = foundTaskCount;
}
} catch (InvalidInputException e) {
throw new AbortFormatting(e);
@@ -2677,8 +2673,7 @@ public class Scribe implements IJavaDocTagConstants {
if (this.tabLength == 0) {
similarCommentsIndentation = relativeIndentation == 0;
} else if (relativeIndentation > -this.tabLength) {
- similarCommentsIndentation = this.formatter.preferences.comment_format_line_comment_starting_on_first_column ||
- (currentCommentIndentation != 0 && this.lastLineComment.currentIndentation != 0);
+ similarCommentsIndentation = relativeIndentation == 0 || currentCommentIndentation != 0 && this.lastLineComment.currentIndentation != 0;
}
if (similarCommentsIndentation && this.lastLineComment.indentation != this.indentationLevel) {
int currentIndentationLevel = this.indentationLevel;
@@ -4432,6 +4427,7 @@ public class Scribe implements IJavaDocTagConstants {
boolean hasComment = false;
boolean hasModifiers = false;
while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
+ int foundTaskCount = this.scanner.foundTaskCount;
switch(this.currentToken) {
case TerminalTokens.TokenNamepublic :
case TerminalTokens.TokenNameprotected :
@@ -4495,17 +4491,37 @@ public class Scribe implements IJavaDocTagConstants {
currentTokenStartPosition = this.scanner.currentPosition;
break;
case TerminalTokens.TokenNameCOMMENT_BLOCK :
- printBlockComment(false);
- currentTokenStartPosition = this.scanner.currentPosition;
- hasComment = true;
- break;
case TerminalTokens.TokenNameCOMMENT_JAVADOC :
- printBlockComment(true);
+ if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
+ if (!this.editsEnabled && this.editsIndex > 1) {
+ OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+ if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+ printNewLinesBeforeDisablingComment();
+ }
+ }
+ }
+ printBlockComment(this.currentToken == TerminalTokens.TokenNameCOMMENT_JAVADOC);
+ if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
+ }
currentTokenStartPosition = this.scanner.currentPosition;
hasComment = true;
break;
case TerminalTokens.TokenNameCOMMENT_LINE :
+ if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
+ if (!this.editsEnabled && this.editsIndex > 1) {
+ OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+ if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+ printNewLinesBeforeDisablingComment();
+ }
+ }
+ }
printLineComment();
+ if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
+ setEditsEnabled(foundTaskCount);
+ }
currentTokenStartPosition = this.scanner.currentPosition;
break;
case TerminalTokens.TokenNameWHITESPACE :
@@ -4961,8 +4977,8 @@ public class Scribe implements IJavaDocTagConstants {
* disabling/enabling tags in a comment, hence the last one will be the one really
* changing the formatter behavior...
*/
- private void setEditsEnabled(int count, int previous) {
- for (int i=previous; i<count; i++) {
+ private void setEditsEnabled(int count) {
+ for (int i=0; i<count; i++) {
if (this.disablingTag != null && CharOperation.equals(this.scanner.foundTaskTags[i], this.disablingTag)) {
this.editsEnabled = false;
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IBuffer.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IBuffer.java
index ed9eb48..9cebaa2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IBuffer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IBuffer.java
@@ -196,7 +196,7 @@ public boolean isClosed();
public boolean isReadOnly();
/**
* Removes the given listener from this buffer.
- * Has no affect if an identical listener is not registered or if the buffer is closed.
+ * Has no effect if an identical listener is not registered or if the buffer is closed.
*
* @param listener the listener
*/
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java
index aff98fd..1a66dd4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java
@@ -160,7 +160,7 @@ void becomeWorkingCopy(IProgressMonitor monitor) throws JavaModelException;
*
* <p>It is possible that the contents of the original resource have changed
* since this working copy was created, in which case there is an update conflict.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the contents of this working copy are applied to
* the underlying resource even though this working copy was created before
@@ -280,7 +280,7 @@ IImportDeclaration createImport(String name, IJavaElement sibling, int flags, IP
* to the end of this compilation unit.
*
* <p>It is possible that a type with the same name already exists in this compilation unit.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the type is created with the new contents</li>
* <li> <code>false</code> - in this case a {@link JavaModelException} is thrown</li>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageFragment.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageFragment.java
index 3dcb3b8..4c075b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageFragment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageFragment.java
@@ -49,7 +49,7 @@ public interface IPackageFragment extends IParent, IJavaElement, IOpenable, ISou
*
* <p>It is possible that a compilation unit with the same name already exists in this
* package fragment.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the compilation is created with the new contents</li>
* <li> <code>false</code> - in this case a <code>JavaModelException</code> is thrown</li>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
index cd489e6..d843d61 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
@@ -335,7 +335,7 @@ public interface IType extends IMember, IAnnotatable {
* as the last field declaration in this type.</p>
*
* <p>It is possible that a field with the same name already exists in this type.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the field is created with the new contents</li>
* <li> <code>false</code> - in this case a <code>JavaModelException</code> is thrown</li>
@@ -393,7 +393,7 @@ public interface IType extends IMember, IAnnotatable {
* to this type.
*
* <p>It is possible that a method with the same signature already exists in this type.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the method is created with the new contents</li>
* <li> <code>false</code> - in this case a <code>JavaModelException</code> is thrown</li>
@@ -427,7 +427,7 @@ public interface IType extends IMember, IAnnotatable {
* to this type.</p>
*
* <p>It is possible that a type with the same name already exists in this type.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the type is created with the new contents</li>
* <li> <code>false</code> - in this case a <code>JavaModelException</code> is thrown</li>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeHierarchy.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeHierarchy.java
index 5e879df..59d37a4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeHierarchy.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeHierarchy.java
@@ -277,7 +277,7 @@ IType getType();
void refresh(IProgressMonitor monitor) throws JavaModelException;
/**
* Removes the given listener from this type hierarchy.
- * Has no affect if an identical listener is not registered.
+ * Has no effect if an identical listener is not registered.
*
* @param listener the listener
*/
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IWorkingCopy.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IWorkingCopy.java
index aac30a2..f2961e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IWorkingCopy.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IWorkingCopy.java
@@ -59,7 +59,7 @@ public interface IWorkingCopy {
*
* <p>It is possible that the contents of the original resource have changed
* since this working copy was created, in which case there is an update conflict.
- * The value of the <code>force</code> parameter effects the resolution of
+ * The value of the <code>force</code> parameter affects the resolution of
* such a conflict:<ul>
* <li> <code>true</code> - in this case the contents of this working copy are applied to
* the underlying resource even though this working copy was created before
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index ab94b98..a95d149 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -4667,7 +4667,7 @@ public final class JavaCore extends Plugin {
/**
* Removes the given element changed listener.
- * Has no affect if an identical listener is not registered.
+ * Has no effect if an identical listener is not registered.
*
* @param listener the listener
*/
@@ -4691,7 +4691,7 @@ public final class JavaCore extends Plugin {
/**
* Removes the given pre-processing resource changed listener.
* <p>
- * Has no affect if an identical listener is not registered.
+ * Has no effect if an identical listener is not registered.
*
* @param listener the listener
* @since 3.0
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
index 7dec1ba..5ee8783 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
@@ -14,11 +14,13 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Vector;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -268,7 +270,30 @@ public class ExternalFoldersManager {
}
return this.folders;
}
-
+
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153
+ // Use the same RefreshJob if the job is still available
+ private void runRefreshJob(Collection paths) {
+ Job[] jobs = Job.getJobManager().find(ResourcesPlugin.FAMILY_MANUAL_REFRESH);
+ RefreshJob refreshJob = null;
+ if (jobs != null) {
+ for (int index = 0; index < jobs.length; index++) {
+ // We are only concerned about ExternalFolderManager.RefreshJob
+ if(jobs[index] instanceof RefreshJob) {
+ refreshJob = (RefreshJob) jobs[index];
+ refreshJob.addFoldersToRefresh(paths);
+ if (refreshJob.getState() == Job.NONE) {
+ refreshJob.schedule();
+ }
+ break;
+ }
+ }
+ }
+ if (refreshJob == null) {
+ refreshJob = new RefreshJob(new Vector(paths));
+ refreshJob.schedule();
+ }
+ }
/*
* Refreshes the external folders referenced on the classpath of the given source project
*/
@@ -294,9 +319,8 @@ public class ExternalFoldersManager {
if (externalFolders == null)
return;
- Iterator iterator = externalFolders.iterator();
- Job refreshJob = new RefreshJob(iterator);
- refreshJob.schedule();
+ runRefreshJob(externalFolders);
+
} catch (CoreException e) {
Util.log(e, "Exception while refreshing external project"); //$NON-NLS-1$
}
@@ -312,10 +336,8 @@ public class ExternalFoldersManager {
HashSet externalFolders = getExternalFolders(((JavaProject) JavaCore.create(source)).getResolvedClasspath());
if (externalFolders == null)
return;
- Iterator iterator = externalFolders.iterator();
- Job refreshJob = new RefreshJob(iterator);
- refreshJob.schedule();
+ runRefreshJob(externalFolders);
} catch (CoreException e) {
Util.log(e, "Exception while refreshing external project"); //$NON-NLS-1$
}
@@ -327,8 +349,8 @@ public class ExternalFoldersManager {
}
class RefreshJob extends Job {
- Iterator externalFolders = null;
- RefreshJob(Iterator externalFolders){
+ Vector externalFolders = null;
+ RefreshJob(Vector externalFolders){
super(Messages.refreshing_external_folders);
this.externalFolders = externalFolders;
}
@@ -337,14 +359,38 @@ public class ExternalFoldersManager {
return family == ResourcesPlugin.FAMILY_MANUAL_REFRESH;
}
+ /*
+ * Add the collection of paths to be refreshed to the already
+ * existing list of paths.
+ */
+ public void addFoldersToRefresh(Collection paths) {
+ if (!paths.isEmpty() && this.externalFolders == null) {
+ this.externalFolders = new Vector();
+ }
+ Iterator it = paths.iterator();
+ while(it.hasNext()) {
+ Object path = it.next();
+ if (!this.externalFolders.contains(path)) {
+ this.externalFolders.add(path);
+ }
+ }
+ }
+
protected IStatus run(IProgressMonitor pm) {
try {
- while (this.externalFolders.hasNext()) {
- IPath externalPath = (IPath) this.externalFolders.next();
- IFolder folder = getFolder(externalPath);
- if (folder != null) {
+ if (this.externalFolders == null)
+ return Status.OK_STATUS;
+ IPath externalPath = null;
+ for (int index = 0; index < this.externalFolders.size(); index++ ) {
+ if ((externalPath = (IPath)this.externalFolders.get(index)) != null) {
+ IFolder folder = getFolder(externalPath);
folder.refreshLocal(IResource.DEPTH_INFINITE, pm);
}
+ // Set the processed ones to null instead of removing the element altogether,
+ // so that they will not be considered as duplicates.
+ // This will also avoid elements being shifted to the left every time an element
+ // is removed. However, there is a risk of Collection size to be increased more often.
+ this.externalFolders.setElementAt(null, index);
}
} catch (CoreException e) {
return e.getStatus();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
index dcd7794..284b032 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -208,7 +208,8 @@ public class JavadocContents {
private void computeChildrenSections() {
// try to find the next separator part
int lastIndex = CharOperation.indexOf(JavadocConstants.SEPARATOR_START, this.content, false, this.childrenStart);
-
+ lastIndex = lastIndex == -1 ? this.childrenStart : lastIndex;
+
// try to find field detail start
this.indexOfFieldDetails = CharOperation.indexOf(JavadocConstants.FIELD_DETAIL, this.content, false, lastIndex);
lastIndex = this.indexOfFieldDetails == -1 ? lastIndex : this.indexOfFieldDetails;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ReferenceCollection.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ReferenceCollection.java
index ed4b725..6d8410b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ReferenceCollection.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ReferenceCollection.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ char[][] simpleNameReferences;
char[][] rootReferences;
protected ReferenceCollection(char[][][] qualifiedNameReferences, char[][] simpleNameReferences, char[][] rootReferences) {
- this.qualifiedNameReferences = internQualifiedNames(qualifiedNameReferences);
+ this.qualifiedNameReferences = internQualifiedNames(qualifiedNameReferences, false);
this.simpleNameReferences = internSimpleNames(simpleNameReferences, true);
this.rootReferences = internSimpleNames(rootReferences, false);
}
@@ -33,7 +33,7 @@ public void addDependencies(String[] typeNameDependencies) {
char[][][] qNames = new char[typeNameDependencies.length][][];
for (int i = typeNameDependencies.length; --i >= 0;)
qNames[i] = CharOperation.splitOn('.', typeNameDependencies[i].toCharArray());
- qNames = internQualifiedNames(qNames);
+ qNames = internQualifiedNames(qNames, false);
next : for (int i = qNames.length; --i >= 0;) {
char[][] qualifiedTypeName = qNames[i];
@@ -53,7 +53,7 @@ public void addDependencies(String[] typeNameDependencies) {
this.qualifiedNameReferences[length] = qualifiedTypeName;
qualifiedTypeName = CharOperation.subarray(qualifiedTypeName, 0, qualifiedTypeName.length - 1);
- char[][][] temp = internQualifiedNames(new char[][][] {qualifiedTypeName});
+ char[][][] temp = internQualifiedNames(new char[][][] {qualifiedTypeName}, false);
if (temp == EmptyQualifiedNames)
continue next; // qualifiedTypeName is a well known name
qualifiedTypeName = temp[0];
@@ -206,10 +206,14 @@ public static char[][][] internQualifiedNames(StringSet qualifiedStrings) {
for (int i = 0, l = strings.length; i < l; i++)
if (strings[i] != null)
result[--length] = CharOperation.splitOn('/', strings[i].toCharArray());
- return internQualifiedNames(result);
+ return internQualifiedNames(result, false);
}
public static char[][][] internQualifiedNames(char[][][] qualifiedNames) {
+ return internQualifiedNames(qualifiedNames, false);
+}
+
+public static char[][][] internQualifiedNames(char[][][] qualifiedNames, boolean keepWellKnown) {
if (qualifiedNames == null) return EmptyQualifiedNames;
int length = qualifiedNames.length;
if (length == 0) return EmptyQualifiedNames;
@@ -223,8 +227,12 @@ public static char[][][] internQualifiedNames(char[][][] qualifiedNames) {
char[][] wellKnownName = WellKnownQualifiedNames[j];
if (qLength > wellKnownName.length)
break; // all remaining well known names are shorter
- if (CharOperation.equals(qualifiedName, wellKnownName))
+ if (CharOperation.equals(qualifiedName, wellKnownName)) {
+ if (keepWellKnown) {
+ keepers[index++] = wellKnownName;
+ }
continue next;
+ }
}
// InternedQualifiedNames[0] is for the rest (> 7 & 1)
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
index 5b200f6..ec76a27 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
@@ -297,7 +297,7 @@ static State read(IProject project, DataInputStream in) throws IOException {
qName[j] = internedSimpleNames[in.readInt()];
internedQualifiedNames[i] = qName;
}
- internedQualifiedNames = ReferenceCollection.internQualifiedNames(internedQualifiedNames);
+ internedQualifiedNames = ReferenceCollection.internQualifiedNames(internedQualifiedNames, false);
newState.references = new SimpleLookupTable(length = in.readInt());
for (int i = 0; i < length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
index c608c96..d4b4ce1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
@@ -318,7 +318,7 @@ public boolean contains(IType type) {
return false;
}
/**
- * Determines if the change effects this hierarchy, and fires
+ * Determines if the change affects this hierarchy, and fires
* change notification if required.
*/
public void elementChanged(ElementChangedEvent event) {
@@ -828,7 +828,7 @@ public synchronized boolean isAffected(IJavaElementDelta delta, int eventType) {
/**
* Returns true if any of the children of a project, package
* fragment root, or package fragment have changed in a way that
- * effects this type hierarchy.
+ * affects this type hierarchy.
* @param eventType TODO
*/
private boolean isAffectedByChildren(IJavaElementDelta delta, int eventType) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/notes/API_changes.html b/eclipse/plugins/org.eclipse.jdt.core/notes/API_changes.html
index 93f1dbe..0ae31a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/notes/API_changes.html
+++ b/eclipse/plugins/org.eclipse.jdt.core/notes/API_changes.html
@@ -232,7 +232,7 @@ void becomeWorkingCopy(IProblemRequestor problemRequestor, IProgressMonitor moni
*
* It is possible that the contents of the original resource have changed
* since this working copy was created, in which case there is an update conflict.
- * The value of the force parameter effects the resolution of
+ * The value of the force parameter affects the resolution of
* such a conflict:
* - true - in this case the contents of this working copy are applied to
* the underlying resource even though this working copy was created
diff --git a/eclipse/plugins/org.eclipse.jdt.core/notes/R30_buildnotes_jdt-core.html b/eclipse/plugins/org.eclipse.jdt.core/notes/R30_buildnotes_jdt-core.html
index 676a991..cc985a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/notes/R30_buildnotes_jdt-core.html
+++ b/eclipse/plugins/org.eclipse.jdt.core/notes/R30_buildnotes_jdt-core.html
@@ -721,7 +721,7 @@ public static void addPreProcessingResourceChangedListener(IResourceChangeListen
/**
* Removes the given pre-processing resource changed listener.
*
- * Has no affect if an identical listener is not registered.
+ * Has no effect if an identical listener is not registered.
*
* @param listener the listener
* @since 3.0
@@ -4006,7 +4006,7 @@ void becomeWorkingCopy(IProblemRequestor problemRequestor, IProgressMonitor moni
*
* It is possible that the contents of the original resource have changed
* since this working copy was created, in which case there is an update conflict.
- * The value of the force parameter effects the resolution of
+ * The value of the force parameter affects the resolution of
* such a conflict:
* - true - in this case the contents of this working copy are applied to
* the underlying resource even though this working copy was created
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
index fcca83a..fa4f83e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -49,6 +49,8 @@ import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
*/
public abstract class SearchParticipant {
+ private IPath lastIndexLocation;
+
/**
* Creates a new search participant.
*/
@@ -205,6 +207,10 @@ public abstract class SearchParticipant {
// TODO (frederic) should not have to create index manually, should expose API that recreates index instead
manager.ensureIndexExists(indexLocation, containerPath);
manager.scheduleDocumentIndexing(document, containerPath, indexLocation, this);
+ if (!indexLocation.equals(this.lastIndexLocation)) {
+ manager.updateParticipant(indexLocation, containerPath);
+ this.lastIndexLocation = indexLocation;
+ }
}
/**
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/IndexSelector.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/IndexSelector.java
index d267925..3f829b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/IndexSelector.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/IndexSelector.java
@@ -17,6 +17,7 @@ import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchPattern;
+import org.eclipse.jdt.internal.compiler.util.ObjectVector;
import org.eclipse.jdt.internal.compiler.util.SimpleSet;
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
import org.eclipse.jdt.internal.core.JavaModel;
@@ -53,7 +54,7 @@ public static boolean canSeeFocus(SearchPattern pattern, IPath projectOrJarPath)
try {
IJavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
IJavaProject project = getJavaProject(projectOrJarPath, model);
- IJavaElement[] focuses = getFocusedElements(pattern, project);
+ IJavaElement[] focuses = getFocusedElementsAndTypes(pattern, project, null);
if (focuses.length == 0) return false;
if (project != null) {
return canSeeFocus(focuses, (JavaProject) project, null);
@@ -76,14 +77,14 @@ public static boolean canSeeFocus(SearchPattern pattern, IPath projectOrJarPath)
return false;
}
}
-private static boolean canSeeFocus(IJavaElement[] focuses, JavaProject javaProject, char[][] focusQualifiedName) {
+private static boolean canSeeFocus(IJavaElement[] focuses, JavaProject javaProject, char[][][] focusQualifiedNames) {
int length = focuses.length;
for (int i=0; i<length; i++) {
- if (canSeeFocus(focuses[i], javaProject, focusQualifiedName)) return true;
+ if (canSeeFocus(focuses[i], javaProject, focusQualifiedNames)) return true;
}
return false;
}
-private static boolean canSeeFocus(IJavaElement focus, JavaProject javaProject, char[][] focusQualifiedName) {
+private static boolean canSeeFocus(IJavaElement focus, JavaProject javaProject, char[][][] focusQualifiedNames) {
try {
if (focus == null) return false;
if (focus.equals(javaProject)) return true;
@@ -105,7 +106,7 @@ private static boolean canSeeFocus(IJavaElement focus, JavaProject javaProject,
for (int i = 0, length = entries.length; i < length; i++) {
IClasspathEntry entry = entries[i];
if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT && entry.getPath().equals(focusPath)) {
- if (focusQualifiedName != null) { // builder state is usable, hence use it to try to reduce project which can see the focus...
+ if (focusQualifiedNames != null) { // builder state is usable, hence use it to try to reduce project which can see the focus...
State projectState = (State) JavaModelManager.getJavaModelManager().getLastBuiltState(javaProject.getProject(), null);
if (projectState != null) {
Object[] values = projectState.getReferences().valueTable;
@@ -113,7 +114,7 @@ private static boolean canSeeFocus(IJavaElement focus, JavaProject javaProject,
for (int j=0; j<vLength; j++) {
if (values[j] == null) continue;
ReferenceCollection references = (ReferenceCollection) values[j];
- if (references.includes(focusQualifiedName)) {
+ if (references.includes(focusQualifiedNames, null, null)) {
return true;
}
}
@@ -132,7 +133,7 @@ private static boolean canSeeFocus(IJavaElement focus, JavaProject javaProject,
/*
* Create the list of focused jars or projects.
*/
-private static IJavaElement[] getFocusedElements(SearchPattern pattern, IJavaElement focusElement) throws JavaModelException {
+private static IJavaElement[] getFocusedElementsAndTypes(SearchPattern pattern, IJavaElement focusElement, ObjectVector superTypes) throws JavaModelException {
if (pattern instanceof MethodPattern) {
// For method pattern, it needs to walk along the focus type super hierarchy
// and add jars/projects of all the encountered types.
@@ -153,6 +154,8 @@ private static IJavaElement[] getFocusedElements(SearchPattern pattern, IJavaEle
IPackageFragmentRoot root = (IPackageFragmentRoot) allTypes[i].getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
IJavaElement element = root.isArchive() ? root : root.getParent();
focusSet.add(element);
+ if (superTypes != null) superTypes.add(allTypes[i]);
+ break;
}
}
}
@@ -190,37 +193,27 @@ private void initializeIndexLocations() {
} else {
try {
// See whether the state builder might be used to reduce the number of index locations
- boolean isAutoBuilding = ResourcesPlugin.getWorkspace().getDescription().isAutoBuilding();
- char[][] focusQualifiedName = null;
- if (isAutoBuilding && focus instanceof IJavaProject) {
- IJavaElement javaElement = this.pattern.focus;
- while (javaElement != null && !(javaElement instanceof ITypeRoot)) {
- javaElement = javaElement.getParent();
- }
- if (javaElement != null) {
- IType primaryType = ((ITypeRoot) javaElement).findPrimaryType();
- if (primaryType != null) {
- char[][] qualifiedName = CharOperation.splitOn('.', primaryType.getFullyQualifiedName().toCharArray());
- char[][][] qualifiedNames = ReferenceCollection.internQualifiedNames(new char[][][] {qualifiedName});
- focusQualifiedName = qualifiedNames.length == 0 ? qualifiedName : qualifiedNames[0];
- }
- }
- }
-
+
// find the projects from projectsAndJars that see the focus then walk those projects looking for the jars from projectsAndJars
int length = projectsAndJars.length;
JavaProject[] projectsCanSeeFocus = new JavaProject[length];
SimpleSet visitedProjects = new SimpleSet(length);
int projectIndex = 0;
SimpleSet externalLibsToCheck = new SimpleSet(length);
- IJavaElement[] focuses = getFocusedElements(this.pattern, focus);
+ ObjectVector superTypes = new ObjectVector();
+ IJavaElement[] focuses = getFocusedElementsAndTypes(this.pattern, focus, superTypes);
+ char[][][] focusQualifiedNames = null;
+ boolean isAutoBuilding = ResourcesPlugin.getWorkspace().getDescription().isAutoBuilding();
+ if (isAutoBuilding && focus instanceof IJavaProject) {
+ focusQualifiedNames = getQualifiedNames(superTypes);
+ }
IJavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
for (int i = 0; i < length; i++) {
IPath path = projectsAndJars[i];
JavaProject project = (JavaProject) getJavaProject(path, model);
if (project != null) {
visitedProjects.add(project);
- if (canSeeFocus(focuses, project, focusQualifiedName)) {
+ if (canSeeFocus(focuses, project, focusQualifiedNames)) {
locations.add(manager.computeIndexLocation(path));
projectsCanSeeFocus[projectIndex++] = project;
}
@@ -296,4 +289,24 @@ private static IJavaProject getJavaProject(IPath path, IJavaModel model) {
}
return null;
}
+
+private char[][][] getQualifiedNames(ObjectVector types) {
+ final int size = types.size;
+ char[][][] focusQualifiedNames = null;
+ IJavaElement javaElement = this.pattern.focus;
+ while (javaElement != null && !(javaElement instanceof ITypeRoot)) {
+ javaElement = javaElement.getParent();
+ }
+ if (javaElement != null) {
+ IType primaryType = ((ITypeRoot) javaElement).findPrimaryType();
+ if (primaryType != null) {
+ focusQualifiedNames = new char[size+1][][];
+ focusQualifiedNames[0] = CharOperation.splitOn('.', primaryType.getFullyQualifiedName().toCharArray());
+ }
+ }
+ for (int i = 0; i < size; i++) {
+ focusQualifiedNames[i+1] = CharOperation.splitOn('.', ((IType)(types.elementAt(i))).getFullyQualifiedName().toCharArray());
+ }
+ return focusQualifiedNames == null ? null : ReferenceCollection.internQualifiedNames(focusQualifiedNames, true);
+}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java
index d3dd62c..b110fb5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -88,7 +88,9 @@ public String getJobFamily() {
public boolean search(Index index, IProgressMonitor progressMonitor) {
if (index == null) return COMPLETE;
if (progressMonitor != null && progressMonitor.isCanceled()) throw new OperationCanceledException();
-
+ if (!MatchLocator.SHOULD_FILTER_ENUM && index.containerPath.indexOf("org.apache.commons.lang_2") != -1) { //$NON-NLS-1$
+ MatchLocator.SHOULD_FILTER_ENUM = true;
+ }
ReadWriteMonitor monitor = index.monitor;
if (monitor == null) return COMPLETE; // index got deleted since acquired
try {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/TypeNameMatchRequestorWrapper.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/TypeNameMatchRequestorWrapper.java
index 2e82277..25c81a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/TypeNameMatchRequestorWrapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/TypeNameMatchRequestorWrapper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.jdt.core.IAccessRule;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
@@ -25,9 +26,12 @@ import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.TypeNameMatchRequestor;
import org.eclipse.jdt.core.search.TypeNameRequestor;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.core.Openable;
import org.eclipse.jdt.internal.core.PackageFragmentRoot;
+import org.eclipse.jdt.internal.core.search.matching.MatchLocator;
import org.eclipse.jdt.internal.core.util.HandleFactory;
import org.eclipse.jdt.internal.core.util.HashtableOfArrayToObject;
@@ -69,6 +73,8 @@ public class TypeNameMatchRequestorWrapper implements IRestrictedAccessTypeReque
* Cache package handles to optimize memory.
*/
private HashtableOfArrayToObject packageHandles;
+ private Object lastProject;
+ private long complianceValue;
public TypeNameMatchRequestorWrapper(TypeNameMatchRequestor requestor, IJavaSearchScope scope) {
this.requestor = requestor;
@@ -168,6 +174,18 @@ private IType createTypeFromJar(String resourcePath, int separatorIndex) throws
IPackageFragment pkgFragment= (IPackageFragment) this.packageHandles.get(pkgName);
if (pkgFragment == null) {
pkgFragment= ((PackageFragmentRoot) this.lastPkgFragmentRoot).getPackageFragment(pkgName);
+ // filter org.apache.commons.lang.enum package for projects above 1.5
+ // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264
+ if (MatchLocator.SHOULD_FILTER_ENUM && length == 5 && pkgName[4].equals("enum")) { //$NON-NLS-1$
+ IJavaProject proj = (IJavaProject)pkgFragment.getAncestor(IJavaElement.JAVA_PROJECT);
+ if (!proj.equals(this.lastProject)) {
+ String complianceStr = proj.getOption(CompilerOptions.OPTION_Source, true);
+ this.complianceValue = CompilerOptions.versionToJdkLevel(complianceStr);
+ this.lastProject = proj;
+ }
+ if (this.complianceValue >= ClassFileConstants.JDK1_5)
+ return null;
+ }
this.packageHandles.put(pkgName, pkgFragment);
}
return pkgFragment.getClassFile(simpleNames[length]).getType();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
index a6ce042..df800ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
@@ -53,11 +53,16 @@ public class IndexManager extends JobManager implements IIndexConstants {
// key = indexLocation path, value = index state integer
private SimpleLookupTable indexStates = null;
private File savedIndexNamesFile = new File(getSavedIndexesDirectory(), "savedIndexNames.txt"); //$NON-NLS-1$
+ private File participantIndexNamesFile = new File(getSavedIndexesDirectory(), "participantsIndexNames.txt"); //$NON-NLS-1$
private boolean javaLikeNamesChanged = true;
public static final Integer SAVED_STATE = new Integer(0);
public static final Integer UPDATING_STATE = new Integer(1);
public static final Integer UNKNOWN_STATE = new Integer(2);
public static final Integer REBUILDING_STATE = new Integer(3);
+
+ // search participants who register indexes with the index manager
+ private SimpleLookupTable participantsContainers = null;
+ private boolean participantUpdated = false;
// Debug
public static boolean DEBUG = false;
@@ -324,6 +329,20 @@ public Index[] getIndexes(IPath[] locations, IProgressMonitor progressMonitor) {
rebuildIndex(indexLocation, containerPath);
index = null;
}
+ } else {
+ if (!getJavaPluginWorkingLocation().isPrefixOf(indexLocation)) { // the index belongs to non-jdt search participant
+ if (indexLocation.toFile().exists()) {
+ try {
+ IPath container = getParticipantsContainer(indexLocation);
+ if (container != null) {
+ index = new Index(indexLocation.toOSString(), container.toOSString(), true /*reuse index file*/);
+ this.indexes.put(indexLocation, index);
+ }
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
}
}
if (index != null)
@@ -370,6 +389,12 @@ private SimpleLookupTable getIndexStates() {
}
return this.indexStates;
}
+private IPath getParticipantsContainer(IPath indexLocation) {
+ if (this.participantsContainers == null) {
+ readParticipantsIndexNamesFile();
+ }
+ return (IPath)this.participantsContainers.get(indexLocation);
+}
private IPath getJavaPluginWorkingLocation() {
if (this.javaPluginLocation != null) return this.javaPluginLocation;
@@ -661,6 +686,10 @@ public synchronized void removeIndexPath(IPath path) {
for (int i = 0; i < count; i++)
this.indexes.removeKey(locations[i]);
removeIndexesState(locations);
+ if (this.participantsContainers != null && this.participantsContainers.get(path.toOSString()) != null) {
+ this.participantsContainers.removeKey(path.toOSString());
+ writeParticipantsIndexNamesFile();
+ }
}
}
/**
@@ -802,6 +831,10 @@ public void saveIndexes() {
monitor.exitRead();
}
}
+ if (this.participantsContainers != null && this.participantUpdated) {
+ writeParticipantsIndexNamesFile();
+ this.participantUpdated = false;
+ }
this.needToSave = !allSaved;
}
public void scheduleDocumentIndexing(final SearchDocument searchDocument, IPath container, final IPath indexLocation, final SearchParticipant searchParticipant) {
@@ -861,6 +894,28 @@ private char[][] readIndexState(String dirOSString) {
}
return null;
}
+private void readParticipantsIndexNamesFile() {
+ SimpleLookupTable containers = new SimpleLookupTable(3);
+ try {
+ char[] participantIndexNames = org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(this.participantIndexNamesFile, null);
+ if (participantIndexNames.length > 0) {
+ char[][] names = CharOperation.splitOn('\n', participantIndexNames);
+ if (names.length >= 3) {
+ // First line is DiskIndex signature (see writeParticipantsIndexNamesFile())
+ if (DiskIndex.SIGNATURE.equals(new String(names[0]))) {
+ for (int i = 1, l = names.length-1 ; i < l ; i+=2) {
+ containers.put(new Path(new String(names[i])), new Path(new String(names[i+1])));
+ }
+ }
+ }
+ }
+ } catch (IOException ignored) {
+ if (VERBOSE)
+ Util.verbose("Failed to read participant index file names"); //$NON-NLS-1$
+ }
+ this.participantsContainers = containers;
+ return;
+}
private synchronized void removeIndexesState(IPath[] locations) {
getIndexStates(); // ensure the states are initialized
int length = locations.length;
@@ -907,6 +962,15 @@ private synchronized void updateIndexState(IPath indexLocation, Integer indexSta
}
}
+public void updateParticipant(IPath indexLocation, IPath containerPath) {
+ if (this.participantsContainers == null) {
+ readParticipantsIndexNamesFile();
+ }
+ if (this.participantsContainers.get(indexLocation) == null) {
+ this.participantsContainers.put(indexLocation, containerPath);
+ this.participantUpdated = true;
+ }
+}
private void writeJavaLikeNamesFile() {
BufferedWriter writer = null;
String pathName = getJavaPluginWorkingLocation().toOSString();
@@ -941,6 +1005,36 @@ private void writeJavaLikeNamesFile() {
}
}
}
+private void writeParticipantsIndexNamesFile() {
+ BufferedWriter writer = null;
+ try {
+ writer = new BufferedWriter(new FileWriter(this.participantIndexNamesFile));
+ writer.write(DiskIndex.SIGNATURE);
+ writer.write('\n');
+ Object[] indexFiles = this.participantsContainers.keyTable;
+ Object[] containers = this.participantsContainers.valueTable;
+ for (int i = 0, l = indexFiles.length; i < l; i++) {
+ IPath indexFile = (IPath)indexFiles[i];
+ if (indexFile != null) {
+ writer.write(indexFile.toOSString());
+ writer.write('\n');
+ writer.write(((IPath)containers[i]).toOSString());
+ writer.write('\n');
+ }
+ }
+ } catch (IOException ignored) {
+ if (VERBOSE)
+ Util.verbose("Failed to write participant index file names", System.err); //$NON-NLS-1$
+ } finally {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+}
private void writeSavedIndexNamesFile() {
BufferedWriter writer = null;
try {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
index 19585d2..a38b732 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
@@ -79,6 +79,7 @@ import org.eclipse.jdt.internal.core.util.Util;
public class MatchLocator implements ITypeRequestor {
public static final int MAX_AT_ONCE;
+public static boolean SHOULD_FILTER_ENUM = false;
static {
long maxMemory = Runtime.getRuntime().maxMemory();
int ratio = (int) Math.round(((double) maxMemory) / (64 * 0x100000));
@@ -733,6 +734,28 @@ protected boolean encloses(IJavaElement element) {
}
return false;
}
+private boolean filterEnum(SearchMatch match) {
+
+ // filter org.apache.commons.lang.enum package for projects above 1.5
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264
+ IJavaElement element = (IJavaElement)match.getElement();
+ PackageFragment pkg = (PackageFragment)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
+ if (pkg != null) {
+ // enum was found in org.apache.commons.lang.enum at index 5
+ if (pkg.names.length == 5 && pkg.names[4].equals("enum")) { //$NON-NLS-1$
+ if (this.options == null) {
+ IJavaProject proj = (IJavaProject)pkg.getAncestor(IJavaElement.JAVA_PROJECT);
+ String complianceStr = proj.getOption(CompilerOptions.OPTION_Source, true);
+ if (CompilerOptions.versionToJdkLevel(complianceStr) >= ClassFileConstants.JDK1_5)
+ return true;
+ } else if (this.options.sourceLevel >= ClassFileConstants.JDK1_5) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
/* (non-Javadoc)
* Return info about last type argument of a parameterized type reference.
* These info are made of concatenation of 2 int values which are respectively
@@ -1702,6 +1725,12 @@ protected void report(SearchMatch match) throws CoreException {
}
return;
}
+ if (MatchLocator.SHOULD_FILTER_ENUM && filterEnum(match)){
+ if (BasicSearchEngine.VERBOSE) {
+ System.out.println("Filtered package with name enum"); //$NON-NLS-1$
+ }
+ return;
+ }
long start = -1;
if (BasicSearchEngine.VERBOSE) {
start = System.currentTimeMillis();
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
index a614e07..f47aaf0 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: jdi.jar,
jdimodel.jar,
tools.jar
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
index a87e4b6..93e25be 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
@@ -188,6 +188,8 @@ import org.eclipse.jdt.internal.debug.eval.ast.instructions.Value;
import org.eclipse.jdt.internal.debug.eval.ast.instructions.XorAssignmentOperator;
import org.eclipse.jdt.internal.debug.eval.ast.instructions.XorOperator;
+import com.ibm.icu.text.MessageFormat;
+
/**
* The AST instruction compiler generates a sequence
* of instructions (InstructionSequence) from a
@@ -441,12 +443,12 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (expression instanceof MethodInvocation) {
IMethodBinding methodBinding= (IMethodBinding)((MethodInvocation)expression).getName().resolveBinding();
- if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$
+ if (methodBinding != null && "void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$
pop= false;
}
} else if (expression instanceof SuperMethodInvocation) {
IMethodBinding methodBinding= (IMethodBinding)((SuperMethodInvocation)expression).getName().resolveBinding();
- if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$
+ if (methodBinding != null && "void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$
pop= false;
}
} else if (expression instanceof VariableDeclarationExpression) {
@@ -593,7 +595,8 @@ public class ASTInstructionCompiler extends ASTVisitor {
public void endVisit(ArrayAccess node) {
if (!isActive() || hasErrors())
return;
- if (unBoxing(node.getIndex().resolveTypeBinding())) {
+ ITypeBinding typeBinding = node.getIndex().resolveTypeBinding();
+ if (typeBinding != null && unBoxing(typeBinding)) {
// un-box the index, if required
storeInstruction();
}
@@ -1522,10 +1525,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
ArrayType arrayType= node.getType();
- if (isALocalType(arrayType.resolveBinding().getElementType())) {
+ ITypeBinding binding = resolveTypeBinding(arrayType);
+ if (binding != null && isALocalType(binding.getElementType())) {
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Local_type_array_instance_creation_cannot_be_used_in_an_evaluation_expression_29);
setHasError(true);
- return true;
+ return false;
}
push(new ArrayAllocation(arrayType.getDimensions(), node.dimensions().size(), node.getInitializer() != null, fCounter));
@@ -1541,11 +1545,12 @@ public class ASTInstructionCompiler extends ASTVisitor {
return false;
}
- ITypeBinding typeBinding= node.resolveTypeBinding();
- int dimension= typeBinding.getDimensions();
- String signature= getTypeSignature(typeBinding.getElementType());
-
- push(new ArrayInitializerInstruction(signature, node.expressions().size(), dimension, fCounter));
+ ITypeBinding typeBinding = resolveTypeBinding(node);
+ if (typeBinding != null) {
+ int dimension= typeBinding.getDimensions();
+ String signature= getTypeSignature(typeBinding.getElementType());
+ push(new ArrayInitializerInstruction(signature, node.expressions().size(), dimension, fCounter));
+ }
return true;
}
@@ -1557,11 +1562,12 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (!isActive()) {
return false;
}
- ITypeBinding arrayTypeBinding= node.resolveBinding();
- int dimension= arrayTypeBinding.getDimensions();
- String signature= getTypeSignature(arrayTypeBinding.getElementType());
-
- push(new PushArrayType(signature, dimension, fCounter));
+ ITypeBinding arrayTypeBinding= resolveTypeBinding(node);
+ if (arrayTypeBinding != null) {
+ int dimension= arrayTypeBinding.getDimensions();
+ String signature= getTypeSignature(arrayTypeBinding.getElementType());
+ push(new PushArrayType(signature, dimension, fCounter));
+ }
return false;
}
@@ -1575,7 +1581,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Assert_statement_cannot_be_used_in_an_evaluation_expression_3);
- return true;
+ return false;
}
/**
@@ -1598,6 +1604,14 @@ public class ASTInstructionCompiler extends ASTVisitor {
char2 = opToken.charAt(2);
}
+ ITypeBinding rightBinding = resolveTypeBinding(rightHandSide);
+ if (rightBinding == null) {
+ return false;
+ }
+ ITypeBinding leftBinding = resolveTypeBinding(leftHandSide);
+ if (leftBinding == null) {
+ return false;
+ }
if (variableTypeId == Instruction.T_Object) {
// If the variable is an object, the value may need to be boxed for
// the simple assignment.
@@ -1616,8 +1630,8 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (char0 == '=') {
boolean storeRequired= false;
- if (rightHandSide.resolveTypeBinding().isPrimitive()) {
- boxing(leftHandSide.resolveTypeBinding(), rightHandSide.resolveTypeBinding());
+ if (rightBinding.isPrimitive()) {
+ boxing(leftBinding, rightBinding);
storeRequired= true;
}
rightHandSide.accept(this);
@@ -1629,7 +1643,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
boolean unrecognized = false;
- boxing(leftHandSide.resolveTypeBinding(), rightHandSide.resolveTypeBinding());
+ boxing(leftBinding, rightBinding);
switch (char0) {
case '=': // equal
@@ -1685,12 +1699,12 @@ public class ASTInstructionCompiler extends ASTVisitor {
return false;
}
- unBoxing(leftHandSide.resolveTypeBinding());
+ unBoxing(leftBinding);
push(new Dup());
storeInstruction(); // dupe
storeInstruction(); // un-boxing
- boolean storeRequired= unBoxing(rightHandSide.resolveTypeBinding());
+ boolean storeRequired= unBoxing(rightBinding);
rightHandSide.accept(this);
if (storeRequired) {
storeInstruction(); // un-boxing
@@ -1760,7 +1774,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
leftHandSide.accept(this);
- boolean storeRequired= unBoxing(rightHandSide.resolveTypeBinding());
+ boolean storeRequired= unBoxing(rightBinding);
rightHandSide.accept(this);
if (storeRequired) {
storeInstruction();
@@ -1840,20 +1854,18 @@ public class ASTInstructionCompiler extends ASTVisitor {
Type type= node.getType();
int typeId= getTypeId(type);
- ITypeBinding typeBinding= type.resolveBinding();
-
- String baseTypeSignature;
- int dimension= typeBinding.getDimensions();
-
- if (typeBinding.isArray()) {
- typeBinding= typeBinding.getElementType();
- }
+ ITypeBinding typeBinding= resolveTypeBinding(type);
- baseTypeSignature= getTypeName(typeBinding);
-
- push(new Cast(typeId, baseTypeSignature, dimension, fCounter));
-
- node.getExpression().accept(this);
+ if (typeBinding != null) {
+ String baseTypeSignature;
+ int dimension= typeBinding.getDimensions();
+ if (typeBinding.isArray()) {
+ typeBinding= typeBinding.getElementType();
+ }
+ baseTypeSignature= getTypeName(typeBinding);
+ push(new Cast(typeId, baseTypeSignature, dimension, fCounter));
+ node.getExpression().accept(this);
+ }
return false;
}
@@ -1867,7 +1879,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Catch_clause_cannot_be_used_in_an_evaluation_expression_6);
- return true;
+ return false;
}
/**
@@ -1898,8 +1910,12 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
IMethodBinding methodBinding= node.resolveConstructorBinding();
+ if (methodBinding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_1, new String[]{node.toString()}));
+ return false;
+ }
ITypeBinding typeBinding= methodBinding.getDeclaringClass();
- ITypeBinding enclosingTypeBinding= typeBinding.getDeclaringClass();
boolean isInstanceMemberType= typeBinding.isMember() && ! Modifier.isStatic(typeBinding.getModifiers());
@@ -1915,13 +1931,20 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (hasErrors()) {
- return true;
+ return false;
}
int paramCount= methodBinding.getParameterTypes().length;
String enclosingTypeSignature= null;
+ ITypeBinding enclosingTypeBinding= null;
if (isInstanceMemberType) {
+ enclosingTypeBinding= typeBinding.getDeclaringClass();
+ if (enclosingTypeBinding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_2, new String[]{typeBinding.getQualifiedName()}));
+ return false;
+ }
enclosingTypeSignature= getTypeSignature(enclosingTypeBinding);
paramCount++;
}
@@ -1946,7 +1969,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (Modifier.isStatic(((MethodDeclaration)parent).getModifiers())) {
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Must_explicitly_qualify_the_allocation_with_an_instance_of_the_enclosing_type_33);
- return true;
+ return false;
}
push(new PushThis(getEnclosingLevel(node, enclosingTypeBinding)));
@@ -2048,9 +2071,15 @@ public class ASTInstructionCompiler extends ASTVisitor {
push(new NoOp(fCounter));
- ITypeBinding typeBinding= node.getExpression().resolveTypeBinding();
+ ITypeBinding typeBinding= resolveTypeBinding(node.getExpression());
+ if (typeBinding == null) {
+ return false;
+ }
Type paramType= node.getParameter().getType();
- ITypeBinding paramBinding = paramType.resolveBinding();
+ ITypeBinding paramBinding = resolveTypeBinding(paramType);
+ if (paramBinding == null) {
+ return false;
+ }
String typeSignature= getTypeSignature(paramBinding);
int paramTypeId= getTypeId(paramType);
boolean isParamPrimitiveType= paramTypeId != Instruction.T_Object && paramTypeId != Instruction.T_String;
@@ -2316,8 +2345,16 @@ public class ASTInstructionCompiler extends ASTVisitor {
int rightTypeId;
boolean unbox = false;
// for == and != un-box when at least operand is primitive (otherwise compare the objects)
+ ITypeBinding leftBinding = resolveTypeBinding(leftOperand);
+ if (leftBinding == null) {
+ return false;
+ }
+ ITypeBinding rightBinding = resolveTypeBinding(rightOperand);
+ if (rightBinding == null) {
+ return false;
+ }
if ((char0 == '=' || char0 == '!') && char1 == '=') {
- unbox = leftOperand.resolveTypeBinding().isPrimitive() || rightOperand.resolveTypeBinding().isPrimitive();
+ unbox = leftBinding.isPrimitive() || rightBinding.isPrimitive();
} else {
unbox = true;
}
@@ -2485,7 +2522,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
if (hasErrors()) {
- return true;
+ return false;
}
iterator = extendedOperands.iterator();
@@ -2497,7 +2534,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
ConditionalJump[] conditionalJumps= new ConditionalJump[operatorNumber];
int[] conditionalJumpAddresses = new int[operatorNumber];
- boolean storeRequired= unBoxing(leftOperand.resolveTypeBinding());
+ boolean storeRequired= unBoxing(leftBinding);
leftOperand.accept(this);
if (storeRequired) {
storeInstruction();
@@ -2509,7 +2546,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
push(conditionalJump);
storeInstruction();
- storeRequired= unBoxing(rightOperand.resolveTypeBinding());
+ storeRequired= unBoxing(rightBinding);
rightOperand.accept(this);
if (storeRequired) {
storeInstruction();
@@ -2522,7 +2559,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
push(conditionalJump);
storeInstruction();
Expression operand= (Expression) iterator.next();
- storeRequired= unBoxing(operand.resolveTypeBinding());
+ ITypeBinding typeBinding = resolveTypeBinding(operand);
+ if (typeBinding == null) {
+ return false;
+ }
+ storeRequired= unBoxing(typeBinding);
operand.accept(this);
if (storeRequired) {
storeInstruction();
@@ -2548,14 +2589,14 @@ public class ASTInstructionCompiler extends ASTVisitor {
boolean storeRequired= false;
if (unbox) {
- storeRequired= unBoxing(leftOperand.resolveTypeBinding());
+ storeRequired= unBoxing(leftBinding);
}
leftOperand.accept(this);
if (storeRequired) {
storeInstruction();
}
if (unbox) {
- storeRequired= unBoxing(rightOperand.resolveTypeBinding());
+ storeRequired= unBoxing(rightBinding);
}
rightOperand.accept(this);
if (storeRequired) {
@@ -2566,7 +2607,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
for (int i= 1; i < operatorNumber; i ++) {
Expression operand= (Expression) iterator.next();
if (unbox) {
- storeRequired= unBoxing(operand.resolveTypeBinding());
+ ITypeBinding typeBinding = resolveTypeBinding(operand);
+ if (typeBinding == null) {
+ return false;
+ }
+ storeRequired= unBoxing(typeBinding);
}
operand.accept(this);
if (storeRequired) {
@@ -2682,16 +2727,13 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
if (hasErrors()) {
- return true;
+ return false;
}
if (containsALocalType(methodBinding)) {
setHasError(true);
- addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32);
- }
-
- if (hasErrors()) {
- return true;
+ addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32);
+ return false;
}
int paramCount = methodBinding.getParameterTypes().length;
@@ -2736,7 +2778,15 @@ public class ASTInstructionCompiler extends ASTVisitor {
int argCount = arguments.size();
ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
int paramCount = parameterTypes.length;
- if (methodBinding.isVarargs() && !(paramCount == argCount && parameterTypes[paramCount - 1].getDimensions() == ((Expression)arguments.get(argCount - 1)).resolveTypeBinding().getDimensions())) {
+ ITypeBinding lastArgBinding = null;
+ if (methodBinding.isVarargs()) {
+ Expression lastArg = (Expression)arguments.get(argCount - 1);
+ lastArgBinding = resolveTypeBinding(lastArg);
+ if (lastArgBinding == null) {
+ return;
+ }
+ }
+ if (methodBinding.isVarargs() && !(paramCount == argCount && parameterTypes[paramCount - 1].getDimensions() == lastArgBinding.getDimensions())) {
// if this method is a varargs, and if the method is invoked using the varargs syntax
// (multiple arguments) and not an array
Iterator iterator= arguments.iterator();
@@ -2930,8 +2980,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (!isActive()) {
return false;
}
- ITypeBinding typeBinding = node.resolveBinding();
- push(new PushType(getTypeName(typeBinding)));
+ ITypeBinding typeBinding = resolveTypeBinding(node);
+ if (typeBinding != null) {
+ push(new PushType(getTypeName(typeBinding)));
+ }
return false;
}
@@ -2976,7 +3028,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_postfix_operator____15 + opToken);
- break;
+ return false;
}
push(new Value(fCounter));
push(new Dup());
@@ -2984,12 +3036,16 @@ public class ASTInstructionCompiler extends ASTVisitor {
storeInstruction(); // value
push(new DupX1());
storeInstruction(); // dup_x1
- unBoxing(operand.resolveTypeBinding());
+ ITypeBinding typeBinding = resolveTypeBinding(operand);
+ if (typeBinding == null) {
+ return false;
+ }
+ unBoxing(typeBinding);
storeInstruction(); // un-boxing
push(new PushInt(1));
storeInstruction(); // push 1
storeInstruction(); // operator
- boxing(operand.resolveTypeBinding(), null);
+ boxing(typeBinding, null);
storeInstruction(); // boxing
storeInstruction(); // assignment
push(new Pop(assignmentInstruction.getSize() + 1));
@@ -3008,7 +3064,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_postfix_operator____15 + opToken);
- break;
+ return false;
}
return true;
@@ -3039,6 +3095,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
int expressionUnBoxedTypeId= getUnBoxedTypeId(operand);
+ ITypeBinding typeBinding = resolveTypeBinding(operand);
+ if (typeBinding == null) {
+ return false;
+ }
if (char1 == '\0') {
switch (char0) {
case '+': // unary plus
@@ -3056,10 +3116,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_prefix_operator____16 + opToken);
- break;
+ return false;
}
- unBoxing(operand.resolveTypeBinding());
+ unBoxing(typeBinding);
operand.accept(this);
storeInstruction(); // un-boxing
@@ -3070,7 +3130,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
operand.accept(this);
- boxing(operand.resolveTypeBinding(), null);
+ boxing(typeBinding, null);
switch (char1) {
case '+':
@@ -3082,10 +3142,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_prefix_operator____16 + opToken);
- break;
+ return false;
}
- unBoxing(operand.resolveTypeBinding());
+ unBoxing(typeBinding);
push(new Dup());
storeInstruction(); // dupe
storeInstruction(); // un-boxing
@@ -3142,6 +3202,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (unrecognized) {
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_prefix_operator____16 + opToken);
+ return false;
}
return true;
@@ -3154,8 +3215,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (!isActive()) {
return false;
}
- ITypeBinding typeBinding = node.resolveBinding();
- push(new PushPrimitiveType(getTypeName(typeBinding)));
+ ITypeBinding typeBinding = resolveTypeBinding(node);
+ if (typeBinding != null) {
+ push(new PushPrimitiveType(getTypeName(typeBinding)));
+ }
return false;
}
@@ -3171,14 +3234,20 @@ public class ASTInstructionCompiler extends ASTVisitor {
return true;
}
- IBinding binding = node.resolveBinding();
+ IBinding binding = resolveBinding(node);
+ if (binding == null) {
+ return false;
+ }
switch (binding.getKind()) {
case IBinding.TYPE:
node.getName().accept(this);
break;
case IBinding.VARIABLE:
SimpleName fieldName= node.getName();
- IVariableBinding fieldBinding= (IVariableBinding) fieldName.resolveBinding();
+ IVariableBinding fieldBinding= (IVariableBinding) resolveBinding(fieldName);
+ if (fieldBinding == null) {
+ return false;
+ }
ITypeBinding declaringTypeBinding= fieldBinding.getDeclaringClass();
String fieldId = fieldName.getIdentifier();
@@ -3206,8 +3275,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (!isActive()) {
return false;
}
- ITypeBinding typeBinding = node.resolveBinding();
- push(new PushType(getTypeName(typeBinding)));
+ ITypeBinding typeBinding = resolveTypeBinding(node);
+ if (typeBinding != null) {
+ push(new PushType(getTypeName(typeBinding)));
+ }
return false;
}
@@ -3234,14 +3305,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
return true;
}
- IBinding binding = node.resolveBinding();
-
- String variableId = node.getIdentifier();
+ IBinding binding = resolveBinding(node);
if (binding == null) {
- setHasError(true);
- addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_binding_null_for__17 + variableId);
return true;
}
+ String variableId = node.getIdentifier();
switch (binding.getKind()) {
case IBinding.TYPE:
@@ -3282,9 +3350,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
return false;
}
- ITypeBinding typeBinding = node.resolveBinding();
- push(new PushType(getTypeName(typeBinding)));
-
+ ITypeBinding typeBinding = resolveTypeBinding(node);
+ if (typeBinding != null) {
+ push(new PushType(getTypeName(typeBinding)));
+ }
return false;
}
@@ -3303,15 +3372,17 @@ public class ASTInstructionCompiler extends ASTVisitor {
if (!isActive()) {
return false;
}
- ITypeBinding typeBinding= node.getType().resolveBinding();
- int typeDimension= typeBinding.getDimensions();
- if (typeDimension != 0) {
- typeBinding= typeBinding.getElementType();
- }
- Expression initializer= node.getInitializer();
- push(new LocalVariableCreation(node.getName().getIdentifier(), getTypeSignature(typeBinding), typeDimension, typeBinding.isPrimitive(), initializer != null, fCounter));
- if (initializer != null) {
- initializer.accept(this);
+ ITypeBinding typeBinding= resolveTypeBinding(node.getType());
+ if (typeBinding != null) {
+ int typeDimension= typeBinding.getDimensions();
+ if (typeDimension != 0) {
+ typeBinding= typeBinding.getElementType();
+ }
+ Expression initializer= node.getInitializer();
+ push(new LocalVariableCreation(node.getName().getIdentifier(), getTypeSignature(typeBinding), typeDimension, typeBinding.isPrimitive(), initializer != null, fCounter));
+ if (initializer != null) {
+ initializer.accept(this);
+ }
}
return false;
}
@@ -3350,7 +3421,10 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
SimpleName fieldName= node.getName();
- IVariableBinding fieldBinding= (IVariableBinding) fieldName.resolveBinding();
+ IVariableBinding fieldBinding= (IVariableBinding) resolveBinding(fieldName);
+ if (fieldBinding == null) {
+ return false;
+ }
ITypeBinding declaringTypeBinding= fieldBinding.getDeclaringClass();
String fieldId = fieldName.getIdentifier();
@@ -3361,8 +3435,16 @@ public class ASTInstructionCompiler extends ASTVisitor {
int superLevel= 1;
int enclosingLevel= 0;
if (qualifier != null) {
- superLevel= getSuperLevel(qualifier.resolveTypeBinding(), declaringTypeBinding);
- enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding());
+ ITypeBinding typeBinding = resolveTypeBinding(qualifier);
+ if (typeBinding == null) {
+ return false;
+ }
+ superLevel= getSuperLevel(typeBinding, declaringTypeBinding);
+ ITypeBinding binding = (ITypeBinding)resolveBinding(qualifier);
+ if (binding == null) {
+ return false;
+ }
+ enclosingLevel= getEnclosingLevel(node, binding);
}
push(new PushFieldVariable(fieldId, superLevel, fCounter));
push(new PushThis(enclosingLevel));
@@ -3382,15 +3464,15 @@ public class ASTInstructionCompiler extends ASTVisitor {
return false;
}
- IMethodBinding methodBinding = (IMethodBinding) node.getName().resolveBinding();
+ IMethodBinding methodBinding = (IMethodBinding) resolveBinding(node.getName());
+ if (methodBinding == null) {
+ return false;
+ }
if (containsALocalType(methodBinding)) {
setHasError(true);
- addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32);
- }
-
- if (hasErrors()) {
- return true;
+ addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32);
+ return false;
}
ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
@@ -3405,7 +3487,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
push(new SendMessage(selector, signature, paramCount, getTypeSignature(methodBinding.getDeclaringClass()), fCounter));
int enclosingLevel= 0;
if (qualifier != null) {
- enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding());
+ ITypeBinding typeBinding = (ITypeBinding)resolveBinding(qualifier);
+ if (typeBinding == null) {
+ return false;
+ }
+ enclosingLevel= getEnclosingLevel(node, typeBinding);
}
push(new PushThis(enclosingLevel));
storeInstruction();
@@ -3413,7 +3499,14 @@ public class ASTInstructionCompiler extends ASTVisitor {
List arguments = node.arguments();
int argCount = arguments.size();
- if (methodBinding.isVarargs() && !(paramCount == argCount && parameterTypes[paramCount - 1].getDimensions() == ((Expression)arguments.get(argCount - 1)).resolveTypeBinding().getDimensions())) {
+ ITypeBinding lastArgBinding = null;
+ if (methodBinding.isVarargs()) {
+ lastArgBinding = resolveTypeBinding((Expression)arguments.get(argCount - 1));
+ if (lastArgBinding == null) {
+ return false;
+ }
+ }
+ if (methodBinding.isVarargs() && !(paramCount == argCount && parameterTypes[paramCount - 1].getDimensions() == lastArgBinding.getDimensions())) {
// if this method is a varargs, and if the method is invoked using the varargs syntax
// (multiple arguments) and not an array
Iterator iterator= arguments.iterator();
@@ -3606,7 +3699,11 @@ public class ASTInstructionCompiler extends ASTVisitor {
Name qualifier= node.getQualifier();
int enclosingLevel= 0;
if (qualifier != null) {
- enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding());
+ ITypeBinding binding = (ITypeBinding)resolveBinding(qualifier);
+ if (binding == null) {
+ return false;
+ }
+ enclosingLevel= getEnclosingLevel(node, binding);
}
push(new PushThis(enclosingLevel));
@@ -3633,7 +3730,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Try_statement_cannot_be_used_in_an_evaluation_expression_23);
- return true;
+ return false;
}
/**
@@ -3715,16 +3812,19 @@ public class ASTInstructionCompiler extends ASTVisitor {
ASTNode parent= node.getParent();
switch (parent.getNodeType()) {
case ASTNode.VARIABLE_DECLARATION_EXPRESSION:
- varTypeBinding= ((VariableDeclarationExpression)parent).getType().resolveBinding();
+ varTypeBinding= resolveTypeBinding(((VariableDeclarationExpression)parent).getType());
break;
case ASTNode.VARIABLE_DECLARATION_STATEMENT:
- varTypeBinding= ((VariableDeclarationStatement)parent).getType().resolveBinding();
+ varTypeBinding= resolveTypeBinding(((VariableDeclarationStatement)parent).getType());
break;
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_Error_in_type_declaration_statement);
return false;
}
+ if (varTypeBinding == null) {
+ return false;
+ }
int typeDimension= varTypeBinding.getDimensions();
ITypeBinding elementBinding = varTypeBinding;
if (typeDimension != 0) {
@@ -3788,6 +3888,9 @@ public class ASTInstructionCompiler extends ASTVisitor {
private int getTypeId(Expression expression) {
ITypeBinding typeBinding = expression.resolveTypeBinding();
+ if (typeBinding == null) {
+ return Instruction.T_undefined;
+ }
String typeName = typeBinding.getQualifiedName();
if (typeBinding.isPrimitive()) {
return getPrimitiveTypeId(typeName);
@@ -3800,6 +3903,9 @@ public class ASTInstructionCompiler extends ASTVisitor {
private int getUnBoxedTypeId(Expression expression) {
ITypeBinding typeBinding = expression.resolveTypeBinding();
+ if (typeBinding == null) {
+ return Instruction.T_undefined;
+ }
String typeName = typeBinding.getQualifiedName();
if (typeBinding.isPrimitive()) {
return getPrimitiveTypeId(typeName);
@@ -3833,7 +3939,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
return getPrimitiveTypeId(((PrimitiveType)type).getPrimitiveTypeCode().toString());
} else if (type.isSimpleType()) {
SimpleType simpleType = (SimpleType) type;
- if ("java.lang.String".equals(simpleType.getName())){ //$NON-NLS-1$
+ if ("java.lang.String".equals(simpleType.getName().getFullyQualifiedName())){ //$NON-NLS-1$
return Instruction.T_String;
}
return Instruction.T_Object;
@@ -3902,4 +4008,68 @@ public class ASTInstructionCompiler extends ASTVisitor {
}
return Instruction.T_undefined;
}
+
+ /**
+ * Resolves and returns the type binding from the given expression reporting an error
+ * if the binding is <code>null</code>.
+ *
+ * @param expression expression to resolve type binding for
+ * @return type binding or <code>null</code> if not available
+ */
+ private ITypeBinding resolveTypeBinding(Expression expression) {
+ ITypeBinding typeBinding = expression.resolveTypeBinding();
+ if (typeBinding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_3, new String[]{expression.toString()}));
+ }
+ return typeBinding;
+ }
+
+ /**
+ * Resolves and returns the type binding for the give type reporting an error
+ * if the binding is <code>null</code>.
+ *
+ * @param type type to resolve binding for
+ * @return type binding or <code>null</code> if not available
+ */
+ private ITypeBinding resolveTypeBinding(Type type) {
+ ITypeBinding typeBinding = type.resolveBinding();
+ if (typeBinding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_3, new String[]{type.toString()}));
+ }
+ return typeBinding;
+ }
+
+ /**
+ * Resolves and returns the binding for the given name reporting an error
+ * if the binding is <code>null</code>.
+ *
+ * @param name name to resolve binding for
+ * @return binding or <code>null</code> if not available
+ */
+ private IBinding resolveBinding(Name name) {
+ IBinding binding = name.resolveBinding();
+ if (binding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_5, new String[]{name.getFullyQualifiedName()}));
+ }
+ return binding;
+ }
+
+ /**
+ * Resolves and returns the type binding for the given name reporting an error
+ * if the binding is <code>null</code>.
+ *
+ * @param name name to resolve type binding for
+ * @return type binding or <code>null</code> if not available
+ */
+ private ITypeBinding resolveTypeBinding(Name name) {
+ ITypeBinding typeBinding = name.resolveTypeBinding();
+ if (typeBinding == null) {
+ setHasError(true);
+ addErrorMessage(MessageFormat.format(EvaluationEngineMessages.ASTInstructionCompiler_3, new String[]{name.getFullyQualifiedName()}));
+ }
+ return typeBinding;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.java b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.java
index 50ee1d8..ccfba0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -28,7 +28,6 @@ public class EvaluationEngineMessages extends NLS {
public static String ASTInstructionCompiler_unrecognized_postfix_operator____15;
public static String ASTInstructionCompiler_unrecognized_prefix_operator____16;
- public static String ASTInstructionCompiler_binding_null_for__17;
public static String ASTInstructionCompiler_super_constructor_invocation_cannot_be_used_in_an_evaluation_expression_19;
public static String ASTInstructionCompiler_Try_statement_cannot_be_used_in_an_evaluation_expression_23;
@@ -48,8 +47,12 @@ public class EvaluationEngineMessages extends NLS {
public static String ASTEvaluationEngine_AST_evaluation_engine_cannot_evaluate_expression;
public static String ASTEvaluationEngine_An_unknown_error_occurred_during_evaluation;
public static String ASTEvaluationEngine_Cannot_perform_nested_evaluations;
+ public static String ASTInstructionCompiler_3;
public static String ASTInstructionCompiler_36;
public static String ASTInstructionCompiler_0;
+ public static String ASTInstructionCompiler_1;
+ public static String ASTInstructionCompiler_2;
+ public static String ASTInstructionCompiler_5;
static {
// load message values from bundle file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.properties
index e186512..648e82f 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationEngineMessages.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@@ -22,7 +22,6 @@ ASTInstructionCompiler_Unrecognized_infix_operator____13=Unrecognized infix oper
ASTInstructionCompiler_unrecognized_postfix_operator____15=unrecognized postfix operator :
ASTInstructionCompiler_unrecognized_prefix_operator____16=unrecognized prefix operator :
-ASTInstructionCompiler_binding_null_for__17=binding == null for
ASTInstructionCompiler_super_constructor_invocation_cannot_be_used_in_an_evaluation_expression_19=super constructor invocation cannot be used in an evaluation expression
ASTInstructionCompiler_Try_statement_cannot_be_used_in_an_evaluation_expression_23=Try statement cannot be used in an evaluation expression
@@ -43,8 +42,12 @@ ASTEvaluationEngine_AST_evaluation_engine_cannot_evaluate_expression=The AST eva
ASTEvaluationEngine_An_unknown_error_occurred_during_evaluation=An unknown error occurred during evaluation
ASTEvaluationEngine_Cannot_perform_nested_evaluations=Cannot perform nested evaluations.
+ASTInstructionCompiler_3=Unable to resolve type binding for: {0}
ASTInstructionCompiler_36=Local type field access cannot be used in an evaluation expression
ASTInstructionCompiler_0=Enum declaration cannot be used in an evaluation expression
+ASTInstructionCompiler_1=Unable to resolve type binding of constructor: {0}
+ASTInstructionCompiler_2=Unable to resolve type binding of declaring type of: {0}
+ASTInstructionCompiler_5=Unable to resolve binding for: {0}
ASTEvaluationEngine_0=Unable to evaluate expressions in the context of an interface
ASTEvaluationEngine_1=Unable to retrieve type for java.lang.Object
ArrayRuntimeContext_0=Unable to retrieve type for java.lang.Object
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
index f4ff64b..b28c21a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.doc.isv; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
index 4a786e4..2fff92a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
@@ -166,7 +166,7 @@ X.java located in the current user directory.<p>If multiple default source file
<li>
<font color="#3366FF"><code>... -encoding UTF-8 X.java[Cp1252] Y.java[UTF-16] Z.java ....</code></font><br>
All source files will be read using UTF-8 encoding (this includes <font color="#3366FF">Z.java</font>). <font color="#3366FF">X.java</font>
-will be read using Cp1252 encoding and <font color="#3366FF">Y.java</font> will be used
+will be read using Cp1252 encoding and <font color="#3366FF">Y.java</font> will be read
using UTF-16 encoding.
</li>
<li>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
index 1e3c735..67a866e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.doc.user; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
index dd7168e..8538752 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
@@ -236,7 +236,7 @@
<p>'switch' case fall-through</p>
</td>
<td valign="top">
- <p>When enabled, the compiler will issue an error or a warning whenever it encounters a switch case without a 'break' statement. Empty switch cases are allowed.</p>
+ <p>When enabled, the compiler will issue an error or a warning when a case may be entered by falling through a preceding, non empty case.</p>
</td>
<td valign="top">
<p>Ignore</p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
index f544e46..4ffa540 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -11,7 +11,7 @@
<body>
<h1> Primitive Display Options Preferences </h1>
<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaPrimitivesPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Primitive Display Options preference page"> <b>Java > Debug > Primitive Display Options</b></a> preference page.</p>
-<p>These preferences effect how primitive values are displayed (int, double, etc). </p>
+<p>These preferences affect how primitive values are displayed (int, double, etc). </p>
<table border="1" cellspacing="0" cellpadding= "5">
<thead>
<tr>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
index 13487f8..8d8eb9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -11,7 +11,7 @@
<body>
<h1> Launch Configurations Preferences </h1>
<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchConfigurations)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Launch Configurations preference page"> <b>Run/Debug > Launching > Launch Configurations</b></a> preference page.</p>
-<p>This page allows you set filtering options that are used throughout the workbench to limit the exposure of certain kinds of launch configurations. These filtering setting effect the launch dialog, launch histories and the workbench. </p>
+<p>This page allows you set filtering options that are used throughout the workbench to limit the exposure of certain kinds of launch configurations. These filtering setting affect the launch dialog, launch histories and the workbench. </p>
<table border="1" cellspacing="0" cellpadding= "5">
<thead>
<tr>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
index 7992c07..ff9d40f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -28,7 +28,7 @@
</tr>
<tr>
<td colspan="1" valign="top" align="left">Do not automatically open/close views which have been manually opened/closed </td>
- <td colspan="1" valign="top" align="left">This option controls if views manually opened/closed will be effected by view management </td>
+ <td colspan="1" valign="top" align="left">This option controls if views manually opened/closed will be affected by view management </td>
<td colspan="1" valign="top" align="left">On</td>
</tr>
<tr>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-properties-build-path.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-properties-build-path.htm
index 0bf668d..703769f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-properties-build-path.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-properties-build-path.htm
@@ -2,7 +2,7 @@
<html lang="en">
<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
@@ -85,7 +85,7 @@ resources inside the folder should not be visible to the compiler.</p>
<tr>
<td align="left" valign="top" width="20%">Exclusion filter</td>
- <td align="left" valign="top">Selects which resources are not visible to the compiler</td>
+ <td align="left" valign="top">Selects which resources are not visible to the compiler. For details see <a href="../concepts/concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a>.</td>
</tr>
<tr>
@@ -300,6 +300,7 @@ resources inside the folder should not be visible to the compiler.</p>
<p>
<a href="../concepts/concept-build-classpath.htm">Build classpath</a><br>
<a href="../concepts/concept-classpath-variables.htm">Classpath variables</a><br>
+ <a href="../concepts/concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br>
</p>
<p>
<img src="../images/ngrelr.png" alt="Related reference" border="0" >
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
index 9925b93..161af7a 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.junit.core;singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.jdt.internal.junit.JUnitCorePlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
index 9115976..f9e77bb 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jdt.internal.junit.model.JUnitModel;
@@ -126,6 +127,7 @@ public class JUnitCorePlugin extends Plugin {
public void stop(BundleContext context) throws Exception {
fIsStopped= true;
try {
+ new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).flush();
fJUnitModel.stop();
} finally {
super.stop(context);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
index 7a01a5b..decdafe 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.junit;singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.jdt.internal.junit.ui.JUnitPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
index 84a86be..5bd5be0 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
@@ -309,8 +309,13 @@ public class JUnitPlugin extends AbstractUIPlugin {
IWorkbenchPage page= JUnitPlugin.getActivePage();
if (page == null)
return null;
- // show the result view if it isn't shown yet.
- return (TestRunnerViewPart) page.showView(TestRunnerViewPart.NAME, null, IWorkbenchPage.VIEW_VISIBLE);
+ TestRunnerViewPart view= (TestRunnerViewPart) page.findView(TestRunnerViewPart.NAME);
+ if (view == null) {
+ // create and show the result view if it isn't created yet.
+ return (TestRunnerViewPart) page.showView(TestRunnerViewPart.NAME, null, IWorkbenchPage.VIEW_VISIBLE);
+ } else {
+ return view;
+ }
} catch (PartInitException pie) {
JUnitPlugin.log(pie);
return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
index 73ef2d1..1b4eae0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.ui; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.jdt.internal.ui.JavaPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
index 932d9b1..76535e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -1041,7 +1041,8 @@ public class Bindings {
}
/**
- * Returns the type binding of the node's type context or null if the node is an annotation, type parameter or super type declaration of a top level type.
+ * Returns the type binding of the node's type context or null if the node is inside
+ * an annotation, type parameter, super type declaration, or Javadoc of a top level type.
* The result of this method is equal to the result of {@link #getBindingOfParentType(ASTNode)} for nodes in the type's body.
*
* @param node an AST node
@@ -1053,7 +1054,8 @@ public class Bindings {
while (node != null) {
if (node instanceof AbstractTypeDeclaration) {
AbstractTypeDeclaration decl= (AbstractTypeDeclaration) node;
- if (lastLocation == decl.getBodyDeclarationsProperty()) {
+ if (lastLocation == decl.getBodyDeclarationsProperty()
+ || lastLocation == decl.getJavadocProperty()) {
return decl.resolveBinding();
} else if (decl instanceof EnumDeclaration && lastLocation == EnumDeclaration.ENUM_CONSTANTS_PROPERTY) {
return decl.resolveBinding();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
index 10f5972..9f71f7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
@@ -592,8 +592,15 @@ public final class ASTProvider {
}
}
- /*
- * @see org.eclipse.jdt.internal.ui.text.java.IJavaReconcilingListener#reconciled(org.eclipse.jdt.core.dom.CompilationUnit)
+ /**
+ * Update internal structures after reconcile.
+ *
+ * @param ast the compilation unit AST or <code>null</code> if the working copy was consistent
+ * or reconciliation has been cancelled
+ * @param javaElement the Java element for which the AST was built
+ * @param progressMonitor the progress monitor
+ * @see org.eclipse.jdt.internal.ui.text.java.IJavaReconcilingListener#reconciled(CompilationUnit,
+ * boolean, IProgressMonitor)
*/
void reconciled(CompilationUnit ast, ITypeRoot javaElement, IProgressMonitor progressMonitor) {
if (DEBUG)
@@ -612,7 +619,7 @@ public final class ASTProvider {
return;
}
- fIsReconciling= progressMonitor != null && progressMonitor.isCanceled();
+ fIsReconciling= false;
cache(ast, javaElement);
}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
index f5bd7ce..95654a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.events.TraverseEvent;
@@ -123,11 +122,6 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
}
}
});
- fContainer.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- fGradientBackground.dispose();
- }
- });
hookControl(fContainer);
@@ -802,4 +796,29 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
return new Color(display, blend);
}
+ /*
+ * @see org.eclipse.jface.viewers.StructuredViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
+ * @since 3.6.1
+ */
+ protected void handleDispose(DisposeEvent event) {
+ if (fGradientBackground != null) {
+ fGradientBackground.dispose();
+ fGradientBackground= null;
+ }
+
+ if (fToolTipLabelProvider != null) {
+ fToolTipLabelProvider.dispose();
+ fToolTipLabelProvider= null;
+ }
+
+ if (fBreadcrumbItems != null) {
+ Iterator iterator= fBreadcrumbItems.iterator();
+ while (iterator.hasNext()) {
+ BreadcrumbItem item= (BreadcrumbItem)iterator.next();
+ item.dispose();
+ }
+ }
+
+ super.handleDispose(event);
+ }
}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
index b44831b..3aa03f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.List;
@@ -41,6 +42,8 @@ import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jdt.internal.ui.text.java.hover.SourceViewerInformationControl;
+
/**
* Configures Java Editor hover preferences.
@@ -396,7 +399,10 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
*/
private void initializeDefaultColors() {
if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
- RGB rgb= fAppearanceColorList.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
+ Display display= fAppearanceColorList.getDisplay();
+ RGB rgb= SourceViewerInformationControl.getVisibleBackgroundColor(display);
+ if (rgb == null)
+ rgb= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
PreferenceConverter.setValue(getPreferenceStore(), PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR, rgb);
}
}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
index 7079b7c..d8e6661 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
@@ -48,6 +48,8 @@ import org.eclipse.jface.text.IInformationControlExtension5;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.text.IJavaColorConstants;
@@ -243,7 +245,13 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
}
private void initializeColors() {
- RGB bgRGB= getHoverBackgroundColorRGB();
+ IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ RGB bgRGB;
+ if (store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
+ bgRGB= getVisibleBackgroundColor(fShell.getDisplay());
+ } else {
+ bgRGB= PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
+ }
if (bgRGB != null) {
fBackgroundColor= new Color(fShell.getDisplay(), bgRGB);
fIsSystemBackgroundColor= false;
@@ -253,11 +261,30 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
}
}
- private RGB getHoverBackgroundColorRGB() {
- IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
- return store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)
- ? null
- : PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
+ /**
+ * Returns <code>null</code> if {@link SWT#COLOR_INFO_BACKGROUND} is visibly distinct from the
+ * default Java source text color. Otherwise, returns the editor background color.
+ *
+ * @param display the display
+ * @return an RGB or <code>null</code>
+ * @since 3.6.1
+ */
+ public static RGB getVisibleBackgroundColor(Display display) {
+ float[] infoBgHSB= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB().getHSB();
+
+ Color javaDefaultColor= JavaUI.getColorManager().getColor(IJavaColorConstants.JAVA_DEFAULT);
+ RGB javaDefaultRGB= javaDefaultColor != null ? javaDefaultColor.getRGB() : new RGB(255, 255, 255);
+ float[] javaDefaultHSB= javaDefaultRGB.getHSB();
+
+ if (Math.abs(infoBgHSB[2] - javaDefaultHSB[2]) < 0.5f) {
+ // workaround for dark tooltip background color, see https://bugs.eclipse.org/309334
+ IPreferenceStore preferenceStore= JavaPlugin.getDefault().getCombinedPreferenceStore();
+ boolean useDefault= preferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
+ if (useDefault)
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
+ return PreferenceConverter.getColor(preferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
+ }
+ return null;
}
/**
diff --git a/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
index 246252b..7aa3203 100644
--- a/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui.intro;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
index 764d595..90c54ec 100644
--- a/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jface.text
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
index 1754b0d..620829e 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
@@ -19,6 +19,8 @@ import org.eclipse.swt.SWTError;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.jface.util.Util;
@@ -47,8 +49,8 @@ public class HTMLPrinter {
* @see java.lang.Runnable#run()
*/
public void run() {
- BG_COLOR_RGB= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
- FG_COLOR_RGB= display.getSystemColor(SWT.COLOR_INFO_FOREGROUND).getRGB();
+ cacheColors(display);
+ installColorUpdater(display);
}
});
} catch (SWTError err) {
@@ -62,6 +64,19 @@ public class HTMLPrinter {
private HTMLPrinter() {
}
+ private static void cacheColors(Display display) {
+ BG_COLOR_RGB= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
+ FG_COLOR_RGB= display.getSystemColor(SWT.COLOR_INFO_FOREGROUND).getRGB();
+ }
+
+ private static void installColorUpdater(final Display display) {
+ display.addListener(SWT.Settings, new Listener() {
+ public void handleEvent(Event event) {
+ cacheColors(display);
+ }
+ });
+ }
+
private static String replace(String text, char c, String s) {
int previous= 0;
@@ -117,7 +132,7 @@ public class HTMLPrinter {
pageProlog.append("<html>"); //$NON-NLS-1$
- appendStyleSheetURL(pageProlog, styleSheet);
+ appendStyleSheet(pageProlog, styleSheet);
appendColors(pageProlog, fgRGB, bgRGB);
@@ -174,9 +189,17 @@ public class HTMLPrinter {
}
}
- private static void appendStyleSheetURL(StringBuffer buffer, String styleSheet) {
+ private static void appendStyleSheet(StringBuffer buffer, String styleSheet) {
if (styleSheet == null)
return;
+
+ // workaround for https://bugs.eclipse.org/318243
+ StringBuffer fg= new StringBuffer();
+ appendColor(fg, FG_COLOR_RGB);
+ styleSheet= styleSheet.replaceAll("InfoText", fg.toString()); //$NON-NLS-1$
+ StringBuffer bg= new StringBuffer();
+ appendColor(bg, BG_COLOR_RGB);
+ styleSheet= styleSheet.replaceAll("InfoBackground", bg.toString()); //$NON-NLS-1$
buffer.append("<head><style CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">"); //$NON-NLS-1$
buffer.append(styleSheet);
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
index 7a557c5..e3c48d1 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
@@ -134,6 +134,8 @@ public class SourceViewer extends TextViewer implements ISourceViewer, ISourceVi
if (fOverviewRuler != null && fIsOverviewRulerVisible) {
overviewRulerWidth= fOverviewRuler.getWidth();
width -= overviewRulerWidth + fGap;
+ if (scrollbarHeight <= 0)
+ scrollbarHeight= overviewRulerWidth;
}
if (fVerticalRuler != null && fIsVerticalRulerVisible) {
@@ -180,6 +182,10 @@ public class SourceViewer extends TextViewer implements ISourceViewer, ISourceVi
* @since 3.6
*/
private int[] getVerticalScrollArrowHeights(StyledText textWidget, int bottomOffset) {
+ ScrollBar verticalBar= textWidget.getVerticalBar();
+ if (verticalBar == null)
+ return new int[] { 0, 0 };
+
int[] arrowHeights= computeScrollArrowHeights(textWidget, bottomOffset);
if (arrowHeights[0] > 0 || arrowHeights[1] > 0) {
fScrollArrowHeights= arrowHeights;
@@ -192,7 +198,7 @@ public class SourceViewer extends TextViewer implements ISourceViewer, ISourceVi
int fakeHeight= 1000;
bottomOffset= bottomOffset - originalSize.y + fakeHeight;
textWidget.setSize(originalSize.x, fakeHeight);
- textWidget.getVerticalBar().setValues(0, 0, 1 << 30, 1, 10, 10);
+ verticalBar.setValues(0, 0, 1 << 30, 1, 10, 10);
arrowHeights= computeScrollArrowHeights(textWidget, bottomOffset);
fScrollArrowHeights= arrowHeights;
} finally {
diff --git a/eclipse/plugins/org.eclipse.jface/.settings/.api_filters b/eclipse/plugins/org.eclipse.jface/.settings/.api_filters
deleted file mode 100644
index 60cdd5d..0000000
--- a/eclipse/plugins/org.eclipse.jface/.settings/.api_filters
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jface" version="2">
- <resource path="src/org/eclipse/jface/bindings/keys/IKeyLookup.java" type="org.eclipse.jface.bindings.keys.IKeyLookup">
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.jface.bindings.keys.IKeyLookup"/>
- <message_argument value="F17_NAME"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.jface.bindings.keys.IKeyLookup"/>
- <message_argument value="F20_NAME"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.jface.bindings.keys.IKeyLookup"/>
- <message_argument value="F19_NAME"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.jface.bindings.keys.IKeyLookup"/>
- <message_argument value="F18_NAME"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.jface.bindings.keys.IKeyLookup"/>
- <message_argument value="F16_NAME"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/jface/fieldassist/ControlDecoration.java" type="org.eclipse.jface.fieldassist.ControlDecoration">
- <filter id="336744520">
- <message_arguments>
- <message_argument value="org.eclipse.jface.fieldassist.ControlDecoration"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
index c272466..4033f32 100644
--- a/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jface
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
index ca738d7..443017e 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -14,6 +14,9 @@ package org.eclipse.jface.action;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.ACC;
+import org.eclipse.swt.accessibility.AccessibleControlAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlEvent;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
@@ -258,6 +261,12 @@ import org.eclipse.jface.util.Util;
*/
public StatusLine(Composite parent, int style) {
super(parent, style);
+
+ getAccessible().addAccessibleControlListener(new AccessibleControlAdapter() {
+ public void getRole(AccessibleControlEvent e) {
+ e.detail = ACC.ROLE_STATUSBAR;
+ }
+ });
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
index 14fcc18..e1d88ef 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
@@ -2263,19 +2263,31 @@ public final class BindingManager extends HandleObjectManager implements
* The new array of bindings; may be <code>null</code>. This
* set is copied into a local data structure.
*/
- public final void setBindings(final Binding[] bindings) {
+ public final void setBindings(Binding[] bindings) {
+ if (bindings != null) {
+ // discard bindings not applicable for this platform
+ List newList = new ArrayList();
+ for (int i = 0; i < bindings.length; i++) {
+ Binding binding = bindings[i];
+ String p = binding.getPlatform();
+ if (p == null) {
+ newList.add(binding);
+ } else if (p.equals(platform)) {
+ newList.add(binding);
+ }
+ }
+ bindings = (Binding[]) newList.toArray(new Binding[newList.size()]);
+ }
+ //Check for equality after the munge
if (Arrays.equals(this.bindings, bindings)) {
return; // nothing has changed
}
-
if ((bindings == null) || (bindings.length == 0)) {
this.bindings = null;
bindingCount = 0;
} else {
- final int bindingsLength = bindings.length;
- this.bindings = new Binding[bindingsLength];
- System.arraycopy(bindings, 0, this.bindings, 0, bindingsLength);
- bindingCount = bindingsLength;
+ this.bindings = bindings;
+ bindingCount = bindings.length;
}
clearCache();
}
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
index 0a3c18b..d6c638a 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -180,20 +180,19 @@ abstract class SWTFocusCellManager {
if (row == null)
return;
- Object element = row.getItem().getData();
ViewerColumn viewPart = viewer.getViewerColumn(cell
.getColumnIndex());
if (viewPart == null)
return;
- ColumnLabelProvider labelProvider = (ColumnLabelProvider) viewPart
+ CellLabelProvider labelProvider = viewPart
.getLabelProvider();
if (labelProvider == null)
return;
-
- event.result = labelProvider.getText(element);
+ labelProvider.update(cell);
+ event.result = cell.getText();
}
});
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/Configuration.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/Configuration.class
deleted file mode 100644
index 4dcf2e1..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/Configuration.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationAdmin.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationAdmin.class
deleted file mode 100644
index 77da123..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationAdmin.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationEvent.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationEvent.class
deleted file mode 100644
index e7ac7c0..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationEvent.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationException.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationException.class
deleted file mode 100644
index b59ea82..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationException.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationListener.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationListener.class
deleted file mode 100644
index 13b5e93..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationListener.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermission.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermission.class
deleted file mode 100644
index d88c04a..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermission.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection$1.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection$1.class
deleted file mode 100644
index ae1c8cd..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection$1.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection.class
deleted file mode 100644
index a6f831d..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPermissionCollection.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPlugin.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPlugin.class
deleted file mode 100644
index d1c7824..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ConfigurationPlugin.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedService.class
deleted file mode 100644
index 60094c6..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedServiceFactory.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedServiceFactory.class
deleted file mode 100644
index 60c4afc..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/cm/ManagedServiceFactory.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentConstants.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentConstants.class
deleted file mode 100644
index 61732d1..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentConstants.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentContext.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentContext.class
deleted file mode 100644
index 31a8381..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentContext.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentException.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentException.class
deleted file mode 100644
index 7e229e2..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentException.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentFactory.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentFactory.class
deleted file mode 100644
index 6a27a81..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentFactory.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentInstance.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentInstance.class
deleted file mode 100644
index 7c615df..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/component/ComponentInstance.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Constants.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Constants.class
deleted file mode 100644
index 3aa7d2a..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Constants.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Device.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Device.class
deleted file mode 100644
index c74de60..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Device.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Driver.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Driver.class
deleted file mode 100644
index f19b903..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Driver.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverLocator.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverLocator.class
deleted file mode 100644
index 211bda8..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverLocator.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverSelector.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverSelector.class
deleted file mode 100644
index d0eb4d5..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/DriverSelector.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Match.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Match.class
deleted file mode 100644
index aa75085..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/device/Match.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event$UnmodifiableDictionary.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event$UnmodifiableDictionary.class
deleted file mode 100644
index f243594..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event$UnmodifiableDictionary.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event.class
deleted file mode 100644
index 5856c5c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/Event.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventAdmin.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventAdmin.class
deleted file mode 100644
index ba765dd..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventAdmin.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventConstants.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventConstants.class
deleted file mode 100644
index e84161c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventConstants.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventHandler.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventHandler.class
deleted file mode 100644
index 6747ad2..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/EventHandler.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermission.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermission.class
deleted file mode 100644
index b1534be..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermission.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermissionCollection.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermissionCollection.class
deleted file mode 100644
index 15a19b9..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/event/TopicPermissionCollection.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpContext.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpContext.class
deleted file mode 100644
index 758cf73..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpContext.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpService.class
deleted file mode 100644
index 09e7e86..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/HttpService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/NamespaceException.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/NamespaceException.class
deleted file mode 100644
index afa9683..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/http/NamespaceException.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectionFactory.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectionFactory.class
deleted file mode 100644
index fd11291..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectionFactory.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectorService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectorService.class
deleted file mode 100644
index 795596e..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/io/ConnectorService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogEntry.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogEntry.class
deleted file mode 100644
index 70daca1..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogEntry.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogListener.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogListener.class
deleted file mode 100644
index da9a415..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogListener.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogReaderService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogReaderService.class
deleted file mode 100644
index 75177cc..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogReaderService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogService.class
deleted file mode 100644
index 7b853c5..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/log/LogService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/AttributeDefinition.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/AttributeDefinition.class
deleted file mode 100644
index 1027886..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/AttributeDefinition.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeInformation.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeInformation.class
deleted file mode 100644
index a4f3fdf..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeInformation.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeProvider.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeProvider.class
deleted file mode 100644
index d74b54c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeProvider.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeService.class
deleted file mode 100644
index fd62288..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/MetaTypeService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/ObjectClassDefinition.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/ObjectClassDefinition.class
deleted file mode 100644
index 372f43b..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/metatype/ObjectClassDefinition.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/provisioning/ProvisioningService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/provisioning/ProvisioningService.class
deleted file mode 100644
index 0855ca2..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/provisioning/ProvisioningService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPAction.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPAction.class
deleted file mode 100644
index a9e4e2a..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPAction.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPDevice.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPDevice.class
deleted file mode 100644
index b7445d9..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPDevice.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPEventListener.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPEventListener.class
deleted file mode 100644
index 784d1c3..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPEventListener.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPException.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPException.class
deleted file mode 100644
index c2e2ebe..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPException.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPIcon.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPIcon.class
deleted file mode 100644
index 820e4a4..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPIcon.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPLocalStateVariable.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPLocalStateVariable.class
deleted file mode 100644
index 406ff02..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPLocalStateVariable.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPService.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPService.class
deleted file mode 100644
index 140f87d..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPService.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPStateVariable.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPStateVariable.class
deleted file mode 100644
index 133b723..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/upnp/UPnPStateVariable.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Authorization.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Authorization.class
deleted file mode 100644
index 07fa739..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Authorization.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Group.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Group.class
deleted file mode 100644
index 77553f7..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Group.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Role.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Role.class
deleted file mode 100644
index 5c74098..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/Role.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/User.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/User.class
deleted file mode 100644
index 2dcd183..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/User.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdmin.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdmin.class
deleted file mode 100644
index 4c73226..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdmin.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminEvent.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminEvent.class
deleted file mode 100644
index 42e5028..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminEvent.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminListener.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminListener.class
deleted file mode 100644
index 2ace020..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminListener.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermission.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermission.class
deleted file mode 100644
index 2a3e70b..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermission.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermissionCollection.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermissionCollection.class
deleted file mode 100644
index 71d464c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/useradmin/UserAdminPermissionCollection.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/BasicEnvelope.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/BasicEnvelope.class
deleted file mode 100644
index 3c0ca38..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/BasicEnvelope.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Consumer.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Consumer.class
deleted file mode 100644
index d6065fb..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Consumer.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Envelope.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Envelope.class
deleted file mode 100644
index 2dcdb02..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Envelope.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Producer.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Producer.class
deleted file mode 100644
index d817796..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Producer.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Wire.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Wire.class
deleted file mode 100644
index cd0ef13..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/Wire.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdmin.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdmin.class
deleted file mode 100644
index 09752e7..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdmin.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminEvent.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminEvent.class
deleted file mode 100644
index c6297f6..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminEvent.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminListener.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminListener.class
deleted file mode 100644
index a8bbb86..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireAdminListener.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireConstants.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireConstants.class
deleted file mode 100644
index 5b05529..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WireConstants.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermission.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermission.class
deleted file mode 100644
index 45e1483..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermission.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermissionCollection.class b/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermissionCollection.class
deleted file mode 100644
index b11a24f..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/org/osgi/service/wireadmin/WirePermissionCollection.class and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src.zip b/eclipse/plugins/org.eclipse.osgi.services/src.zip
deleted file mode 100644
index fe4cdfa..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.services/src.zip and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java
new file mode 100644
index 0000000..7c17cf1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.io.IOException;
+import java.util.Dictionary;
+
+/**
+ * The configuration information for a <code>ManagedService</code> or
+ * <code>ManagedServiceFactory</code> object.
+ *
+ * The Configuration Admin service uses this interface to represent the
+ * configuration information for a <code>ManagedService</code> or for a
+ * service instance of a <code>ManagedServiceFactory</code>.
+ *
+ * <p>
+ * A <code>Configuration</code> object contains a configuration dictionary and
+ * allows the properties to be updated via this object. Bundles wishing to
+ * receive configuration dictionaries do not need to use this class - they
+ * register a <code>ManagedService</code> or
+ * <code>ManagedServiceFactory</code>. Only administrative bundles, and
+ * bundles wishing to update their own configurations need to use this class.
+ *
+ * <p>
+ * The properties handled in this configuration have case insensitive
+ * <code>String</code> objects as keys. However, case is preserved from the
+ * last set key/value.
+ * <p>
+ * A configuration can be <i>bound </i> to a bundle location (
+ * <code>Bundle.getLocation()</code>). The purpose of binding a
+ * <code>Configuration</code> object to a location is to make it impossible
+ * for another bundle to forge a PID that would match this configuration. When a
+ * configuration is bound to a specific location, and a bundle with a different
+ * location registers a corresponding <code>ManagedService</code> object or
+ * <code>ManagedServiceFactory</code> object, then the configuration is not
+ * passed to the updated method of that object.
+ *
+ * <p>
+ * If a configuration's location is <code>null</code>, it is not yet bound to
+ * a location. It will become bound to the location of the first bundle that
+ * registers a <code>ManagedService</code> or
+ * <code>ManagedServiceFactory</code> object with the corresponding PID.
+ * <p>
+ * The same <code>Configuration</code> object is used for configuring both a
+ * Managed Service Factory and a Managed Service. When it is important to
+ * differentiate between these two the term "factory configuration" is used.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Configuration {
+ /**
+ * Get the PID for this <code>Configuration</code> object.
+ *
+ * @return the PID for this <code>Configuration</code> object.
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public String getPid();
+
+ /**
+ * Return the properties of this <code>Configuration</code> object.
+ *
+ * The <code>Dictionary</code> object returned is a private copy for the
+ * caller and may be changed without influencing the stored configuration.
+ * The keys in the returned dictionary are case insensitive and are always
+ * of type <code>String</code>.
+ *
+ * <p>
+ * If called just after the configuration is created and before update has
+ * been called, this method returns <code>null</code>.
+ *
+ * @return A private copy of the properties for the caller or
+ * <code>null</code>. These properties must not contain the
+ * "service.bundleLocation" property. The value of this property may
+ * be obtained from the <code>getBundleLocation</code> method.
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public Dictionary getProperties();
+
+ /**
+ * Update the properties of this <code>Configuration</code> object.
+ *
+ * Stores the properties in persistent storage after adding or overwriting
+ * the following properties:
+ * <ul>
+ * <li>"service.pid" : is set to be the PID of this configuration.</li>
+ * <li>"service.factoryPid" : if this is a factory configuration it is set
+ * to the factory PID else it is not set.</li>
+ * </ul>
+ * These system properties are all of type <code>String</code>.
+ *
+ * <p>
+ * If the corresponding Managed Service/Managed Service Factory is
+ * registered, its updated method must be called asynchronously. Else, this
+ * callback is delayed until aforementioned registration occurs.
+ *
+ * <p>
+ * Also initiates an asynchronous call to all
+ * <code>ConfigurationListener</code>s with a
+ * <code>ConfigurationEvent.CM_UPDATED</code> event.
+ *
+ * @param properties the new set of properties for this configuration
+ * @throws IOException if update cannot be made persistent
+ * @throws IllegalArgumentException if the <code>Dictionary</code> object
+ * contains invalid configuration types or contains case variants of
+ * the same key name.
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public void update(Dictionary properties) throws IOException;
+
+ /**
+ * Delete this <code>Configuration</code> object.
+ *
+ * Removes this configuration object from the persistent store. Notify
+ * asynchronously the corresponding Managed Service or Managed Service
+ * Factory. A <code>ManagedService</code> object is notified by a call to
+ * its <code>updated</code> method with a <code>null</code> properties
+ * argument. A <code>ManagedServiceFactory</code> object is notified by a
+ * call to its <code>deleted</code> method.
+ *
+ * <p>
+ * Also initiates an asynchronous call to all
+ * <code>ConfigurationListener</code>s with a
+ * <code>ConfigurationEvent.CM_DELETED</code> event.
+ *
+ * @throws IOException If delete fails
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public void delete() throws IOException;
+
+ /**
+ * For a factory configuration return the PID of the corresponding Managed
+ * Service Factory, else return <code>null</code>.
+ *
+ * @return factory PID or <code>null</code>
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public String getFactoryPid();
+
+ /**
+ * Update the <code>Configuration</code> object with the current
+ * properties.
+ *
+ * Initiate the <code>updated</code> callback to the Managed Service or
+ * Managed Service Factory with the current properties asynchronously.
+ *
+ * <p>
+ * This is the only way for a bundle that uses a Configuration Plugin
+ * service to initiate a callback. For example, when that bundle detects a
+ * change that requires an update of the Managed Service or Managed Service
+ * Factory via its <code>ConfigurationPlugin</code> object.
+ *
+ * @see ConfigurationPlugin
+ * @throws IOException if update cannot access the properties in persistent
+ * storage
+ * @throws IllegalStateException if this configuration has been deleted
+ */
+ public void update() throws IOException;
+
+ /**
+ * Bind this <code>Configuration</code> object to the specified bundle
+ * location.
+ *
+ * If the bundleLocation parameter is <code>null</code> then the
+ * <code>Configuration</code> object will not be bound to a location. It
+ * will be set to the bundle's location before the first time a Managed
+ * Service/Managed Service Factory receives this <code>Configuration</code>
+ * object via the updated method and before any plugins are called. The
+ * bundle location will be set persistently.
+ *
+ * @param bundleLocation a bundle location or <code>null</code>
+ * @throws IllegalStateException If this configuration has been deleted.
+ * @throws SecurityException If the caller does not have
+ * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ */
+ public void setBundleLocation(String bundleLocation);
+
+ /**
+ * Get the bundle location.
+ *
+ * Returns the bundle location to which this configuration is bound, or
+ * <code>null</code> if it is not yet bound to a bundle location.
+ *
+ * @return location to which this configuration is bound, or
+ * <code>null</code>.
+ * @throws IllegalStateException If this <code>Configuration</code> object
+ * has been deleted.
+ * @throws SecurityException If the caller does not have
+ * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ */
+ public String getBundleLocation();
+
+ /**
+ * Equality is defined to have equal PIDs
+ *
+ * Two Configuration objects are equal when their PIDs are equal.
+ *
+ * @param other <code>Configuration</code> object to compare against
+ * @return <code>true</code> if equal, <code>false</code> if not a
+ * <code>Configuration</code> object or one with a different PID.
+ */
+ public boolean equals(Object other);
+
+ /**
+ * Hash code is based on PID.
+ *
+ * The hashcode for two Configuration objects must be the same when the
+ * Configuration PID's are the same.
+ *
+ * @return hash code for this Configuration object
+ */
+ public int hashCode();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java
new file mode 100644
index 0000000..a8d0a78
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.io.IOException;
+import java.util.Dictionary;
+
+import org.osgi.framework.InvalidSyntaxException;
+
+/**
+ * Service for administering configuration data.
+ *
+ * <p>
+ * The main purpose of this interface is to store bundle configuration data
+ * persistently. This information is represented in <code>Configuration</code>
+ * objects. The actual configuration data is a <code>Dictionary</code> of
+ * properties inside a <code>Configuration</code> object.
+ *
+ * <p>
+ * There are two principally different ways to manage configurations. First
+ * there is the concept of a Managed Service, where configuration data is
+ * uniquely associated with an object registered with the service registry.
+ *
+ * <p>
+ * Next, there is the concept of a factory where the Configuration Admin service
+ * will maintain 0 or more <code>Configuration</code> objects for a Managed
+ * Service Factory that is registered with the Framework.
+ *
+ * <p>
+ * The first concept is intended for configuration data about "things/services"
+ * whose existence is defined externally, e.g. a specific printer. Factories are
+ * intended for "things/services" that can be created any number of times, e.g.
+ * a configuration for a DHCP server for different networks.
+ *
+ * <p>
+ * Bundles that require configuration should register a Managed Service or a
+ * Managed Service Factory in the service registry. A registration property
+ * named <code>service.pid</code> (persistent identifier or PID) must be used
+ * to identify this Managed Service or Managed Service Factory to the
+ * Configuration Admin service.
+ *
+ * <p>
+ * When the ConfigurationAdmin detects the registration of a Managed Service, it
+ * checks its persistent storage for a configuration object whose PID matches
+ * the PID registration property (<code>service.pid</code>) of the Managed
+ * Service. If found, it calls {@link ManagedService#updated} method with the
+ * new properties. The implementation of a Configuration Admin service must run
+ * these call-backs asynchronously to allow proper synchronization.
+ *
+ * <p>
+ * When the Configuration Admin service detects a Managed Service Factory
+ * registration, it checks its storage for configuration objects whose
+ * <code>factoryPid</code> matches the PID of the Managed Service Factory. For
+ * each such <code>Configuration</code> objects, it calls the
+ * <code>ManagedServiceFactory.updated</code> method asynchronously with the
+ * new properties. The calls to the <code>updated</code> method of a
+ * <code>ManagedServiceFactory</code> must be executed sequentially and not
+ * overlap in time.
+ *
+ * <p>
+ * In general, bundles having permission to use the Configuration Admin service
+ * can only access and modify their own configuration information. Accessing or
+ * modifying the configuration of another bundle requires
+ * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ *
+ * <p>
+ * <code>Configuration</code> objects can be <i>bound </i> to a specified
+ * bundle location. In this case, if a matching Managed Service or Managed
+ * Service Factory is registered by a bundle with a different location, then the
+ * Configuration Admin service must not do the normal callback, and it should
+ * log an error. In the case where a <code>Configuration</code> object is not
+ * bound, its location field is <code>null</code>, the Configuration Admin
+ * service will bind it to the location of the bundle that registers the first
+ * Managed Service or Managed Service Factory that has a corresponding PID
+ * property. When a <code>Configuration</code> object is bound to a bundle
+ * location in this manner, the Configuration Admin service must detect if the
+ * bundle corresponding to the location is uninstalled. If this occurs, the
+ * <code>Configuration</code> object is unbound, that is its location field is
+ * set back to <code>null</code>.
+ *
+ * <p>
+ * The method descriptions of this class refer to a concept of "the calling
+ * bundle". This is a loose way of referring to the bundle which obtained the
+ * Configuration Admin service from the service registry. Implementations of
+ * <code>ConfigurationAdmin</code> must use a
+ * {@link org.osgi.framework.ServiceFactory} to support this concept.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ConfigurationAdmin {
+ /**
+ * Service property naming the Factory PID in the configuration dictionary.
+ * The property's value is of type <code>String</code>.
+ *
+ * @since 1.1
+ */
+ public final static String SERVICE_FACTORYPID = "service.factoryPid";
+ /**
+ * Service property naming the location of the bundle that is associated
+ * with a a <code>Configuration</code> object. This property can be
+ * searched for but must not appear in the configuration dictionary for
+ * security reason. The property's value is of type <code>String</code>.
+ *
+ * @since 1.1
+ */
+ public final static String SERVICE_BUNDLELOCATION = "service.bundleLocation";
+
+ /**
+ * Create a new factory <code>Configuration</code> object with a new PID.
+ *
+ * The properties of the new <code>Configuration</code> object are
+ * <code>null</code> until the first time that its
+ * {@link Configuration#update(Dictionary)} method is called.
+ *
+ * <p>
+ * It is not required that the <code>factoryPid</code> maps to a
+ * registered Managed Service Factory.
+ * <p>
+ * The <code>Configuration</code> object is bound to the location of the
+ * calling bundle.
+ *
+ * @param factoryPid PID of factory (not <code>null</code>).
+ * @return A new <code>Configuration</code> object.
+ * @throws IOException if access to persistent storage fails.
+ * @throws SecurityException if caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code> and <code>factoryPid</code> is bound to another bundle.
+ */
+ public Configuration createFactoryConfiguration(String factoryPid)
+ throws IOException;
+
+ /**
+ * Create a new factory <code>Configuration</code> object with a new PID.
+ *
+ * The properties of the new <code>Configuration</code> object are
+ * <code>null</code> until the first time that its
+ * {@link Configuration#update(Dictionary)} method is called.
+ *
+ * <p>
+ * It is not required that the <code>factoryPid</code> maps to a
+ * registered Managed Service Factory.
+ *
+ * <p>
+ * The <code>Configuration</code> is bound to the location specified. If
+ * this location is <code>null</code> it will be bound to the location of
+ * the first bundle that registers a Managed Service Factory with a
+ * corresponding PID.
+ *
+ * @param factoryPid PID of factory (not <code>null</code>).
+ * @param location A bundle location string, or <code>null</code>.
+ * @return a new <code>Configuration</code> object.
+ * @throws IOException if access to persistent storage fails.
+ * @throws SecurityException if caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ */
+ public Configuration createFactoryConfiguration(String factoryPid, String location)
+ throws IOException;
+
+ /**
+ * Get an existing <code>Configuration</code> object from the persistent
+ * store, or create a new <code>Configuration</code> object.
+ *
+ * <p>
+ * If a <code>Configuration</code> with this PID already exists in
+ * Configuration Admin service return it. The location parameter is ignored
+ * in this case.
+ *
+ * <p>
+ * Else, return a new <code>Configuration</code> object. This new object
+ * is bound to the location and the properties are set to <code>null</code>.
+ * If the location parameter is <code>null</code>, it will be set when a
+ * Managed Service with the corresponding PID is registered for the first
+ * time.
+ *
+ * @param pid Persistent identifier.
+ * @param location The bundle location string, or <code>null</code>.
+ * @return An existing or new <code>Configuration</code> object.
+ * @throws IOException if access to persistent storage fails.
+ * @throws SecurityException if the caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ */
+ public Configuration getConfiguration(String pid, String location)
+ throws IOException;
+
+ /**
+ * Get an existing or new <code>Configuration</code> object from the
+ * persistent store.
+ *
+ * If the <code>Configuration</code> object for this PID does not exist,
+ * create a new <code>Configuration</code> object for that PID, where
+ * properties are <code>null</code>. Bind its location to the calling
+ * bundle's location.
+ *
+ * <p>
+ * Otherwise, if the location of the existing <code>Configuration</code> object
+ * is <code>null</code>, set it to the calling bundle's location.
+ *
+ * @param pid persistent identifier.
+ * @return an existing or new <code>Configuration</code> matching the PID.
+ * @throws IOException if access to persistent storage fails.
+ * @throws SecurityException if the <code>Configuration</code> object is bound to a location different from that of the calling bundle and it has no <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ */
+ public Configuration getConfiguration(String pid) throws IOException;
+
+ /**
+ * List the current <code>Configuration</code> objects which match the
+ * filter.
+ *
+ * <p>
+ * Only <code>Configuration</code> objects with non- <code>null</code>
+ * properties are considered current. That is,
+ * <code>Configuration.getProperties()</code> is guaranteed not to return
+ * <code>null</code> for each of the returned <code>Configuration</code>
+ * objects.
+ *
+ * <p>
+ * Normally only <code>Configuration</code> objects that are bound to the
+ * location of the calling bundle are returned, or all if the caller has
+ * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ *
+ * <p>
+ * The syntax of the filter string is as defined in the {@link org.osgi.framework.Filter}
+ * class. The filter can test any configuration parameters including the
+ * following system properties:
+ * <ul>
+ * <li><code>service.pid</code>-<code>String</code>- the PID under
+ * which this is registered</li>
+ * <li><code>service.factoryPid</code>-<code>String</code>- the
+ * factory if applicable</li>
+ * <li><code>service.bundleLocation</code>-<code>String</code>- the
+ * bundle location</li>
+ * </ul>
+ * The filter can also be <code>null</code>, meaning that all
+ * <code>Configuration</code> objects should be returned.
+ *
+ * @param filter A filter string, or <code>null</code> to
+ * retrieve all <code>Configuration</code> objects.
+ * @return All matching <code>Configuration</code> objects, or
+ * <code>null</code> if there aren't any.
+ * @throws IOException if access to persistent storage fails
+ * @throws InvalidSyntaxException if the filter string is invalid
+ */
+ public Configuration[] listConfigurations(String filter) throws IOException,
+ InvalidSyntaxException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java
new file mode 100644
index 0000000..f17007f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.util.Dictionary;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A Configuration Event.
+ *
+ * <p>
+ * <code>ConfigurationEvent</code> objects are delivered to all registered
+ * <code>ConfigurationListener</code> service objects. ConfigurationEvents
+ * must be asynchronously delivered in chronological order with respect to each
+ * listener.
+ *
+ * <p>
+ * A type code is used to identify the type of event. The following event types
+ * are defined:
+ * <ul>
+ * <li>{@link #CM_UPDATED}
+ * <li>{@link #CM_DELETED}
+ * </ul>
+ * Additional event types may be defined in the future.
+ *
+ * <p>
+ * Security Considerations. <code>ConfigurationEvent</code> objects do not
+ * provide <code>Configuration</code> objects, so no sensitive configuration
+ * information is available from the event. If the listener wants to locate the
+ * <code>Configuration</code> object for the specified pid, it must use
+ * <code>ConfigurationAdmin</code>.
+ *
+ * @see ConfigurationListener
+ *
+ * @version $Revision: 6180 $
+ * @since 1.2
+ */
+public class ConfigurationEvent {
+ /**
+ * A <code>Configuration</code> has been updated.
+ *
+ * <p>
+ * This <code>ConfigurationEvent</code> type that indicates that a
+ * <code>Configuration</code> object has been updated with new properties.
+ *
+ * An event is fired when a call to {@link Configuration#update(Dictionary)}
+ * successfully changes a configuration.
+ *
+ * <p>
+ * The value of <code>CM_UPDATED</code> is 1.
+ */
+ public static final int CM_UPDATED = 1;
+ /**
+ * A <code>Configuration</code> has been deleted.
+ *
+ * <p>
+ * This <code>ConfigurationEvent</code> type that indicates that a
+ * <code>Configuration</code> object has been deleted.
+ *
+ * An event is fired when a call to {@link Configuration#delete()}
+ * successfully deletes a configuration.
+ *
+ * <p>
+ * The value of <code>CM_DELETED</code> is 2.
+ */
+ public static final int CM_DELETED = 2;
+ /**
+ * Type of this event.
+ *
+ * @see #getType
+ */
+ private final int type;
+ /**
+ * The factory pid associated with this event.
+ */
+ private final String factoryPid;
+ /**
+ * The pid associated with this event.
+ */
+ private final String pid;
+ /**
+ * The ConfigurationAdmin service which created this event.
+ */
+ private final ServiceReference reference;
+
+ /**
+ * Constructs a <code>ConfigurationEvent</code> object from the given
+ * <code>ServiceReference</code> object, event type, and pids.
+ *
+ * @param reference The <code>ServiceReference</code> object of the
+ * Configuration Admin service that created this event.
+ * @param type The event type. See {@link #getType}.
+ * @param factoryPid The factory pid of the associated configuration if the
+ * target of the configuration is a ManagedServiceFactory. Otherwise
+ * <code>null</code> if the target of the configuration is a
+ * ManagedService.
+ * @param pid The pid of the associated configuration.
+ */
+ public ConfigurationEvent(ServiceReference reference, int type,
+ String factoryPid, String pid) {
+ this.reference = reference;
+ this.type = type;
+ this.factoryPid = factoryPid;
+ this.pid = pid;
+ if ((reference == null) || (pid == null)) {
+ throw new NullPointerException("reference and pid must not be null");
+ }
+ }
+
+ /**
+ * Returns the factory pid of the associated configuration.
+ *
+ * @return Returns the factory pid of the associated configuration if the
+ * target of the configuration is a ManagedServiceFactory. Otherwise
+ * <code>null</code> if the target of the configuration is a
+ * ManagedService.
+ */
+ public String getFactoryPid() {
+ return factoryPid;
+ }
+
+ /**
+ * Returns the pid of the associated configuration.
+ *
+ * @return Returns the pid of the associated configuration.
+ */
+ public String getPid() {
+ return pid;
+ }
+
+ /**
+ * Return the type of this event.
+ * <p>
+ * The type values are:
+ * <ul>
+ * <li>{@link #CM_UPDATED}
+ * <li>{@link #CM_DELETED}
+ * </ul>
+ *
+ * @return The type of this event.
+ */
+ public int getType() {
+ return type;
+ }
+
+ /**
+ * Return the <code>ServiceReference</code> object of the Configuration
+ * Admin service that created this event.
+ *
+ * @return The <code>ServiceReference</code> object for the Configuration
+ * Admin service that created this event.
+ */
+ public ServiceReference getReference() {
+ return reference;
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java
new file mode 100644
index 0000000..300f5c8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+/**
+ * An <code>Exception</code> class to inform the Configuration Admin service
+ * of problems with configuration data.
+ *
+ * @version $Revision: 6083 $
+ */
+public class ConfigurationException extends Exception {
+ static final long serialVersionUID = -1690090413441769377L;
+
+ private final String property;
+ private final String reason;
+
+ /**
+ * Create a <code>ConfigurationException</code> object.
+ *
+ * @param property name of the property that caused the problem,
+ * <code>null</code> if no specific property was the cause
+ * @param reason reason for failure
+ */
+ public ConfigurationException(String property, String reason) {
+ super(property + " : " + reason);
+ this.property = property;
+ this.reason = reason;
+ }
+
+ /**
+ * Create a <code>ConfigurationException</code> object.
+ *
+ * @param property name of the property that caused the problem,
+ * <code>null</code> if no specific property was the cause
+ * @param reason reason for failure
+ * @param cause The cause of this exception.
+ * @since 1.2
+ */
+ public ConfigurationException(String property, String reason,
+ Throwable cause) {
+ super(property + " : " + reason, cause);
+ this.property = property;
+ this.reason = reason;
+ }
+
+ /**
+ * Return the property name that caused the failure or null.
+ *
+ * @return name of property or null if no specific property caused the
+ * problem
+ */
+ public String getProperty() {
+ return property;
+ }
+
+ /**
+ * Return the reason for this exception.
+ *
+ * @return reason of the failure
+ */
+ public String getReason() {
+ return reason;
+ }
+
+ /**
+ * Returns the cause of this exception or <code>null</code> if no cause was
+ * set.
+ *
+ * @return The cause of this exception or <code>null</code> if no cause was
+ * set.
+ * @since 1.2
+ */
+ public Throwable getCause() {
+ return super.getCause();
+ }
+
+ /**
+ * Initializes the cause of this exception to the specified value.
+ *
+ * @param cause The cause of this exception.
+ * @return This exception.
+ * @throws IllegalArgumentException If the specified cause is this
+ * exception.
+ * @throws IllegalStateException If the cause of this exception has already
+ * been set.
+ * @since 1.2
+ */
+ public Throwable initCause(Throwable cause) {
+ return super.initCause(cause);
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java
new file mode 100644
index 0000000..5d7793d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+/**
+ * Listener for Configuration Events. When a <code>ConfigurationEvent</code>
+ * is fired, it is asynchronously delivered to a
+ * <code>ConfigurationListener</code>.
+ *
+ * <p>
+ * <code>ConfigurationListener</code> objects are registered with the
+ * Framework service registry and are notified with a
+ * <code>ConfigurationEvent</code> object when an event is fired.
+ * <p>
+ * <code>ConfigurationListener</code> objects can inspect the received
+ * <code>ConfigurationEvent</code> object to determine its type, the pid of
+ * the <code>Configuration</code> object with which it is associated, and the
+ * Configuration Admin service that fired the event.
+ *
+ * <p>
+ * Security Considerations. Bundles wishing to monitor configuration events will
+ * require <code>ServicePermission[ConfigurationListener,REGISTER]</code> to
+ * register a <code>ConfigurationListener</code> service.
+ *
+ * @version $Revision: 5673 $
+ * @since 1.2
+ */
+public interface ConfigurationListener {
+ /**
+ * Receives notification of a Configuration that has changed.
+ *
+ * @param event The <code>ConfigurationEvent</code>.
+ */
+ public void configurationEvent(ConfigurationEvent event);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java
new file mode 100644
index 0000000..3af9088
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.cm;
+
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+/**
+ * Indicates a bundle's authority to configure bundles.
+ *
+ * This permission has only a single action: CONFIGURE.
+ *
+ * @ThreadSafe
+ * @version $Revision: 6381 $
+ * @since 1.2
+ */
+
+public final class ConfigurationPermission extends BasicPermission {
+ static final long serialVersionUID = 5716868734811965383L;
+ /**
+ * The action string <code>configure</code>.
+ */
+ public final static String CONFIGURE = "configure";
+
+ /**
+ * Create a new ConfigurationPermission.
+ *
+ * @param name Name must be "*".
+ * @param actions <code>configure</code> (canonical order).
+ */
+
+ public ConfigurationPermission(String name, String actions) {
+ super(name);
+ if (!name.equals("*")) {
+ throw new IllegalArgumentException("name must be *");
+ }
+ actions = actions.trim();
+ if (actions.equalsIgnoreCase(CONFIGURE)||actions.equals("*"))
+ return;
+
+ throw new IllegalArgumentException("actions must be " + CONFIGURE);
+ }
+
+ /**
+ * Determines if a <code>ConfigurationPermission</code> object "implies"
+ * the specified permission.
+ *
+ * @param p The target permission to check.
+ * @return <code>true</code> if the specified permission is implied by
+ * this object; <code>false</code> otherwise.
+ */
+
+ public boolean implies(Permission p) {
+ return p instanceof ConfigurationPermission;
+ }
+
+ /**
+ * Determines the equality of two <code>ConfigurationPermission</code>
+ * objects.
+ * <p>
+ * Two <code>ConfigurationPermission</code> objects are equal.
+ *
+ * @param obj The object being compared for equality with this object.
+ * @return <code>true</code> if <code>obj</code> is equivalent to this
+ * <code>ConfigurationPermission</code>; <code>false</code>
+ * otherwise.
+ */
+ public boolean equals(Object obj) {
+ return obj instanceof ConfigurationPermission;
+ }
+
+ /**
+ * Returns the hash code value for this object.
+ *
+ * @return Hash code value for this object.
+ */
+
+ public int hashCode() {
+ int h = 31 * 17 + getName().hashCode();
+ h = 31 * h + getActions().hashCode();
+ return h;
+ }
+
+ /**
+ * Returns the canonical string representation of the
+ * <code>ConfigurationPermission</code> actions.
+ *
+ * <p>
+ * Always returns present <code>ConfigurationPermission</code> actions in
+ * the following order: <code>CONFIGURE</code>
+ *
+ * @return Canonical string representation of the
+ * <code>ConfigurationPermission</code> actions.
+ */
+ public String getActions() {
+ return CONFIGURE;
+ }
+
+ /**
+ * Returns a new <code>PermissionCollection</code> object suitable for
+ * storing <code>ConfigurationPermission</code>s.
+ *
+ * @return A new <code>PermissionCollection</code> object.
+ */
+ public PermissionCollection newPermissionCollection() {
+ return new ConfigurationPermissionCollection();
+ }
+}
+
+/**
+ * Stores a set of <code>ConfigurationPermission</code> permissions.
+ *
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ */
+final class ConfigurationPermissionCollection extends PermissionCollection {
+ static final long serialVersionUID = -6917638867081695839L;
+ /**
+ * True if collection is non-empty.
+ *
+ * @serial
+ */
+ private volatile boolean hasElement;
+
+ /**
+ * Creates an empty <tt>ConfigurationPermissionCollection</tt> object.
+ *
+ */
+ public ConfigurationPermissionCollection() {
+ hasElement = false;
+ }
+
+ /**
+ * Adds the specified permission to the
+ * <tt>ConfigurationPermissionCollection</tt>. The key for the hash is
+ * the interface name of the service.
+ *
+ * @param permission The <tt>Permission</tt> object to add.
+ *
+ * @exception IllegalArgumentException If the permission is not an
+ * <tt>ConfigurationPermission</tt>.
+ *
+ * @exception SecurityException If this ConfigurationPermissionCollection
+ * object has been marked read-only.
+ */
+
+ public void add(Permission permission) {
+ if (!(permission instanceof ConfigurationPermission)) {
+ throw new IllegalArgumentException("invalid permission: "
+ + permission);
+ }
+
+ if (isReadOnly())
+ throw new SecurityException("attempt to add a Permission to a "
+ + "readonly PermissionCollection");
+
+ hasElement = true;
+ }
+
+ /**
+ * Determines if the specified set of permissions implies the permissions
+ * expressed in the parameter <tt>permission</tt>.
+ *
+ * @param p The Permission object to compare.
+ *
+ * @return true if permission is a proper subset of a permission in the set;
+ * false otherwise.
+ */
+
+ public boolean implies(Permission p) {
+ return hasElement && (p instanceof ConfigurationPermission);
+ }
+
+ /**
+ * Returns an enumeration of an <tt>ConfigurationPermission</tt> object.
+ *
+ * @return Enumeration of an <tt>ConfigurationPermission</tt> object.
+ */
+
+ public Enumeration elements() {
+ final boolean nonEmpty = hasElement;
+ return new Enumeration() {
+ private boolean more = nonEmpty;
+
+ public boolean hasMoreElements() {
+ return more;
+ }
+
+ public Object nextElement() {
+ if (more) {
+ more = false;
+
+ return new ConfigurationPermission("*",
+ ConfigurationPermission.CONFIGURE);
+ }
+ else {
+ throw new NoSuchElementException();
+ }
+ }
+ };
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java
new file mode 100644
index 0000000..574466e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.util.Dictionary;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A service interface for processing configuration dictionary before the
+ * update.
+ *
+ * <p>
+ * A bundle registers a <code>ConfigurationPlugin</code> object in order to
+ * process configuration updates before they reach the Managed Service or
+ * Managed Service Factory. The Configuration Admin service will detect
+ * registrations of Configuration Plugin services and must call these services
+ * every time before it calls the <code>ManagedService</code> or
+ * <code>ManagedServiceFactory</code>
+ * <code>updated</code> method. The
+ * Configuration Plugin service thus has the opportunity to view and modify the
+ * properties before they are passed to the Managed Service or Managed Service
+ * Factory.
+ *
+ * <p>
+ * Configuration Plugin (plugin) services have full read/write access to all
+ * configuration information. Therefore, bundles using this facility should be
+ * trusted. Access to this facility should be limited with
+ * <code>ServicePermission[ConfigurationPlugin,REGISTER]</code>.
+ * Implementations of a Configuration Plugin service should assure that they
+ * only act on appropriate configurations.
+ *
+ * <p>
+ * The <code>Integer</code> <code>service.cmRanking</code> registration
+ * property may be specified. Not specifying this registration property, or
+ * setting it to something other than an <code>Integer</code>, is the same as
+ * setting it to the <code>Integer</code> zero. The
+ * <code>service.cmRanking</code> property determines the order in which
+ * plugins are invoked. Lower ranked plugins are called before higher ranked
+ * ones. In the event of more than one plugin having the same value of
+ * <code>service.cmRanking</code>, then the Configuration Admin service
+ * arbitrarily chooses the order in which they are called.
+ *
+ * <p>
+ * By convention, plugins with <code>service.cmRanking< 0</code> or
+ * <code>service.cmRanking > 1000</code> should not make modifications to
+ * the properties.
+ *
+ * <p>
+ * The Configuration Admin service has the right to hide properties from
+ * plugins, or to ignore some or all the changes that they make. This might be
+ * done for security reasons. Any such behavior is entirely implementation
+ * defined.
+ *
+ * <p>
+ * A plugin may optionally specify a <code>cm.target</code> registration
+ * property whose value is the PID of the Managed Service or Managed Service
+ * Factory whose configuration updates the plugin is intended to intercept. The
+ * plugin will then only be called with configuration updates that are targeted
+ * at the Managed Service or Managed Service Factory with the specified PID.
+ * Omitting the <code>cm.target</code> registration property means that the
+ * plugin is called for all configuration updates.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ConfigurationPlugin {
+ /**
+ * A service property to limit the Managed Service or Managed Service
+ * Factory configuration dictionaries a Configuration Plugin service
+ * receives.
+ *
+ * This property contains a <code>String[]</code> of PIDs. A Configuration
+ * Admin service must call a Configuration Plugin service only when this
+ * property is not set, or the target service's PID is listed in this
+ * property.
+ */
+ public static final String CM_TARGET = "cm.target";
+ /**
+ * A service property to specify the order in which plugins are invoked.
+ *
+ * This property contains an <code>Integer</code> ranking of the plugin.
+ * Not specifying this registration property, or setting it to something
+ * other than an <code>Integer</code>, is the same as setting it to the
+ * <code>Integer</code> zero. This property determines the order in which
+ * plugins are invoked. Lower ranked plugins are called before higher ranked
+ * ones.
+ *
+ * @since 1.2
+ */
+ public static final String CM_RANKING = "service.cmRanking";
+
+ /**
+ * View and possibly modify the a set of configuration properties before
+ * they are sent to the Managed Service or the Managed Service Factory. The
+ * Configuration Plugin services are called in increasing order of their
+ * <code>service.cmRanking</code> property. If this property is undefined
+ * or is a non- <code>Integer</code> type, 0 is used.
+ *
+ * <p>
+ * This method should not modify the properties unless the
+ * <code>service.cmRanking</code> of this plugin is in the range
+ * <code>0 <= service.cmRanking <= 1000</code>.
+ * <p>
+ * If this method throws any <code>Exception</code>, the Configuration
+ * Admin service must catch it and should log it.
+ *
+ * @param reference reference to the Managed Service or Managed Service
+ * Factory
+ * @param properties The configuration properties. This argument must not
+ * contain the "service.bundleLocation" property. The value of this
+ * property may be obtained from the
+ * <code>Configuration.getBundleLocation</code> method.
+ */
+ public void modifyConfiguration(ServiceReference reference,
+ Dictionary properties);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java
new file mode 100644
index 0000000..6812434
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.util.Dictionary;
+
+/**
+ * A service that can receive configuration data from a Configuration Admin
+ * service.
+ *
+ * <p>
+ * A Managed Service is a service that needs configuration data. Such an object
+ * should be registered with the Framework registry with the
+ * <code>service.pid</code> property set to some unique identifier called a
+ * PID.
+ *
+ * <p>
+ * If the Configuration Admin service has a <code>Configuration</code> object
+ * corresponding to this PID, it will callback the <code>updated()</code>
+ * method of the <code>ManagedService</code> object, passing the properties of
+ * that <code>Configuration</code> object.
+ *
+ * <p>
+ * If it has no such <code>Configuration</code> object, then it calls back
+ * with a <code>null</code> properties argument. Registering a Managed Service
+ * will always result in a callback to the <code>updated()</code> method
+ * provided the Configuration Admin service is, or becomes active. This callback
+ * must always be done asynchronously.
+ *
+ * <p>
+ * Else, every time that either of the <code>updated()</code> methods is
+ * called on that <code>Configuration</code> object, the
+ * <code>ManagedService.updated()</code> method with the new properties is
+ * called. If the <code>delete()</code> method is called on that
+ * <code>Configuration</code> object, <code>ManagedService.updated()</code>
+ * is called with a <code>null</code> for the properties parameter. All these
+ * callbacks must be done asynchronously.
+ *
+ * <p>
+ * The following example shows the code of a serial port that will create a port
+ * depending on configuration information.
+ *
+ * <pre>
+ *
+ * class SerialPort implements ManagedService {
+ *
+ * ServiceRegistration registration;
+ * Hashtable configuration;
+ * CommPortIdentifier id;
+ *
+ * synchronized void open(CommPortIdentifier id,
+ * BundleContext context) {
+ * this.id = id;
+ * registration = context.registerService(
+ * ManagedService.class.getName(),
+ * this,
+ * getDefaults()
+ * );
+ * }
+ *
+ * Hashtable getDefaults() {
+ * Hashtable defaults = new Hashtable();
+ * defaults.put( "port", id.getName() );
+ * defaults.put( "product", "unknown" );
+ * defaults.put( "baud", "9600" );
+ * defaults.put( Constants.SERVICE_PID,
+ * "com.acme.serialport." + id.getName() );
+ * return defaults;
+ * }
+ *
+ * public synchronized void updated(
+ * Dictionary configuration ) {
+ * if ( configuration ==
+ * <code>
+ * null
+ * </code>
+ * )
+ * registration.setProperties( getDefaults() );
+ * else {
+ * setSpeed( configuration.get("baud") );
+ * registration.setProperties( configuration );
+ * }
+ * }
+ * ...
+ * }
+ *
+ * </pre>
+ *
+ * <p>
+ * As a convention, it is recommended that when a Managed Service is updated, it
+ * should copy all the properties it does not recognize into the service
+ * registration properties. This will allow the Configuration Admin service to
+ * set properties on services which can then be used by other applications.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ManagedService {
+ /**
+ * Update the configuration for a Managed Service.
+ *
+ * <p>
+ * When the implementation of <code>updated(Dictionary)</code> detects any
+ * kind of error in the configuration properties, it should create a new
+ * <code>ConfigurationException</code> which describes the problem. This
+ * can allow a management system to provide useful information to a human
+ * administrator.
+ *
+ * <p>
+ * If this method throws any other <code>Exception</code>, the
+ * Configuration Admin service must catch it and should log it.
+ * <p>
+ * The Configuration Admin service must call this method asynchronously
+ * which initiated the callback. This implies that implementors of Managed
+ * Service can be assured that the callback will not take place during
+ * registration when they execute the registration in a synchronized method.
+ *
+ * @param properties A copy of the Configuration properties, or
+ * <code>null</code>. This argument must not contain the
+ * "service.bundleLocation" property. The value of this property may
+ * be obtained from the <code>Configuration.getBundleLocation</code>
+ * method.
+ * @throws ConfigurationException when the update fails
+ */
+ public void updated(Dictionary properties) throws ConfigurationException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java
new file mode 100644
index 0000000..8c334c0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.cm;
+
+import java.util.Dictionary;
+
+/**
+ * Manage multiple service instances.
+ *
+ * Bundles registering this interface are giving the Configuration Admin service
+ * the ability to create and configure a number of instances of a service that
+ * the implementing bundle can provide. For example, a bundle implementing a
+ * DHCP server could be instantiated multiple times for different interfaces
+ * using a factory.
+ *
+ * <p>
+ * Each of these <i>service instances </i> is represented, in the persistent
+ * storage of the Configuration Admin service, by a factory
+ * <code>Configuration</code> object that has a PID. When such a
+ * <code>Configuration</code> is updated, the Configuration Admin service
+ * calls the <code>ManagedServiceFactory</code> updated method with the new
+ * properties. When <code>updated</code> is called with a new PID, the Managed
+ * Service Factory should create a new factory instance based on these
+ * configuration properties. When called with a PID that it has seen before, it
+ * should update that existing service instance with the new configuration
+ * information.
+ *
+ * <p>
+ * In general it is expected that the implementation of this interface will
+ * maintain a data structure that maps PIDs to the factory instances that it has
+ * created. The semantics of a factory instance are defined by the Managed
+ * Service Factory. However, if the factory instance is registered as a service
+ * object with the service registry, its PID should match the PID of the
+ * corresponding <code>Configuration</code> object (but it should <b>not </b>
+ * be registered as a Managed Service!).
+ *
+ * <p>
+ * An example that demonstrates the use of a factory. It will create serial
+ * ports under command of the Configuration Admin service.
+ *
+ * <pre>
+ *
+ * class SerialPortFactory
+ * implements ManagedServiceFactory {
+ * ServiceRegistration registration;
+ * Hashtable ports;
+ * void start(BundleContext context) {
+ * Hashtable properties = new Hashtable();
+ * properties.put( Constants.SERVICE_PID,
+ * "com.acme.serialportfactory" );
+ * registration = context.registerService(
+ * ManagedServiceFactory.class.getName(),
+ * this,
+ * properties
+ * );
+ * }
+ * public void updated( String pid,
+ * Dictionary properties ) {
+ * String portName = (String) properties.get("port");
+ * SerialPortService port =
+ * (SerialPort) ports.get( pid );
+ * if ( port == null ) {
+ * port = new SerialPortService();
+ * ports.put( pid, port );
+ * port.open();
+ * }
+ * if ( port.getPortName().equals(portName) )
+ * return;
+ * port.setPortName( portName );
+ * }
+ * public void deleted( String pid ) {
+ * SerialPortService port =
+ * (SerialPort) ports.get( pid );
+ * port.close();
+ * ports.remove( pid );
+ * }
+ * ...
+ * }
+ *
+ * </pre>
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ManagedServiceFactory {
+ /**
+ * Return a descriptive name of this factory.
+ *
+ * @return the name for the factory, which might be localized
+ */
+ public String getName();
+
+ /**
+ * Create a new instance, or update the configuration of an existing
+ * instance.
+ *
+ * If the PID of the <code>Configuration</code> object is new for the
+ * Managed Service Factory, then create a new factory instance, using the
+ * configuration <code>properties</code> provided. Else, update the
+ * service instance with the provided <code>properties</code>.
+ *
+ * <p>
+ * If the factory instance is registered with the Framework, then the
+ * configuration <code>properties</code> should be copied to its registry
+ * properties. This is not mandatory and security sensitive properties
+ * should obviously not be copied.
+ *
+ * <p>
+ * If this method throws any <code>Exception</code>, the Configuration
+ * Admin service must catch it and should log it.
+ *
+ * <p>
+ * When the implementation of updated detects any kind of error in the
+ * configuration properties, it should create a new
+ * {@link ConfigurationException} which describes the problem.
+ *
+ * <p>
+ * The Configuration Admin service must call this method asynchronously.
+ * This implies that implementors of the <code>ManagedServiceFactory</code>
+ * class can be assured that the callback will not take place during
+ * registration when they execute the registration in a synchronized method.
+ *
+ * @param pid The PID for this configuration.
+ * @param properties A copy of the configuration properties. This argument
+ * must not contain the service.bundleLocation" property. The value
+ * of this property may be obtained from the
+ * <code>Configuration.getBundleLocation</code> method.
+ * @throws ConfigurationException when the configuration properties are
+ * invalid.
+ */
+ public void updated(String pid, Dictionary properties)
+ throws ConfigurationException;
+
+ /**
+ * Remove a factory instance.
+ *
+ * Remove the factory instance associated with the PID. If the instance was
+ * registered with the service registry, it should be unregistered.
+ * <p>
+ * If this method throws any <code>Exception</code>, the Configuration
+ * Admin service must catch it and should log it.
+ * <p>
+ * The Configuration Admin service must call this method asynchronously.
+ *
+ * @param pid the PID of the service to be removed
+ */
+ public void deleted(String pid);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html
new file mode 100644
index 0000000..443d9c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Configuration Admin Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.cm; version="[1.2,2.0)"
+</pre>
+</BODY>
+
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo
new file mode 100644
index 0000000..6ebb891
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo
@@ -0,0 +1 @@
+version 1.2.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java
new file mode 100644
index 0000000..2f9d089
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.component;
+
+/**
+ * Defines standard names for Service Component constants.
+ *
+ * @version $Revision: 6454 $
+ */
+public interface ComponentConstants {
+ /**
+ * Manifest header specifying the XML documents within a bundle that contain
+ * the bundle's Service Component descriptions.
+ * <p>
+ * The attribute value may be retrieved from the <code>Dictionary</code>
+ * object returned by the <code>Bundle.getHeaders</code> method.
+ */
+ public static final String SERVICE_COMPONENT = "Service-Component";
+
+ /**
+ * A component property for a component configuration that contains the name
+ * of the component as specified in the <code>name</code> attribute of the
+ * <code>component</code> element. The value of this property must be of
+ * type <code>String</code>.
+ */
+ public final static String COMPONENT_NAME = "component.name";
+
+ /**
+ * A component property that contains the generated id for a component
+ * configuration. The value of this property must be of type
+ * <code>Long</code>.
+ *
+ * <p>
+ * The value of this property is assigned by the Service Component Runtime
+ * when a component configuration is created. The Service Component Runtime
+ * assigns a unique value that is larger than all previously assigned values
+ * since the Service Component Runtime was started. These values are NOT
+ * persistent across restarts of the Service Component Runtime.
+ */
+ public final static String COMPONENT_ID = "component.id";
+
+ /**
+ * A service registration property for a Component Factory that contains the
+ * value of the <code>factory</code> attribute. The value of this property
+ * must be of type <code>String</code>.
+ */
+ public final static String COMPONENT_FACTORY = "component.factory";
+
+ /**
+ * The suffix for reference target properties. These properties contain the
+ * filter to select the target services for a reference. The value of this
+ * property must be of type <code>String</code>.
+ */
+ public final static String REFERENCE_TARGET_SUFFIX = ".target";
+
+ /**
+ * The reason the component configuration was deactivated is unspecified.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_UNSPECIFIED = 0;
+
+ /**
+ * The component configuration was deactivated because the component was disabled.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_DISABLED = 1;
+
+ /**
+ * The component configuration was deactivated because a reference became unsatisfied.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_REFERENCE = 2;
+
+ /**
+ * The component configuration was deactivated because its configuration was changed.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_CONFIGURATION_MODIFIED = 3;
+
+ /**
+ * The component configuration was deactivated because its configuration was deleted.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_CONFIGURATION_DELETED = 4;
+
+ /**
+ * The component configuration was deactivated because the component was disposed.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_DISPOSED = 5;
+
+ /**
+ * The component configuration was deactivated because the bundle was stopped.
+ *
+ * @since 1.1
+ */
+ public static final int DEACTIVATION_REASON_BUNDLE_STOPPED = 6;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java
new file mode 100644
index 0000000..aad348c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.component;
+
+import java.util.Dictionary;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A Component Context object is used by a component instance to interact with
+ * its execution context including locating services by reference name. Each
+ * component instance has a unique Component Context.
+ *
+ * <p>
+ * A component instance may have an activate method. If a component instance has
+ * a suitable and accessible activate method, this method will be called when a
+ * component configuration is activated. If the activate method takes a
+ * <code>ComponentContext</code> argument, it will be passed the component
+ * instance's Component Context object. If the activate method takes a
+ * <code>BundleContext</code> argument, it will be passed the component
+ * instance's Bundle Context object. If the activate method takes a
+ * <code>Map</code> argument, it will be passed an unmodifiable Map containing
+ * the component properties.
+ *
+ * <p>
+ * A component instance may have a deactivate method. If a component instance
+ * has a suitable and accessible deactivate method, this method will be called
+ * when the component configuration is deactivated. If the deactivate method
+ * takes a <code>ComponentContext</code> argument, it will be passed the
+ * component instance's Component Context object. If the deactivate method takes
+ * a <code>BundleContext</code> argument, it will be passed the component
+ * instance's Bundle Context object. If the deactivate method takes a
+ * <code>Map</code> argument, it will be passed an unmodifiable Map containing
+ * the component properties. If the deactivate method takes an <code>int</code>
+ * or <code>Integer</code> argument, it will be passed the reason code for the
+ * component instance's deactivation.
+ *
+ * @ThreadSafe
+ * @version $Revision: 6462 $
+ */
+public interface ComponentContext {
+ /**
+ * Returns the component properties for this Component Context.
+ *
+ * @return The properties for this Component Context. The Dictionary is read
+ * only and cannot be modified.
+ */
+ public Dictionary getProperties();
+
+ /**
+ * Returns the service object for the specified reference name.
+ *
+ * <p>
+ * If the cardinality of the reference is <code>0..n</code> or
+ * <code>1..n</code> and multiple services are bound to the reference, the
+ * service with the highest ranking (as specified in its
+ * <code>Constants.SERVICE_RANKING</code> property) is returned. If there is
+ * a tie in ranking, the service with the lowest service ID (as specified in
+ * its <code>Constants.SERVICE_ID</code> property); that is, the service
+ * that was registered first is returned.
+ *
+ * @param name The name of a reference as specified in a
+ * <code>reference</code> element in this component's description.
+ * @return A service object for the referenced service or <code>null</code>
+ * if the reference cardinality is <code>0..1</code> or
+ * <code>0..n</code> and no bound service is available.
+ * @throws ComponentException If the Service Component Runtime catches an
+ * exception while activating the bound service.
+ */
+ public Object locateService(String name);
+
+ /**
+ * Returns the service object for the specified reference name and
+ * <code>ServiceReference</code>.
+ *
+ * @param name The name of a reference as specified in a
+ * <code>reference</code> element in this component's description.
+ * @param reference The <code>ServiceReference</code> to a bound service.
+ * This must be a <code>ServiceReference</code> provided to the
+ * component via the bind or unbind method for the specified
+ * reference name.
+ * @return A service object for the referenced service or <code>null</code>
+ * if the specified <code>ServiceReference</code> is not a bound
+ * service for the specified reference name.
+ * @throws ComponentException If the Service Component Runtime catches an
+ * exception while activating the bound service.
+ */
+ public Object locateService(String name, ServiceReference reference);
+
+ /**
+ * Returns the service objects for the specified reference name.
+ *
+ * @param name The name of a reference as specified in a
+ * <code>reference</code> element in this component's description.
+ * @return An array of service objects for the referenced service or
+ * <code>null</code> if the reference cardinality is
+ * <code>0..1</code> or <code>0..n</code> and no bound service is
+ * available. If the reference cardinality is <code>0..1</code> or
+ * <code>1..1</code> and a bound service is available, the array
+ * will have exactly one element.
+ * @throws ComponentException If the Service Component Runtime catches an
+ * exception while activating a bound service.
+ */
+ public Object[] locateServices(String name);
+
+ /**
+ * Returns the <code>BundleContext</code> of the bundle which contains this
+ * component.
+ *
+ * @return The <code>BundleContext</code> of the bundle containing this
+ * component.
+ */
+ public BundleContext getBundleContext();
+
+ /**
+ * If the component instance is registered as a service using the
+ * <code>servicefactory="true"</code> attribute, then this method
+ * returns the bundle using the service provided by the component instance.
+ * <p>
+ * This method will return <code>null</code> if:
+ * <ul>
+ * <li>The component instance is not a service, then no bundle can be using
+ * it as a service.
+ * <li>The component instance is a service but did not specify the
+ * <code>servicefactory="true"</code> attribute, then all bundles
+ * using the service provided by the component instance will share the same
+ * component instance.
+ * <li>The service provided by the component instance is not currently being
+ * used by any bundle.
+ * </ul>
+ *
+ * @return The bundle using the component instance as a service or
+ * <code>null</code>.
+ */
+ public Bundle getUsingBundle();
+
+ /**
+ * Returns the Component Instance object for the component instance
+ * associated with this Component Context.
+ *
+ * @return The Component Instance object for the component instance.
+ */
+ public ComponentInstance getComponentInstance();
+
+ /**
+ * Enables the specified component name. The specified component name must
+ * be in the same bundle as this component.
+ *
+ * @param name The name of a component or <code>null</code> to indicate all
+ * components in the bundle.
+ */
+ public void enableComponent(String name);
+
+ /**
+ * Disables the specified component name. The specified component name must
+ * be in the same bundle as this component.
+ *
+ * @param name The name of a component.
+ */
+ public void disableComponent(String name);
+
+ /**
+ * If the component instance is registered as a service using the
+ * <code>service</code> element, then this method returns the service
+ * reference of the service provided by this component instance.
+ * <p>
+ * This method will return <code>null</code> if the component instance is
+ * not registered as a service.
+ *
+ * @return The <code>ServiceReference</code> object for the component
+ * instance or <code>null</code> if the component instance is not
+ * registered as a service.
+ */
+ public ServiceReference getServiceReference();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java
new file mode 100644
index 0000000..0aee948
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.component;
+
+/**
+ * Unchecked exception which may be thrown by the Service Component Runtime.
+ *
+ * @version $Revision: 6083 $
+ */
+public class ComponentException extends RuntimeException {
+ static final long serialVersionUID = -7438212656298726924L;
+
+ /**
+ * Construct a new ComponentException with the specified message and cause.
+ *
+ * @param message The message for the exception.
+ * @param cause The cause of the exception. May be <code>null</code>.
+ */
+ public ComponentException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Construct a new ComponentException with the specified message.
+ *
+ * @param message The message for the exception.
+ */
+ public ComponentException(String message) {
+ super(message);
+ }
+
+ /**
+ * Construct a new ComponentException with the specified cause.
+ *
+ * @param cause The cause of the exception. May be <code>null</code>.
+ */
+ public ComponentException(Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns the cause of this exception or <code>null</code> if no cause was
+ * set.
+ *
+ * @return The cause of this exception or <code>null</code> if no cause was
+ * set.
+ */
+ public Throwable getCause() {
+ return super.getCause();
+ }
+
+ /**
+ * Initializes the cause of this exception to the specified value.
+ *
+ * @param cause The cause of this exception.
+ * @return This exception.
+ * @throws IllegalArgumentException If the specified cause is this
+ * exception.
+ * @throws IllegalStateException If the cause of this exception has already
+ * been set.
+ */
+ public Throwable initCause(Throwable cause) {
+ return super.initCause(cause);
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java
new file mode 100644
index 0000000..1c77177
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.component;
+
+import java.util.Dictionary;
+
+/**
+ * When a component is declared with the <code>factory</code> attribute on its
+ * <code>component</code> element, the Service Component Runtime will register
+ * a Component Factory service to allow new component configurations to be
+ * created and activated rather than automatically creating and activating
+ * component configuration as necessary.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ */
+public interface ComponentFactory {
+ /**
+ * Create and activate a new component configuration. Additional properties
+ * may be provided for the component configuration.
+ *
+ * @param properties Additional properties for the component configuration
+ * or <code>null</code> if there are no additional properties.
+ * @return A <code>ComponentInstance</code> object encapsulating the
+ * component instance of the component configuration. The component
+ * configuration has been activated and, if the component specifies
+ * a <code>service</code> element, the component instance has been
+ * registered as a service.
+ * @throws ComponentException If the Service Component Runtime is unable to
+ * activate the component configuration.
+ */
+ public ComponentInstance newInstance(Dictionary properties);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java
new file mode 100644
index 0000000..f2bd2cb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.component;
+
+/**
+ * A ComponentInstance encapsulates a component instance of an activated
+ * component configuration. ComponentInstances are created whenever a component
+ * configuration is activated.
+ *
+ * <p>
+ * ComponentInstances are never reused. A new ComponentInstance object will be
+ * created when the component configuration is activated again.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ */
+public interface ComponentInstance {
+ /**
+ * Dispose of the component configuration for this component instance. The
+ * component configuration will be deactivated. If the component
+ * configuration has already been deactivated, this method does nothing.
+ */
+ public void dispose();
+
+ /**
+ * Returns the component instance of the activated component configuration.
+ *
+ * @return The component instance or <code>null</code> if the component
+ * configuration has been deactivated.
+ */
+ public Object getInstance();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html
new file mode 100644
index 0000000..2e7717e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Service Component Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.component; version="[1.1,2.0)"
+</pre>
+</BODY>
+
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/packageinfo
new file mode 100644
index 0000000..3987f9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/packageinfo
@@ -0,0 +1 @@
+version 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java
new file mode 100644
index 0000000..8787256
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+/**
+ * This interface defines standard names for property keys associated with
+ * {@link Device} and {@link Driver} services.
+ *
+ * <p>
+ * The values associated with these keys are of type <code>java.lang.String</code>,
+ * unless otherwise stated.
+ *
+ * @version $Revision: 5673 $
+ * @since 1.1
+ * @see Device
+ * @see Driver
+ */
+public interface Constants {
+ /**
+ * Property (named "DRIVER_ID") identifying a driver.
+ *
+ * <p>
+ * A <code>DRIVER_ID</code> should start with the reversed domain name of the
+ * company that implemented the driver (e.g., <code>com.acme</code>), and
+ * must meet the following requirements:
+ *
+ * <ul>
+ * <li>It must be independent of the location from where it is obtained.
+ * <li>It must be independent of the {@link DriverLocator} service that
+ * downloaded it.
+ * <li>It must be unique.
+ * <li>It must be different for different revisions of the same driver.
+ * </ul>
+ *
+ * <p>
+ * This property is mandatory, i.e., every <code>Driver</code> service must be
+ * registered with it.
+ */
+ public static final String DRIVER_ID = "DRIVER_ID";
+ /**
+ * Property (named "DEVICE_CATEGORY") containing a human readable
+ * description of the device categories implemented by a device. This
+ * property is of type <code>String[]</code>
+ *
+ * <p>
+ * Services registered with this property will be treated as devices and
+ * discovered by the device manager
+ */
+ public static final String DEVICE_CATEGORY = "DEVICE_CATEGORY";
+ /**
+ * Property (named "DEVICE_SERIAL") specifying a device's serial
+ * number.
+ */
+ public static final String DEVICE_SERIAL = "DEVICE_SERIAL";
+ /**
+ * Property (named "DEVICE_DESCRIPTION") containing a human
+ * readable string describing the actual hardware device.
+ */
+ public static final String DEVICE_DESCRIPTION = "DEVICE_DESCRIPTION";
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java
new file mode 100644
index 0000000..2af0330
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+/**
+ * <p>
+ * Interface for identifying device services.
+ *
+ * <p>
+ * A service must implement this interface or use the
+ * {@link Constants#DEVICE_CATEGORY} registration property to indicate that it
+ * is a device. Any services implementing this interface or registered with the
+ * <code>DEVICE_CATEGORY</code> property will be discovered by the device
+ * manager.
+ *
+ * <p>
+ * Device services implementing this interface give the device manager the
+ * opportunity to indicate to the device that no drivers were found that could
+ * (further) refine it. In this case, the device manager calls the
+ * {@link #noDriverFound} method on the <code>Device</code> object.
+ *
+ * <p>
+ * Specialized device implementations will extend this interface by adding
+ * methods appropriate to their device category to it.
+ *
+ * @version $Revision: 5654 $
+ * @see Driver
+ * @ThreadSafe
+ */
+public interface Device {
+ /**
+ * Return value from {@link Driver#match} indicating that the driver cannot
+ * refine the device presented to it by the device manager.
+ *
+ * The value is zero.
+ */
+ public static final int MATCH_NONE = 0;
+
+ /**
+ * Indicates to this <code>Device</code> object that the device manager has
+ * failed to attach any drivers to it.
+ *
+ * <p>
+ * If this <code>Device</code> object can be configured differently, the
+ * driver that registered this <code>Device</code> object may unregister it
+ * and register a different Device service instead.
+ */
+ public void noDriverFound();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java
new file mode 100644
index 0000000..98e3617
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A <code>Driver</code> service object must be registered by each Driver bundle
+ * wishing to attach to Device services provided by other drivers. For each
+ * newly discovered {@link Device} object, the device manager enters a bidding
+ * phase. The <code>Driver</code> object whose {@link #match} method bids the
+ * highest for a particular <code>Device</code> object will be instructed by the
+ * device manager to attach to the <code>Device</code> object.
+ *
+ * @version $Revision: 5654 $
+ * @see Device
+ * @see DriverLocator
+ * @ThreadSafe
+ */
+public interface Driver {
+ /**
+ * Checks whether this Driver service can be attached to the Device service.
+ *
+ * The Device service is represented by the given {@link ServiceReference}
+ * and returns a value indicating how well this driver can support the given
+ * Device service, or {@link Device#MATCH_NONE} if it cannot support the
+ * given Device service at all.
+ *
+ * <p>
+ * The return value must be one of the possible match values defined in the
+ * device category definition for the given Device service, or
+ * <code>Device.MATCH_NONE</code> if the category of the Device service is
+ * not recognized.
+ *
+ * <p>
+ * In order to make its decision, this Driver service may examine the
+ * properties associated with the given Device service, or may get the
+ * referenced service object (representing the actual physical device) to
+ * talk to it, as long as it ungets the service and returns the physical
+ * device to a normal state before this method returns.
+ *
+ * <p>
+ * A Driver service must always return the same match code whenever it is
+ * presented with the same Device service.
+ *
+ * <p>
+ * The match function is called by the device manager during the matching
+ * process.
+ *
+ * @param reference the <code>ServiceReference</code> object of the device
+ * to match
+ *
+ * @return value indicating how well this driver can support the given
+ * Device service, or <code>Device.MATCH_NONE</code> if it cannot
+ * support the Device service at all
+ *
+ * @throws java.lang.Exception if this Driver service cannot examine the
+ * Device service
+ */
+ public int match(ServiceReference reference) throws Exception;
+
+ /**
+ * Attaches this Driver service to the Device service represented by the
+ * given <code>ServiceReference</code> object.
+ *
+ * <p>
+ * A return value of <code>null</code> indicates that this Driver service
+ * has successfully attached to the given Device service. If this Driver
+ * service is unable to attach to the given Device service, but knows of a
+ * more suitable Driver service, it must return the <code>DRIVER_ID</code>
+ * of that Driver service. This allows for the implementation of referring
+ * drivers whose only purpose is to refer to other drivers capable of
+ * handling a given Device service.
+ *
+ * <p>
+ * After having attached to the Device service, this driver may register the
+ * underlying device as a new service exposing driver-specific
+ * functionality.
+ *
+ * <p>
+ * This method is called by the device manager.
+ *
+ * @param reference the <code>ServiceReference</code> object of the device
+ * to attach to
+ *
+ * @return <code>null</code> if this Driver service has successfully
+ * attached to the given Device service, or the
+ * <code>DRIVER_ID</code> of a more suitable driver
+ *
+ * @throws java.lang.Exception if the driver cannot attach to the given
+ * device and does not know of a more suitable driver
+ */
+ public String attach(ServiceReference reference) throws Exception;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java
new file mode 100644
index 0000000..2726b99
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Dictionary;
+
+/**
+ * A Driver Locator service can find and load device driver bundles given a
+ * property set. Each driver is represented by a unique <code>DRIVER_ID</code>.
+ * <p>
+ * Driver Locator services provide the mechanism for dynamically downloading new
+ * device driver bundles into an OSGi environment. They are supplied by
+ * providers and encapsulate all provider-specific details related to the
+ * location and acquisition of driver bundles.
+ *
+ * @version $Revision: 5654 $
+ * @see Driver
+ * @ThreadSafe
+ */
+public interface DriverLocator {
+ /**
+ * Returns an array of <code>DRIVER_ID</code> strings of drivers capable of
+ * attaching to a device with the given properties.
+ *
+ * <p>
+ * The property keys in the specified <code>Dictionary</code> objects are
+ * case-insensitive.
+ *
+ * @param props the properties of the device for which a driver is sought
+ * @return array of driver <code>DRIVER_ID</code> strings of drivers capable
+ * of attaching to a Device service with the given properties, or
+ * <code>null</code> if this Driver Locator service does not know of
+ * any such drivers
+ */
+ public String[] findDrivers(Dictionary props);
+
+ /**
+ * Get an <code>InputStream</code> from which the driver bundle providing a
+ * driver with the giving <code>DRIVER_ID</code> can be installed.
+ *
+ * @param id the <code>DRIVER_ID</code> of the driver that needs to be
+ * installed.
+ * @return An <code>InputStream</code> object from which the driver bundle
+ * can be installed or <code>null</code> if the driver with the
+ * given ID cannot be located
+ * @throws java.io.IOException the input stream for the bundle cannot be
+ * created
+ */
+ public InputStream loadDriver(String id) throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java
new file mode 100644
index 0000000..59fd0b9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * When the device manager detects a new Device service, it calls all registered
+ * Driver services to determine if anyone matches the Device service. If at
+ * least one Driver service matches, the device manager must choose one. If
+ * there is a Driver Selector service registered with the Framework, the device
+ * manager will ask it to make the selection. If there is no Driver Selector
+ * service, or if it returns an invalid result, or throws an
+ * <code>Exception</code>, the device manager uses the default selection
+ * strategy.
+ *
+ * @version $Revision: 5654 $
+ * @since 1.1
+ * @ThreadSafe
+ */
+public interface DriverSelector {
+ /**
+ * Return value from <code>DriverSelector.select</code>, if no Driver
+ * service should be attached to the Device service. The value is -1.
+ */
+ public static final int SELECT_NONE = -1;
+
+ /**
+ * Select one of the matching Driver services. The device manager calls this
+ * method if there is at least one driver bidding for a device. Only Driver
+ * services that have responded with nonzero (not {@link Device#MATCH_NONE})
+ * <code></code> match values will be included in the list.
+ *
+ * @param reference the <code>ServiceReference</code> object of the Device
+ * service.
+ * @param matches the array of all non-zero matches.
+ * @return index into the array of <code>Match</code> objects, or
+ * <code>SELECT_NONE</code> if no Driver service should be attached
+ */
+ public int select(ServiceReference reference, Match[] matches);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java
new file mode 100644
index 0000000..6410659
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.device;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Instances of <code>Match</code> are used in the {@link DriverSelector#select}
+ * method to identify Driver services matching a Device service.
+ *
+ * @version $Revision: 5654 $
+ * @since 1.1
+ * @see DriverSelector
+ * @ThreadSafe
+ */
+public interface Match {
+ /**
+ * Return the reference to a Driver service.
+ *
+ * @return <code>ServiceReference</code> object to a Driver service.
+ */
+ public ServiceReference getDriver();
+
+ /**
+ * Return the match value of this object.
+ *
+ * @return the match value returned by this Driver service.
+ */
+ public int getMatchValue();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html
new file mode 100644
index 0000000..7647c20
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Device Access Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.device; version="[1.1,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo
new file mode 100644
index 0000000..3987f9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo
@@ -0,0 +1 @@
+version 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java
new file mode 100644
index 0000000..42cdb1b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.osgi.framework.Filter;
+
+/**
+ * An event.
+ *
+ * <code>Event</code> objects are delivered to <code>EventHandler</code>
+ * services which subscribe to the topic of the event.
+ *
+ * @Immutable
+ * @version $Revision: 7003 $
+ */
+public class Event {
+ /**
+ * The topic of this event.
+ */
+ private final String topic;
+ /**
+ * The properties carried by this event. Keys are strings and values are
+ * objects
+ */
+ private final Map /* <String,Object> */properties;
+
+ /**
+ * Constructs an event.
+ *
+ * @param topic The topic of the event.
+ * @param properties The event's properties (may be <code>null</code>). A
+ * property whose key is not of type <code>String</code> will be
+ * ignored.
+ * @throws IllegalArgumentException If topic is not a valid topic name.
+ * @since 1.2
+ */
+ public Event(String topic, Map/* <String,Object> */properties) {
+ validateTopicName(topic);
+ this.topic = topic;
+ int size = (properties == null) ? 1 : (properties.size() + 1);
+ Map p = new HashMap(size);
+ if (properties != null) {
+ for (Iterator iter = properties.keySet().iterator(); iter.hasNext();) {
+ Object key = iter.next();
+ if (key instanceof String) {
+ Object value = properties.get(key);
+ p.put(key, value);
+ }
+ }
+ }
+ p.put(EventConstants.EVENT_TOPIC, topic);
+ this.properties = p; // safely publish the map
+ }
+
+ /**
+ * Constructs an event.
+ *
+ * @param topic The topic of the event.
+ * @param properties The event's properties (may be <code>null</code>). A
+ * property whose key is not of type <code>String</code> will be
+ * ignored.
+ * @throws IllegalArgumentException If topic is not a valid topic name.
+ */
+ public Event(String topic, Dictionary/* <String,Object> */properties) {
+ validateTopicName(topic);
+ this.topic = topic;
+ int size = (properties == null) ? 1 : (properties.size() + 1);
+ Map p = new HashMap(size);
+ if (properties != null) {
+ for (Enumeration e = properties.keys(); e.hasMoreElements();) {
+ Object key = e.nextElement();
+ if (key instanceof String) {
+ Object value = properties.get(key);
+ p.put(key, value);
+ }
+ }
+ }
+ p.put(EventConstants.EVENT_TOPIC, topic);
+ this.properties = p; // safely publish the map
+ }
+
+ /**
+ * Retrieves a property.
+ *
+ * @param name the name of the property to retrieve
+ * @return The value of the property, or <code>null</code> if not found.
+ */
+ public final Object getProperty(String name) {
+ return properties.get(name);
+ }
+
+ /**
+ * Returns a list of this event's property names.
+ *
+ * @return A non-empty array with one element per property.
+ */
+ public final String[] getPropertyNames() {
+ return (String[]) properties.keySet().toArray(
+ new String[properties.size()]);
+ }
+
+ /**
+ * Returns the topic of this event.
+ *
+ * @return The topic of this event.
+ */
+ public final String getTopic() {
+ return topic;
+ }
+
+ /**
+ * Tests this event's properties against the given filter using a case
+ * sensitive match.
+ *
+ * @param filter The filter to test.
+ * @return true If this event's properties match the filter, false
+ * otherwise.
+ */
+ public final boolean matches(Filter filter) {
+ return filter.matchCase(new UnmodifiableDictionary(properties));
+ }
+
+ /**
+ * Compares this <code>Event</code> object to another object.
+ *
+ * <p>
+ * An event is considered to be <b>equal to</b> another event if the topic
+ * is equal and the properties are equal.
+ *
+ * @param object The <code>Event</code> object to be compared.
+ * @return <code>true</code> if <code>object</code> is a <code>Event</code>
+ * and is equal to this object; <code>false</code> otherwise.
+ */
+ public boolean equals(Object object) {
+ if (object == this) { // quick test
+ return true;
+ }
+
+ if (!(object instanceof Event)) {
+ return false;
+ }
+
+ Event event = (Event) object;
+ return topic.equals(event.topic) && properties.equals(event.properties);
+ }
+
+ /**
+ * Returns a hash code value for the object.
+ *
+ * @return An integer which is a hash code value for this object.
+ */
+ public int hashCode() {
+ int h = 31 * 17 + topic.hashCode();
+ h = 31 * h + properties.hashCode();
+ return h;
+ }
+
+ /**
+ * Returns the string representation of this event.
+ *
+ * @return The string representation of this event.
+ */
+ public String toString() {
+ return getClass().getName() + " [topic=" + topic + "]";
+ }
+
+ /**
+ * Called by the constructor to validate the topic name.
+ *
+ * @param topic The topic name to validate.
+ * @throws IllegalArgumentException If the topic name is invalid.
+ */
+ private static void validateTopicName(String topic) {
+ char[] chars = topic.toCharArray();
+ int length = chars.length;
+ if (length == 0) {
+ throw new IllegalArgumentException("empty topic");
+ }
+ for (int i = 0; i < length; i++) {
+ char ch = chars[i];
+ if (ch == '/') {
+ // Can't start or end with a '/' but anywhere else is okay
+ if (i == 0 || (i == length - 1)) {
+ throw new IllegalArgumentException(
+ "invalid topic: "
+ + topic);
+ }
+ // Can't have "//" as that implies empty token
+ if (chars[i-1] == '/') {
+ throw new IllegalArgumentException(
+ "invalid topic: "
+ + topic);
+ }
+ continue;
+ }
+ if (('A' <= ch) && (ch <= 'Z')) {
+ continue;
+ }
+ if (('a' <= ch) && (ch <= 'z')) {
+ continue;
+ }
+ if (('0' <= ch) && (ch <= '9')) {
+ continue;
+ }
+ if ((ch == '_') || (ch == '-')) {
+ continue;
+ }
+ throw new IllegalArgumentException("invalid topic: " + topic);
+ }
+ }
+
+ /**
+ * Unmodifiable wrapper for Dictionary.
+ */
+ private static class UnmodifiableDictionary extends Dictionary {
+ private final Map wrapped;
+ UnmodifiableDictionary(Map wrapped) {
+ this.wrapped = wrapped;
+ }
+ public Enumeration elements() {
+ return Collections.enumeration(wrapped.values());
+ }
+ public Object get(Object key) {
+ return wrapped.get(key);
+ }
+ public boolean isEmpty() {
+ return wrapped.isEmpty();
+ }
+ public Enumeration keys() {
+ return Collections.enumeration(wrapped.keySet());
+ }
+ public Object put(Object key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+ public Object remove(Object key) {
+ throw new UnsupportedOperationException();
+ }
+ public int size() {
+ return wrapped.size();
+ }
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java
new file mode 100644
index 0000000..f48a10f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+/**
+ * The Event Admin service. Bundles wishing to publish events must obtain the
+ * Event Admin service and call one of the event delivery methods.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5673 $
+ */
+public interface EventAdmin {
+ /**
+ * Initiate asynchronous delivery of an event. This method returns to the
+ * caller before delivery of the event is completed.
+ *
+ * @param event The event to send to all listeners which subscribe to the
+ * topic of the event.
+ *
+ * @throws SecurityException If the caller does not have
+ * <code>TopicPermission[topic,PUBLISH]</code> for the topic
+ * specified in the event.
+ */
+ void postEvent(Event event);
+
+ /**
+ * Initiate synchronous delivery of an event. This method does not return to
+ * the caller until delivery of the event is completed.
+ *
+ * @param event The event to send to all listeners which subscribe to the
+ * topic of the event.
+ *
+ * @throws SecurityException If the caller does not have
+ * <code>TopicPermission[topic,PUBLISH]</code> for the topic
+ * specified in the event.
+ */
+ void sendEvent(Event event);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java
new file mode 100644
index 0000000..ac6b484
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
+
+/**
+ * Defines standard names for <code>EventHandler</code> properties.
+ *
+ * @version $Revision: 6080 $
+ */
+public interface EventConstants {
+
+ /**
+ * Service registration property (named <code>event.topics</code>)
+ * specifying the <code>Event</code> topics of interest to a Event Handler
+ * service.
+ * <p>
+ * Event handlers SHOULD be registered with this property. The value of the
+ * property is a string or an array of strings that describe the topics in
+ * which the handler is interested. An asterisk ('*') may be used as a
+ * trailing wildcard. Event Handlers which do not have a value for this
+ * property must not receive events. More precisely, the value of each
+ * string must conform to the following grammar:
+ *
+ * <pre>
+ * topic-description := '*' | topic ( '/*' )?
+ * topic := token ( '/' token )*
+ * </pre>
+ *
+ * @see Event
+ */
+ public static final String EVENT_TOPIC = "event.topics";
+
+ /**
+ * Service Registration property (named <code>event.filter</code>)
+ * specifying a filter to further select <code>Event</code> s of interest to
+ * a Event Handler service.
+ * <p>
+ * Event handlers MAY be registered with this property. The value of this
+ * property is a string containing an LDAP-style filter specification. Any
+ * of the event's properties may be used in the filter expression. Each
+ * event handler is notified for any event which belongs to the topics in
+ * which the handler has expressed an interest. If the event handler is also
+ * registered with this service property, then the properties of the event
+ * must also match the filter for the event to be delivered to the event
+ * handler.
+ * <p>
+ * If the filter syntax is invalid, then the Event Handler must be ignored
+ * and a warning should be logged.
+ *
+ * @see Event
+ * @see Filter
+ */
+ public static final String EVENT_FILTER = "event.filter";
+
+ /**
+ * The Distinguished Names of the signers of the bundle relevant to the
+ * event. The type of the value for this event property is
+ * <code>String</code> if there is a single signer or <code>String[]</code>
+ * if there are multiple signers.
+ */
+ public static final String BUNDLE_SIGNER = "bundle.signer";
+
+ /**
+ * The Bundle Symbolic Name of the bundle relevant to the event. The type of
+ * the value for this event property is <code>String</code>.
+ */
+ public static final String BUNDLE_SYMBOLICNAME = "bundle.symbolicName";
+
+ /**
+ * The Bundle id of the bundle relevant to the event. The type of the value
+ * for this event property is <code>Long</code>.
+ *
+ * @since 1.1
+ */
+ public static final String BUNDLE_ID = "bundle.id";
+
+ /**
+ * The Bundle object of the bundle relevant to the event. The type of the
+ * value for this event property is {@link Bundle}.
+ *
+ * @since 1.1
+ */
+ public static final String BUNDLE = "bundle";
+
+ /**
+ * The version of the bundle relevant to the event. The type of the value
+ * for this event property is {@link Version}.
+ *
+ * @since 1.2
+ */
+ public static final String BUNDLE_VERSION = "bundle.version";
+
+ /**
+ * The forwarded event object. Used when rebroadcasting an event that was
+ * sent via some other event mechanism. The type of the value for this event
+ * property is <code>Object</code>.
+ */
+ public static final String EVENT = "event";
+
+ /**
+ * An exception or error. The type of the value for this event property is
+ * <code>Throwable</code>.
+ */
+ public static final String EXCEPTION = "exception";
+
+ /**
+ * The name of the exception type. Must be equal to the name of the class of
+ * the exception in the event property {@link #EXCEPTION}. The type of the
+ * value for this event property is <code>String</code>.
+ *
+ * @since 1.1
+ */
+ public static final String EXCEPTION_CLASS = "exception.class";
+
+ /**
+ * The exception message. Must be equal to the result of calling
+ * <code>getMessage()</code> on the exception in the event property
+ * {@link #EXCEPTION}. The type of the value for this event property is
+ * <code>String</code>.
+ */
+ public static final String EXCEPTION_MESSAGE = "exception.message";
+
+ /**
+ * A human-readable message that is usually not localized. The type of the
+ * value for this event property is <code>String</code>.
+ */
+ public static final String MESSAGE = "message";
+
+ /**
+ * A service reference. The type of the value for this event property is
+ * {@link ServiceReference}.
+ */
+ public static final String SERVICE = "service";
+
+ /**
+ * A service's id. The type of the value for this event property is
+ * <code>Long</code>.
+ */
+ public static final String SERVICE_ID = Constants.SERVICE_ID;
+
+ /**
+ * A service's objectClass. The type of the value for this event property is
+ * <code>String[]</code>.
+ */
+ public static final String SERVICE_OBJECTCLASS = "service.objectClass";
+
+ /**
+ * A service's persistent identity. The type of the value for this event
+ * property is <code>String</code>.
+ */
+ public static final String SERVICE_PID = Constants.SERVICE_PID;
+
+ /**
+ * The time when the event occurred, as reported by
+ * <code>System.currentTimeMillis()</code>. The type of the value for this
+ * event property is <code>Long</code>.
+ */
+ public static final String TIMESTAMP = "timestamp";
+
+ /**
+ * This constant was released with an incorrectly spelled name. It has been
+ * replaced by {@link #EXCEPTION_CLASS}
+ *
+ * @deprecated As of 1.1, replaced by EXCEPTION_CLASS
+ */
+ public static final String EXECPTION_CLASS = "exception.class";
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java
new file mode 100644
index 0000000..d25782f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+/**
+ * Listener for Events.
+ *
+ * <p>
+ * <code>EventHandler</code> objects are registered with the Framework service
+ * registry and are notified with an <code>Event</code> object when an event
+ * is sent or posted.
+ * <p>
+ * <code>EventHandler</code> objects can inspect the received
+ * <code>Event</code> object to determine its topic and properties.
+ *
+ * <p>
+ * <code>EventHandler</code> objects must be registered with a service
+ * property {@link EventConstants#EVENT_TOPIC} whose value is the list of topics
+ * in which the event handler is interested.
+ * <p>
+ * For example:
+ *
+ * <pre>
+ * String[] topics = new String[] {"com/isv/*"};
+ * Hashtable ht = new Hashtable();
+ * ht.put(EventConstants.EVENT_TOPIC, topics);
+ * context.registerService(EventHandler.class.getName(), this, ht);
+ * </pre>
+ *
+ * Event Handler services can also be registered with an
+ * {@link EventConstants#EVENT_FILTER} service property to further filter the
+ * events. If the syntax of this filter is invalid, then the Event Handler must
+ * be ignored by the Event Admin service. The Event Admin service should log a
+ * warning.
+ * <p>
+ * Security Considerations. Bundles wishing to monitor <code>Event</code>
+ * objects will require <code>ServicePermission[EventHandler,REGISTER]</code>
+ * to register an <code>EventHandler</code> service. The bundle must also have
+ * <code>TopicPermission[topic,SUBSCRIBE]</code> for the topic specified in
+ * the event in order to receive the event.
+ *
+ * @see Event
+ *
+ * @ThreadSafe
+ * @version $Revision: 5673 $
+ */
+public interface EventHandler {
+ /**
+ * Called by the {@link EventAdmin} service to notify the listener of an
+ * event.
+ *
+ * @param event The event that occurred.
+ */
+ void handleEvent(Event event);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java
new file mode 100644
index 0000000..ae0d190
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java
@@ -0,0 +1,529 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+import java.io.IOException;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ * A bundle's authority to publish or subscribe to event on a topic.
+ *
+ * <p>
+ * A topic is a slash-separated string that defines a topic.
+ * <p>
+ * For example:
+ *
+ * <pre>
+ * org / osgi / service / foo / FooEvent / ACTION
+ * </pre>
+ *
+ * <p>
+ * <code>TopicPermission</code> has two actions: <code>publish</code> and
+ * <code>subscribe</code>.
+ *
+ * @ThreadSafe
+ * @version $Revision: 6381 $
+ */
+public final class TopicPermission extends Permission {
+ static final long serialVersionUID = -5855563886961618300L;
+ /**
+ * The action string <code>publish</code>.
+ */
+ public final static String PUBLISH = "publish";
+ /**
+ * The action string <code>subscribe</code>.
+ */
+ public final static String SUBSCRIBE = "subscribe";
+ private final static int ACTION_PUBLISH = 0x00000001;
+ private final static int ACTION_SUBSCRIBE = 0x00000002;
+ private final static int ACTION_ALL = ACTION_PUBLISH
+ | ACTION_SUBSCRIBE;
+ private final static int ACTION_NONE = 0;
+ /**
+ * The actions mask.
+ */
+ private transient int action_mask;
+
+ /**
+ * prefix if the name is wildcarded.
+ */
+ private transient volatile String prefix;
+
+ /**
+ * The actions in canonical form.
+ *
+ * @serial
+ */
+ private volatile String actions = null;
+
+ /**
+ * Defines the authority to publich and/or subscribe to a topic within the
+ * EventAdmin service.
+ * <p>
+ * The name is specified as a slash-separated string. Wildcards may be used.
+ * For example:
+ *
+ * <pre>
+ * org/osgi/service/fooFooEvent/ACTION
+ * com/isv/*
+ * *
+ * </pre>
+ *
+ * <p>
+ * A bundle that needs to publish events on a topic must have the
+ * appropriate <code>TopicPermission</code> for that topic; similarly, a
+ * bundle that needs to subscribe to events on a topic must have the
+ * appropriate <code>TopicPermssion</code> for that topic.
+ * <p>
+ *
+ * @param name Topic name.
+ * @param actions <code>publish</code>,<code>subscribe</code> (canonical
+ * order).
+ */
+ public TopicPermission(String name, String actions) {
+ this(name, parseActions(actions));
+ }
+
+ /**
+ * Package private constructor used by TopicPermissionCollection.
+ *
+ * @param name class name
+ * @param mask action mask
+ */
+ TopicPermission(String name, int mask) {
+ super(name);
+ setTransients(mask);
+ }
+
+ /**
+ * Called by constructors and when deserialized.
+ *
+ * @param name topic name
+ * @param mask action mask
+ */
+ private synchronized void setTransients(final int mask) {
+ final String name = getName();
+ if ((name == null) || name.length() == 0) {
+ throw new IllegalArgumentException("invalid name");
+ }
+
+ if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+ throw new IllegalArgumentException("invalid action string");
+ }
+ action_mask = mask;
+
+ if (name.equals("*")) {
+ prefix = "";
+ }
+ else {
+ if (name.endsWith("/*")) {
+ prefix = name.substring(0, name.length() - 1);
+ }
+ else {
+ prefix = null;
+ }
+ }
+ }
+
+ /**
+ * Returns the current action mask.
+ * <p>
+ * Used by the TopicPermissionCollection class.
+ *
+ * @return Current action mask.
+ */
+ synchronized int getActionsMask() {
+ return action_mask;
+ }
+
+ /**
+ * Parse action string into action mask.
+ *
+ * @param actions Action string.
+ * @return action mask.
+ */
+ private static int parseActions(final String actions) {
+ boolean seencomma = false;
+ int mask = ACTION_NONE;
+ if (actions == null) {
+ return mask;
+ }
+ char[] a = actions.toCharArray();
+ int i = a.length - 1;
+ if (i < 0)
+ return mask;
+ while (i != -1) {
+ char c;
+ // skip whitespace
+ while ((i != -1)
+ && ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+ || c == '\f' || c == '\t'))
+ i--;
+ // check for the known strings
+ int matchlen;
+ if (i >= 8 && (a[i - 8] == 's' || a[i - 8] == 'S')
+ && (a[i - 7] == 'u' || a[i - 7] == 'U')
+ && (a[i - 6] == 'b' || a[i - 6] == 'B')
+ && (a[i - 5] == 's' || a[i - 5] == 'S')
+ && (a[i - 4] == 'c' || a[i - 4] == 'C')
+ && (a[i - 3] == 'r' || a[i - 3] == 'R')
+ && (a[i - 2] == 'i' || a[i - 2] == 'I')
+ && (a[i - 1] == 'b' || a[i - 1] == 'B')
+ && (a[i] == 'e' || a[i] == 'E')) {
+ matchlen = 9;
+ mask |= ACTION_SUBSCRIBE;
+ }
+ else
+ if (i >= 6 && (a[i - 6] == 'p' || a[i - 6] == 'P')
+ && (a[i - 5] == 'u' || a[i - 5] == 'U')
+ && (a[i - 4] == 'b' || a[i - 4] == 'B')
+ && (a[i - 3] == 'l' || a[i - 3] == 'L')
+ && (a[i - 2] == 'i' || a[i - 2] == 'I')
+ && (a[i - 1] == 's' || a[i - 1] == 'S')
+ && (a[i] == 'h' || a[i] == 'H')) {
+ matchlen = 7;
+ mask |= ACTION_PUBLISH;
+ }
+ else {
+ // parse error
+ throw new IllegalArgumentException("invalid permission: "
+ + actions);
+ }
+ // make sure we didn't just match the tail of a word
+ // like "ackbarfpublish". Also, skip to the comma.
+ seencomma = false;
+ while (i >= matchlen && !seencomma) {
+ switch (a[i - matchlen]) {
+ case ',' :
+ seencomma = true;
+ /* FALLTHROUGH */
+ case ' ' :
+ case '\r' :
+ case '\n' :
+ case '\f' :
+ case '\t' :
+ break;
+ default :
+ throw new IllegalArgumentException(
+ "invalid permission: " + actions);
+ }
+ i--;
+ }
+ // point i at the location of the comma minus one (or -1).
+ i -= matchlen;
+ }
+ if (seencomma) {
+ throw new IllegalArgumentException("invalid permission: " + actions);
+ }
+ return mask;
+ }
+
+ /**
+ * Determines if the specified permission is implied by this object.
+ *
+ * <p>
+ * This method checks that the topic name of the target is implied by the
+ * topic name of this object. The list of <code>TopicPermission</code>
+ * actions must either match or allow for the list of the target object to
+ * imply the target <code>TopicPermission</code> action.
+ *
+ * <pre>
+ * x/y/*,"publish" -> x/y/z,"publish" is true
+ * *,"subscribe" -> x/y,"subscribe" is true
+ * *,"publish" -> x/y,"subscribe" is false
+ * x/y,"publish" -> x/y/z,"publish" is false
+ * </pre>
+ *
+ * @param p The target permission to interrogate.
+ * @return <code>true</code> if the specified <code>TopicPermission</code>
+ * action is implied by this object; <code>false</code> otherwise.
+ */
+ public boolean implies(Permission p) {
+ if (p instanceof TopicPermission) {
+ TopicPermission requested = (TopicPermission) p;
+ int requestedMask = requested.getActionsMask();
+ if ((getActionsMask() & requestedMask) == requestedMask) {
+ String requestedName = requested.getName();
+ String pre = prefix;
+ if (pre != null) {
+ return requestedName.startsWith(pre);
+ }
+
+ return requestedName.equals(getName());
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the canonical string representation of the
+ * <code>TopicPermission</code> actions.
+ *
+ * <p>
+ * Always returns present <code>TopicPermission</code> actions in the
+ * following order: <code>publish</code>,<code>subscribe</code>.
+ *
+ * @return Canonical string representation of the
+ * <code>TopicPermission</code> actions.
+ */
+ public String getActions() {
+ String result = actions;
+ if (result == null) {
+ StringBuffer sb = new StringBuffer();
+ boolean comma = false;
+ int mask = getActionsMask();
+ if ((mask & ACTION_PUBLISH) == ACTION_PUBLISH) {
+ sb.append(PUBLISH);
+ comma = true;
+ }
+ if ((mask & ACTION_SUBSCRIBE) == ACTION_SUBSCRIBE) {
+ if (comma)
+ sb.append(',');
+ sb.append(SUBSCRIBE);
+ }
+ actions = result = sb.toString();
+ }
+ return result;
+ }
+
+ /**
+ * Returns a new <code>PermissionCollection</code> object suitable for
+ * storing <code>TopicPermission</code> objects.
+ *
+ * @return A new <code>PermissionCollection</code> object.
+ */
+ public PermissionCollection newPermissionCollection() {
+ return new TopicPermissionCollection();
+ }
+
+ /**
+ * Determines the equality of two <code>TopicPermission</code> objects.
+ *
+ * This method checks that specified <code>TopicPermission</code> has the
+ * same topic name and actions as this <code>TopicPermission</code> object.
+ *
+ * @param obj The object to test for equality with this
+ * <code>TopicPermission</code> object.
+ * @return <code>true</code> if <code>obj</code> is a
+ * <code>TopicPermission</code>, and has the same topic name and
+ * actions as this <code>TopicPermission</code> object;
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof TopicPermission)) {
+ return false;
+ }
+ TopicPermission tp = (TopicPermission) obj;
+ return (getActionsMask() == tp.getActionsMask())
+ && getName().equals(tp.getName());
+ }
+
+ /**
+ * Returns the hash code value for this object.
+ *
+ * @return A hash code value for this object.
+ */
+ public int hashCode() {
+ int h = 31 * 17 + getName().hashCode();
+ h = 31 * h + getActions().hashCode();
+ return h;
+ }
+
+ /**
+ * WriteObject is called to save the state of this permission object to a
+ * stream. The actions are serialized, and the superclass takes care of the
+ * name.
+ */
+ private synchronized void writeObject(java.io.ObjectOutputStream s)
+ throws IOException {
+ // Write out the actions. The superclass takes care of the name
+ // call getActions to make sure actions field is initialized
+ if (actions == null)
+ getActions();
+ s.defaultWriteObject();
+ }
+
+ /**
+ * readObject is called to restore the state of this permission from a
+ * stream.
+ */
+ private synchronized void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ // Read in the action, then initialize the rest
+ s.defaultReadObject();
+ setTransients(parseActions(actions));
+ }
+}
+
+/**
+ * Stores a set of <code>TopicPermission</code> permissions.
+ *
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ */
+final class TopicPermissionCollection extends PermissionCollection {
+ static final long serialVersionUID = -614647783533924048L;
+ /**
+ * Table of permissions.
+ *
+ * @serial
+ * @GuardedBy this
+ */
+ private final Hashtable permissions;
+ /**
+ * Boolean saying if "*" is in the collection.
+ *
+ * @serial
+ * @GuardedBy this
+ */
+ private boolean all_allowed;
+
+ /**
+ * Create an empty TopicPermissions object.
+ *
+ */
+ public TopicPermissionCollection() {
+ permissions = new Hashtable();
+ all_allowed = false;
+ }
+
+ /**
+ * Adds a permission to the <code>TopicPermission</code> objects. The key
+ * for the hash is the name.
+ *
+ * @param permission The <code>TopicPermission</code> object to add.
+ *
+ * @throws IllegalArgumentException If the permission is not a
+ * <code>TopicPermission</code> instance.
+ *
+ * @throws SecurityException If this <code>TopicPermissionCollection</code>
+ * object has been marked read-only.
+ */
+ public void add(final Permission permission) {
+ if (!(permission instanceof TopicPermission)) {
+ throw new IllegalArgumentException("invalid permission: "
+ + permission);
+ }
+ if (isReadOnly()) {
+ throw new SecurityException("attempt to add a Permission to a "
+ + "readonly PermissionCollection");
+ }
+ final TopicPermission tp = (TopicPermission) permission;
+ final String name = tp.getName();
+ final int newMask = tp.getActionsMask();
+
+ synchronized (this) {
+ final TopicPermission existing = (TopicPermission) permissions
+ .get(name);
+ if (existing != null) {
+ final int oldMask = existing.getActionsMask();
+ if (oldMask != newMask) {
+ permissions.put(name, new TopicPermission(name, oldMask
+ | newMask));
+ }
+ }
+ else {
+ permissions.put(name, tp);
+ }
+ if (!all_allowed) {
+ if (name.equals("*"))
+ all_allowed = true;
+ }
+ }
+ }
+
+ /**
+ * Determines if the specified permissions implies the permissions expressed
+ * in <code>permission</code>.
+ *
+ * @param permission The Permission object to compare with this
+ * <code>TopicPermission</code> object.
+ *
+ * @return <code>true</code> if <code>permission</code> is a proper subset
+ * of a permission in the set; <code>false</code> otherwise.
+ */
+ public boolean implies(final Permission permission) {
+ if (!(permission instanceof TopicPermission)) {
+ return false;
+ }
+ final TopicPermission requested = (TopicPermission) permission;
+ String name = requested.getName();
+ final int desired = requested.getActionsMask();
+ int effective = 0;
+
+ TopicPermission x;
+ // short circuit if the "*" Permission was added
+ synchronized (this) {
+ if (all_allowed) {
+ x = (TopicPermission) permissions.get("*");
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ }
+ x = (TopicPermission) permissions.get(name);
+ }
+ // strategy:
+ // Check for full match first. Then work our way up the
+ // name looking for matches on a/b/*
+ if (x != null) {
+ // we have a direct hit!
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ // work our way up the tree...
+ int last;
+ int offset = name.length() - 1;
+ while ((last = name.lastIndexOf("/", offset)) != -1) {
+ name = name.substring(0, last + 1) + "*";
+ synchronized (this) {
+ x = (TopicPermission) permissions.get(name);
+ }
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ offset = last - 1;
+ }
+ // we don't have to check for "*" as it was already checked
+ // at the top (all_allowed), so we just return false
+ return false;
+ }
+
+ /**
+ * Returns an enumeration of all <code>TopicPermission</code> objects in the
+ * container.
+ *
+ * @return Enumeration of all <code>TopicPermission</code> objects.
+ */
+ public Enumeration elements() {
+ return permissions.elements();
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html
new file mode 100644
index 0000000..0d9d0bf
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Event Admin Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.event; version="[1.2,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo
new file mode 100644
index 0000000..ef7df68
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo
@@ -0,0 +1 @@
+version 1.2
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java
new file mode 100644
index 0000000..e39cd17
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.http;
+
+import java.io.IOException;
+import java.net.URL;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * This interface defines methods that the Http Service may call to get
+ * information about a registration.
+ *
+ * <p>
+ * Servlets and resources may be registered with an <code>HttpContext</code>
+ * object; if no <code>HttpContext</code> object is specified, a default
+ * <code>HttpContext</code> object is used. Servlets that are registered using the
+ * same <code>HttpContext</code> object will share the same
+ * <code>ServletContext</code> object.
+ *
+ * <p>
+ * This interface is implemented by users of the <code>HttpService</code>.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface HttpContext {
+ /**
+ * <code>HttpServletRequest</code> attribute specifying the name of the
+ * authenticated user. The value of the attribute can be retrieved by
+ * <code>HttpServletRequest.getRemoteUser</code>. This attribute name is
+ * <code>org.osgi.service.http.authentication.remote.user</code>.
+ *
+ * @since 1.1
+ */
+ public static final String REMOTE_USER = "org.osgi.service.http.authentication.remote.user";
+ /**
+ * <code>HttpServletRequest</code> attribute specifying the scheme used in
+ * authentication. The value of the attribute can be retrieved by
+ * <code>HttpServletRequest.getAuthType</code>. This attribute name is
+ * <code>org.osgi.service.http.authentication.type</code>.
+ *
+ * @since 1.1
+ */
+ public static final String AUTHENTICATION_TYPE = "org.osgi.service.http.authentication.type";
+ /**
+ * <code>HttpServletRequest</code> attribute specifying the
+ * <code>Authorization</code> object obtained from the
+ * <code>org.osgi.service.useradmin.UserAdmin</code> service. The value of the
+ * attribute can be retrieved by
+ * <code>HttpServletRequest.getAttribute(HttpContext.AUTHORIZATION)</code>.
+ * This attribute name is <code>org.osgi.service.useradmin.authorization</code>.
+ *
+ * @since 1.1
+ */
+ public static final String AUTHORIZATION = "org.osgi.service.useradmin.authorization";
+
+ /**
+ * Handles security for the specified request.
+ *
+ * <p>
+ * The Http Service calls this method prior to servicing the specified
+ * request. This method controls whether the request is processed in the
+ * normal manner or an error is returned.
+ *
+ * <p>
+ * If the request requires authentication and the Authorization header in
+ * the request is missing or not acceptable, then this method should set the
+ * WWW-Authenticate header in the response object, set the status in the
+ * response object to Unauthorized(401) and return <code>false</code>. See
+ * also RFC 2617: <i>HTTP Authentication: Basic and Digest Access
+ * Authentication </i> (available at http://www.ietf.org/rfc/rfc2617.txt).
+ *
+ * <p>
+ * If the request requires a secure connection and the <code>getScheme</code>
+ * method in the request does not return 'https' or some other acceptable
+ * secure protocol, then this method should set the status in the response
+ * object to Forbidden(403) and return <code>false</code>.
+ *
+ * <p>
+ * When this method returns <code>false</code>, the Http Service will send
+ * the response back to the client, thereby completing the request. When
+ * this method returns <code>true</code>, the Http Service will proceed with
+ * servicing the request.
+ *
+ * <p>
+ * If the specified request has been authenticated, this method must set the
+ * {@link #AUTHENTICATION_TYPE} request attribute to the type of
+ * authentication used, and the {@link #REMOTE_USER} request attribute to
+ * the remote user (request attributes are set using the
+ * <code>setAttribute</code> method on the request). If this method does not
+ * perform any authentication, it must not set these attributes.
+ *
+ * <p>
+ * If the authenticated user is also authorized to access certain resources,
+ * this method must set the {@link #AUTHORIZATION} request attribute to the
+ * <code>Authorization</code> object obtained from the
+ * <code>org.osgi.service.useradmin.UserAdmin</code> service.
+ *
+ * <p>
+ * The servlet responsible for servicing the specified request determines
+ * the authentication type and remote user by calling the
+ * <code>getAuthType</code> and <code>getRemoteUser</code> methods,
+ * respectively, on the request.
+ *
+ * @param request the HTTP request
+ * @param response the HTTP response
+ * @return <code>true</code> if the request should be serviced, <code>false</code>
+ * if the request should not be serviced and Http Service will send
+ * the response back to the client.
+ * @throws java.io.IOException may be thrown by this method. If this
+ * occurs, the Http Service will terminate the request and close
+ * the socket.
+ */
+ public boolean handleSecurity(HttpServletRequest request,
+ HttpServletResponse response) throws IOException;
+
+ /**
+ * Maps a resource name to a URL.
+ *
+ * <p>
+ * Called by the Http Service to map a resource name to a URL. For servlet
+ * registrations, Http Service will call this method to support the
+ * <code>ServletContext</code> methods <code>getResource</code> and
+ * <code>getResourceAsStream</code>. For resource registrations, Http Service
+ * will call this method to locate the named resource. The context can
+ * control from where resources come. For example, the resource can be
+ * mapped to a file in the bundle's persistent storage area via
+ * <code>bundleContext.getDataFile(name).toURL()</code> or to a resource in
+ * the context's bundle via <code>getClass().getResource(name)</code>
+ *
+ * @param name the name of the requested resource
+ * @return URL that Http Service can use to read the resource or
+ * <code>null</code> if the resource does not exist.
+ */
+ public URL getResource(String name);
+
+ /**
+ * Maps a name to a MIME type.
+ *
+ * Called by the Http Service to determine the MIME type for the name. For
+ * servlet registrations, the Http Service will call this method to support
+ * the <code>ServletContext</code> method <code>getMimeType</code>. For
+ * resource registrations, the Http Service will call this method to
+ * determine the MIME type for the Content-Type header in the response.
+ *
+ * @param name determine the MIME type for this name.
+ * @return MIME type (e.g. text/html) of the name or <code>null</code> to
+ * indicate that the Http Service should determine the MIME type
+ * itself.
+ */
+ public String getMimeType(String name);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java
new file mode 100644
index 0000000..c578a93
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.http;
+
+import java.util.Dictionary;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+/**
+ * The Http Service allows other bundles in the OSGi environment to dynamically
+ * register resources and servlets into the URI namespace of Http Service. A
+ * bundle may later unregister its resources or servlets.
+ *
+ * @version $Revision: 5673 $
+ * @see HttpContext
+ */
+public interface HttpService {
+ /**
+ * Registers a servlet into the URI namespace.
+ *
+ * <p>
+ * The alias is the name in the URI namespace of the Http Service at which
+ * the registration will be mapped.
+ *
+ * <p>
+ * An alias must begin with slash ('/') and must not end with slash ('/'),
+ * with the exception that an alias of the form "/" is used to
+ * denote the root alias. See the specification text for details on how HTTP
+ * requests are mapped to servlet and resource registrations.
+ *
+ * <p>
+ * The Http Service will call the servlet's <code>init</code> method before
+ * returning.
+ *
+ * <pre>
+ * httpService.registerServlet("/myservlet", servlet, initparams, context);
+ * </pre>
+ *
+ * <p>
+ * Servlets registered with the same <code>HttpContext</code> object will
+ * share the same <code>ServletContext</code>. The Http Service will call the
+ * <code>context</code> argument to support the <code>ServletContext</code>
+ * methods <code>getResource</code>,<code>getResourceAsStream</code> and
+ * <code>getMimeType</code>, and to handle security for requests. If the
+ * <code>context</code> argument is <code>null</code>, a default
+ * <code>HttpContext</code> object is used (see
+ * {@link #createDefaultHttpContext}).
+ *
+ * @param alias name in the URI namespace at which the servlet is registered
+ * @param servlet the servlet object to register
+ * @param initparams initialization arguments for the servlet or
+ * <code>null</code> if there are none. This argument is used by the
+ * servlet's <code>ServletConfig</code> object.
+ * @param context the <code>HttpContext</code> object for the registered
+ * servlet, or <code>null</code> if a default <code>HttpContext</code> is
+ * to be created and used.
+ * @throws NamespaceException if the registration fails because the alias
+ * is already in use.
+ * @throws javax.servlet.ServletException if the servlet's <code>init</code>
+ * method throws an exception, or the given servlet object has
+ * already been registered at a different alias.
+ * @throws java.lang.IllegalArgumentException if any of the arguments are
+ * invalid
+ */
+ public void registerServlet(String alias, Servlet servlet,
+ Dictionary initparams, HttpContext context)
+ throws ServletException, NamespaceException;
+
+ /**
+ * Registers resources into the URI namespace.
+ *
+ * <p>
+ * The alias is the name in the URI namespace of the Http Service at which
+ * the registration will be mapped. An alias must begin with slash ('/') and
+ * must not end with slash ('/'), with the exception that an alias of the
+ * form "/" is used to denote the root alias. The name parameter
+ * must also not end with slash ('/') with the exception that a name of the
+ * form "/" is used to denote the root of the bundle. See the
+ * specification text for details on how HTTP requests are mapped to servlet
+ * and resource registrations.
+ * <p>
+ * For example, suppose the resource name /tmp is registered to the alias
+ * /files. A request for /files/foo.txt will map to the resource name
+ * /tmp/foo.txt.
+ *
+ * <pre>
+ * httpservice.registerResources("/files", "/tmp", context);
+ * </pre>
+ *
+ * The Http Service will call the <code>HttpContext</code> argument to map
+ * resource names to URLs and MIME types and to handle security for
+ * requests. If the <code>HttpContext</code> argument is <code>null</code>,
+ * a default <code>HttpContext</code> is used (see
+ * {@link #createDefaultHttpContext}).
+ *
+ * @param alias name in the URI namespace at which the resources are
+ * registered
+ * @param name the base name of the resources that will be registered
+ * @param context the <code>HttpContext</code> object for the registered
+ * resources, or <code>null</code> if a default
+ * <code>HttpContext</code> is to be created and used.
+ * @throws NamespaceException if the registration fails because the alias is
+ * already in use.
+ * @throws java.lang.IllegalArgumentException if any of the parameters are
+ * invalid
+ */
+ public void registerResources(String alias, String name,
+ HttpContext context) throws NamespaceException;
+
+ /**
+ * Unregisters a previous registration done by <code>registerServlet</code> or
+ * <code>registerResources</code> methods.
+ *
+ * <p>
+ * After this call, the registered alias in the URI name-space will no
+ * longer be available. If the registration was for a servlet, the Http
+ * Service must call the <code>destroy</code> method of the servlet before
+ * returning.
+ * <p>
+ * If the bundle which performed the registration is stopped or otherwise
+ * "unget"s the Http Service without calling {@link #unregister} then Http
+ * Service must automatically unregister the registration. However, if the
+ * registration was for a servlet, the <code>destroy</code> method of the
+ * servlet will not be called in this case since the bundle may be stopped.
+ * {@link #unregister} must be explicitly called to cause the
+ * <code>destroy</code> method of the servlet to be called. This can be done
+ * in the <code>BundleActivator.stop</code> method of the
+ * bundle registering the servlet.
+ *
+ * @param alias name in the URI name-space of the registration to unregister
+ * @throws java.lang.IllegalArgumentException if there is no registration
+ * for the alias or the calling bundle was not the bundle which
+ * registered the alias.
+ */
+ public void unregister(String alias);
+
+ /**
+ * Creates a default <code>HttpContext</code> for registering servlets or
+ * resources with the HttpService, a new <code>HttpContext</code> object is
+ * created each time this method is called.
+ *
+ * <p>
+ * The behavior of the methods on the default <code>HttpContext</code> is
+ * defined as follows:
+ * <ul>
+ * <li><code>getMimeType</code>- Does not define any customized MIME types
+ * for the Content-Type header in the response, and always returns
+ * <code>null</code>.
+ * <li><code>handleSecurity</code>- Performs implementation-defined
+ * authentication on the request.
+ * <li><code>getResource</code>- Assumes the named resource is in the
+ * context bundle; this method calls the context bundle's
+ * <code>Bundle.getResource</code> method, and returns the appropriate URL to
+ * access the resource. On a Java runtime environment that supports
+ * permissions, the Http Service needs to be granted
+ * <code>org.osgi.framework.AdminPermission[*,RESOURCE]</code>.
+ * </ul>
+ *
+ * @return a default <code>HttpContext</code> object.
+ * @since 1.1
+ */
+ public HttpContext createDefaultHttpContext();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java
new file mode 100644
index 0000000..dce2ba8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.http;
+
+/**
+ * A NamespaceException is thrown to indicate an error with the caller's request
+ * to register a servlet or resources into the URI namespace of the Http
+ * Service. This exception indicates that the requested alias already is in use.
+ *
+ * @version $Revision: 6083 $
+ */
+public class NamespaceException extends Exception {
+ static final long serialVersionUID = 7235606031147877747L;
+
+ /**
+ * Construct a <code>NamespaceException</code> object with a detail message.
+ *
+ * @param message the detail message
+ */
+ public NamespaceException(String message) {
+ super(message);
+ }
+
+ /**
+ * Construct a <code>NamespaceException</code> object with a detail message
+ * and a nested exception.
+ *
+ * @param message The detail message.
+ * @param cause The nested exception.
+ */
+ public NamespaceException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Returns the nested exception.
+ *
+ * <p>
+ * This method predates the general purpose exception chaining mechanism.
+ * The <code>getCause()</code> method is now the preferred means of
+ * obtaining this information.
+ *
+ * @return The result of calling <code>getCause()</code>.
+ */
+ public Throwable getException() {
+ return getCause();
+ }
+
+ /**
+ * Returns the cause of this exception or <code>null</code> if no cause was
+ * set.
+ *
+ * @return The cause of this exception or <code>null</code> if no cause was
+ * set.
+ * @since 1.2
+ */
+ public Throwable getCause() {
+ return super.getCause();
+ }
+
+ /**
+ * Initializes the cause of this exception to the specified value.
+ *
+ * @param cause The cause of this exception.
+ * @return This exception.
+ * @throws IllegalArgumentException If the specified cause is this
+ * exception.
+ * @throws IllegalStateException If the cause of this exception has already
+ * been set.
+ * @since 1.2
+ */
+ public Throwable initCause(Throwable cause) {
+ return super.initCause(cause);
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html
new file mode 100644
index 0000000..21f5fed
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Http Service Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.http; version="[1.2,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/packageinfo
new file mode 100644
index 0000000..6ebb891
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/packageinfo
@@ -0,0 +1 @@
+version 1.2.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java
new file mode 100644
index 0000000..71a0af8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.io;
+
+import java.io.IOException;
+
+import javax.microedition.io.Connection;
+
+/**
+ * A Connection Factory service is called by the implementation of the Connector
+ * Service to create <code>javax.microedition.io.Connection</code> objects which
+ * implement the scheme named by <code>IO_SCHEME</code>.
+ *
+ * When a <code>ConnectorService.open</code> method is called, the implementation
+ * of the Connector Service will examine the specified name for a scheme. The
+ * Connector Service will then look for a Connection Factory service which is
+ * registered with the service property <code>IO_SCHEME</code> which matches the
+ * scheme. The {@link #createConnection} method of the selected Connection
+ * Factory will then be called to create the actual <code>Connection</code>
+ * object.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ConnectionFactory {
+ /**
+ * Service property containing the scheme(s) for which this Connection
+ * Factory can create <code>Connection</code> objects. This property is of
+ * type <code>String</code> or <code>String[]</code>.
+ */
+ public static final String IO_SCHEME = "io.scheme";
+
+ /**
+ * Create a new <code>Connection</code> object for the specified URI.
+ *
+ * @param name The full URI passed to the <code>ConnectorService.open</code>
+ * method
+ * @param mode The mode parameter passed to the
+ * <code>ConnectorService.open</code> method
+ * @param timeouts The timeouts parameter passed to the
+ * <code>ConnectorService.open</code> method
+ * @return A new <code>javax.microedition.io.Connection</code> object.
+ * @throws IOException If a <code>javax.microedition.io.Connection</code>
+ * object can not not be created.
+ */
+ public Connection createConnection(String name, int mode, boolean timeouts)
+ throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java
new file mode 100644
index 0000000..dbfc04a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.io;
+
+import java.io.*;
+
+import javax.microedition.io.Connection;
+import javax.microedition.io.Connector;
+
+/**
+ * The Connector Service should be called to create and open
+ * <code>javax.microedition.io.Connection</code> objects.
+ *
+ * When an <code>open*</code> method is called, the implementation of the
+ * Connector Service will examine the specified name for a scheme. The Connector
+ * Service will then look for a Connection Factory service which is registered
+ * with the service property <code>IO_SCHEME</code> which matches the scheme. The
+ * <code>createConnection</code> method of the selected Connection Factory will
+ * then be called to create the actual <code>Connection</code> object.
+ *
+ * <p>
+ * If more than one Connection Factory service is registered for a particular
+ * scheme, the service with the highest ranking (as specified in its
+ * <code>service.ranking</code> property) is called. If there is a tie in ranking,
+ * the service with the lowest service ID (as specified in its
+ * <code>service.id</code> property), that is the service that was registered
+ * first, is called. This is the same algorithm used by
+ * <code>BundleContext.getServiceReference</code>.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ConnectorService {
+ /**
+ * Read access mode.
+ *
+ * @see "javax.microedition.io.Connector.READ"
+ */
+ public static final int READ = Connector.READ;
+ /**
+ * Write access mode.
+ *
+ * @see "javax.microedition.io.Connector.WRITE"
+ */
+ public static final int WRITE = Connector.WRITE;
+ /**
+ * Read/Write access mode.
+ *
+ * @see "javax.microedition.io.Connector.READ_WRITE"
+ */
+ public static final int READ_WRITE = Connector.READ_WRITE;
+
+ /**
+ * Create and open a <code>Connection</code> object for the specified name.
+ *
+ * @param name The URI for the connection.
+ * @return A new <code>javax.microedition.io.Connection</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.open(String name)"
+ */
+ public Connection open(String name) throws IOException;
+
+ /**
+ * Create and open a <code>Connection</code> object for the specified name and
+ * access mode.
+ *
+ * @param name The URI for the connection.
+ * @param mode The access mode.
+ * @return A new <code>javax.microedition.io.Connection</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.open(String name, int mode)"
+ */
+ public Connection open(String name, int mode) throws IOException;
+
+ /**
+ * Create and open a <code>Connection</code> object for the specified name,
+ * access mode and timeouts.
+ *
+ * @param name The URI for the connection.
+ * @param mode The access mode.
+ * @param timeouts A flag to indicate that the caller wants timeout
+ * exceptions.
+ * @return A new <code>javax.microedition.io.Connection</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "<code>javax.microedition.io.Connector.open</code>"
+ */
+ public Connection open(String name, int mode, boolean timeouts)
+ throws IOException;
+
+ /**
+ * Create and open an <code>InputStream</code> object for the specified name.
+ *
+ * @param name The URI for the connection.
+ * @return An <code>InputStream</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.openInputStream(String name)"
+ */
+ public InputStream openInputStream(String name) throws IOException;
+
+ /**
+ * Create and open a <code>DataInputStream</code> object for the specified
+ * name.
+ *
+ * @param name The URI for the connection.
+ * @return A <code>DataInputStream</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.openDataInputStream(String name)"
+ */
+ public DataInputStream openDataInputStream(String name) throws IOException;
+
+ /**
+ * Create and open an <code>OutputStream</code> object for the specified name.
+ *
+ * @param name The URI for the connection.
+ * @return An <code>OutputStream</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.openOutputStream(String name)"
+ */
+ public OutputStream openOutputStream(String name) throws IOException;
+
+ /**
+ * Create and open a <code>DataOutputStream</code> object for the specified
+ * name.
+ *
+ * @param name The URI for the connection.
+ * @return A <code>DataOutputStream</code> object.
+ * @throws IllegalArgumentException If a parameter is invalid.
+ * @throws javax.microedition.io.ConnectionNotFoundException If the
+ * connection cannot be found.
+ * @throws IOException If some other kind of I/O error occurs.
+ * @see "javax.microedition.io.Connector.openDataOutputStream(String name)"
+ */
+ public DataOutputStream openDataOutputStream(String name)
+ throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html
new file mode 100644
index 0000000..cecc3c3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>IO Connector Package Version 1.0.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.io; version="[1.0,2.0)", javax.microedition.io
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/packageinfo
new file mode 100644
index 0000000..7c8de03
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/packageinfo
@@ -0,0 +1 @@
+version 1.0
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java
new file mode 100644
index 0000000..8130cf8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Provides methods to access the information contained in an individual Log
+ * Service log entry.
+ *
+ * <p>
+ * A <code>LogEntry</code> object may be acquired from the
+ * <code>LogReaderService.getLog</code> method or by registering a
+ * <code>LogListener</code> object.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ * @see LogReaderService#getLog
+ * @see LogListener
+ */
+public interface LogEntry {
+ /**
+ * Returns the bundle that created this <code>LogEntry</code> object.
+ *
+ * @return The bundle that created this <code>LogEntry</code> object;
+ * <code>null</code> if no bundle is associated with this
+ * <code>LogEntry</code> object.
+ */
+ public Bundle getBundle();
+
+ /**
+ * Returns the <code>ServiceReference</code> object for the service associated
+ * with this <code>LogEntry</code> object.
+ *
+ * @return <code>ServiceReference</code> object for the service associated
+ * with this <code>LogEntry</code> object; <code>null</code> if no
+ * <code>ServiceReference</code> object was provided.
+ */
+ public ServiceReference getServiceReference();
+
+ /**
+ * Returns the severity level of this <code>LogEntry</code> object.
+ *
+ * <p>
+ * This is one of the severity levels defined by the <code>LogService</code>
+ * interface.
+ *
+ * @return Severity level of this <code>LogEntry</code> object.
+ *
+ * @see LogService#LOG_ERROR
+ * @see LogService#LOG_WARNING
+ * @see LogService#LOG_INFO
+ * @see LogService#LOG_DEBUG
+ */
+ public int getLevel();
+
+ /**
+ * Returns the human readable message associated with this <code>LogEntry</code>
+ * object.
+ *
+ * @return <code>String</code> containing the message associated with this
+ * <code>LogEntry</code> object.
+ */
+ public String getMessage();
+
+ /**
+ * Returns the exception object associated with this <code>LogEntry</code>
+ * object.
+ *
+ * <p>
+ * In some implementations, the returned exception may not be the original
+ * exception. To avoid references to a bundle defined exception class, thus
+ * preventing an uninstalled bundle from being garbage collected, the Log
+ * Service may return an exception object of an implementation defined
+ * Throwable subclass. The returned object will attempt to provide as much
+ * information as possible from the original exception object such as the
+ * message and stack trace.
+ *
+ * @return <code>Throwable</code> object of the exception associated with this
+ * <code>LogEntry</code>;<code>null</code> if no exception is
+ * associated with this <code>LogEntry</code> object.
+ */
+ public Throwable getException();
+
+ /**
+ * Returns the value of <code>currentTimeMillis()</code> at the time this
+ * <code>LogEntry</code> object was created.
+ *
+ * @return The system time in milliseconds when this <code>LogEntry</code>
+ * object was created.
+ * @see "System.currentTimeMillis()"
+ */
+ public long getTime();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java
new file mode 100644
index 0000000..de29a56
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import java.util.EventListener;
+
+/**
+ * Subscribes to <code>LogEntry</code> objects from the <code>LogReaderService</code>.
+ *
+ * <p>
+ * A <code>LogListener</code> object may be registered with the Log Reader Service
+ * using the <code>LogReaderService.addLogListener</code> method. After the
+ * listener is registered, the <code>logged</code> method will be called for each
+ * <code>LogEntry</code> object created. The <code>LogListener</code> object may be
+ * unregistered by calling the <code>LogReaderService.removeLogListener</code>
+ * method.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ * @see LogReaderService
+ * @see LogEntry
+ * @see LogReaderService#addLogListener(LogListener)
+ * @see LogReaderService#removeLogListener(LogListener)
+ */
+public interface LogListener extends EventListener {
+ /**
+ * Listener method called for each LogEntry object created.
+ *
+ * <p>
+ * As with all event listeners, this method should return to its caller as
+ * soon as possible.
+ *
+ * @param entry A <code>LogEntry</code> object containing log information.
+ * @see LogEntry
+ */
+ public void logged(LogEntry entry);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java
new file mode 100644
index 0000000..b3753e4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import java.util.Enumeration;
+
+/**
+ * Provides methods to retrieve <code>LogEntry</code> objects from the log.
+ * <p>
+ * There are two ways to retrieve <code>LogEntry</code> objects:
+ * <ul>
+ * <li>The primary way to retrieve <code>LogEntry</code> objects is to register a
+ * <code>LogListener</code> object whose <code>LogListener.logged</code> method will
+ * be called for each entry added to the log.
+ * <li>To retrieve past <code>LogEntry</code> objects, the <code>getLog</code>
+ * method can be called which will return an <code>Enumeration</code> of all
+ * <code>LogEntry</code> objects in the log.
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ * @see LogEntry
+ * @see LogListener
+ * @see LogListener#logged(LogEntry)
+ */
+public interface LogReaderService {
+ /**
+ * Subscribes to <code>LogEntry</code> objects.
+ *
+ * <p>
+ * This method registers a <code>LogListener</code> object with the Log Reader
+ * Service. The <code>LogListener.logged(LogEntry)</code> method will be
+ * called for each <code>LogEntry</code> object placed into the log.
+ *
+ * <p>
+ * When a bundle which registers a <code>LogListener</code> object is stopped
+ * or otherwise releases the Log Reader Service, the Log Reader Service must
+ * remove all of the bundle's listeners.
+ *
+ * <p>
+ * If this Log Reader Service's list of listeners already contains a
+ * listener <code>l</code> such that <code>(l==listener)</code>, this method
+ * does nothing.
+ *
+ * @param listener A <code>LogListener</code> object to register; the
+ * <code>LogListener</code> object is used to receive <code>LogEntry</code>
+ * objects.
+ * @see LogListener
+ * @see LogEntry
+ * @see LogListener#logged(LogEntry)
+ */
+ public void addLogListener(LogListener listener);
+
+ /**
+ * Unsubscribes to <code>LogEntry</code> objects.
+ *
+ * <p>
+ * This method unregisters a <code>LogListener</code> object from the Log
+ * Reader Service.
+ *
+ * <p>
+ * If <code>listener</code> is not contained in this Log Reader Service's list
+ * of listeners, this method does nothing.
+ *
+ * @param listener A <code>LogListener</code> object to unregister.
+ * @see LogListener
+ */
+ public void removeLogListener(LogListener listener);
+
+ /**
+ * Returns an <code>Enumeration</code> of all <code>LogEntry</code> objects in
+ * the log.
+ *
+ * <p>
+ * Each element of the enumeration is a <code>LogEntry</code> object, ordered
+ * with the most recent entry first. Whether the enumeration is of all
+ * <code>LogEntry</code> objects since the Log Service was started or some
+ * recent past is implementation-specific. Also implementation-specific is
+ * whether informational and debug <code>LogEntry</code> objects are included
+ * in the enumeration.
+ * @return An <code>Enumeration</code> of all <code>LogEntry</code> objects in
+ * the log.
+ */
+ public Enumeration getLog();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java
new file mode 100644
index 0000000..1889355
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Provides methods for bundles to write messages to the log.
+ *
+ * <p>
+ * <code>LogService</code> methods are provided to log messages; optionally with a
+ * <code>ServiceReference</code> object or an exception.
+ *
+ * <p>
+ * Bundles must log messages in the OSGi environment with a severity level
+ * according to the following hierarchy:
+ * <ol>
+ * <li>{@link #LOG_ERROR}
+ * <li>{@link #LOG_WARNING}
+ * <li>{@link #LOG_INFO}
+ * <li>{@link #LOG_DEBUG}
+ * </ol>
+ *
+ * @ThreadSafe
+ * @version $Revision: 5654 $
+ */
+public interface LogService {
+ /**
+ * An error message (Value 1).
+ *
+ * <p>
+ * This log entry indicates the bundle or service may not be functional.
+ */
+ public static final int LOG_ERROR = 1;
+ /**
+ * A warning message (Value 2).
+ *
+ * <p>
+ * This log entry indicates a bundle or service is still functioning but may
+ * experience problems in the future because of the warning condition.
+ */
+ public static final int LOG_WARNING = 2;
+ /**
+ * An informational message (Value 3).
+ *
+ * <p>
+ * This log entry may be the result of any change in the bundle or service
+ * and does not indicate a problem.
+ */
+ public static final int LOG_INFO = 3;
+ /**
+ * A debugging message (Value 4).
+ *
+ * <p>
+ * This log entry is used for problem determination and may be irrelevant to
+ * anyone but the bundle developer.
+ */
+ public static final int LOG_DEBUG = 4;
+
+ /**
+ * Logs a message.
+ *
+ * <p>
+ * The <code>ServiceReference</code> field and the <code>Throwable</code> field
+ * of the <code>LogEntry</code> object will be set to <code>null</code>.
+ *
+ * @param level The severity of the message. This should be one of the
+ * defined log levels but may be any integer that is interpreted in a
+ * user defined way.
+ * @param message Human readable string describing the condition or
+ * <code>null</code>.
+ * @see #LOG_ERROR
+ * @see #LOG_WARNING
+ * @see #LOG_INFO
+ * @see #LOG_DEBUG
+ */
+ public void log(int level, String message);
+
+ /**
+ * Logs a message with an exception.
+ *
+ * <p>
+ * The <code>ServiceReference</code> field of the <code>LogEntry</code> object
+ * will be set to <code>null</code>.
+ *
+ * @param level The severity of the message. This should be one of the
+ * defined log levels but may be any integer that is interpreted in a
+ * user defined way.
+ * @param message The human readable string describing the condition or
+ * <code>null</code>.
+ * @param exception The exception that reflects the condition or
+ * <code>null</code>.
+ * @see #LOG_ERROR
+ * @see #LOG_WARNING
+ * @see #LOG_INFO
+ * @see #LOG_DEBUG
+ */
+ public void log(int level, String message, Throwable exception);
+
+ /**
+ * Logs a message associated with a specific <code>ServiceReference</code>
+ * object.
+ *
+ * <p>
+ * The <code>Throwable</code> field of the <code>LogEntry</code> will be set to
+ * <code>null</code>.
+ *
+ * @param sr The <code>ServiceReference</code> object of the service that this
+ * message is associated with or <code>null</code>.
+ * @param level The severity of the message. This should be one of the
+ * defined log levels but may be any integer that is interpreted in a
+ * user defined way.
+ * @param message Human readable string describing the condition or
+ * <code>null</code>.
+ * @see #LOG_ERROR
+ * @see #LOG_WARNING
+ * @see #LOG_INFO
+ * @see #LOG_DEBUG
+ */
+ public void log(ServiceReference sr, int level, String message);
+
+ /**
+ * Logs a message with an exception associated and a
+ * <code>ServiceReference</code> object.
+ *
+ * @param sr The <code>ServiceReference</code> object of the service that this
+ * message is associated with.
+ * @param level The severity of the message. This should be one of the
+ * defined log levels but may be any integer that is interpreted in a
+ * user defined way.
+ * @param message Human readable string describing the condition or
+ * <code>null</code>.
+ * @param exception The exception that reflects the condition or
+ * <code>null</code>.
+ * @see #LOG_ERROR
+ * @see #LOG_WARNING
+ * @see #LOG_INFO
+ * @see #LOG_DEBUG
+ */
+ public void log(ServiceReference sr, int level, String message,
+ Throwable exception);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html
new file mode 100644
index 0000000..02312bb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Log Service Package Version 1.3.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.log; version="[1.3,2.0)"
+</pre>
+</BODY>
+
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/packageinfo
new file mode 100644
index 0000000..0117a56
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/packageinfo
@@ -0,0 +1 @@
+version 1.3
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java
new file mode 100644
index 0000000..d427163
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.metatype;
+
+/**
+ * An interface to describe an attribute.
+ *
+ * <p>
+ * An <code>AttributeDefinition</code> object defines a description of the data
+ * type of a property/attribute.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface AttributeDefinition {
+ /**
+ * The <code>STRING</code> (1) type.
+ *
+ * <p>
+ * Attributes of this type should be stored as <code>String</code>,
+ * <code>Vector</code> with <code>String</code> or <code>String[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int STRING = 1;
+ /**
+ * The <code>LONG</code> (2) type.
+ *
+ * Attributes of this type should be stored as <code>Long</code>,
+ * <code>Vector</code> with <code>Long</code> or <code>long[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int LONG = 2;
+ /**
+ * The <code>INTEGER</code> (3) type.
+ *
+ * Attributes of this type should be stored as <code>Integer</code>,
+ * <code>Vector</code> with <code>Integer</code> or <code>int[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int INTEGER = 3;
+ /**
+ * The <code>SHORT</code> (4) type.
+ *
+ * Attributes of this type should be stored as <code>Short</code>,
+ * <code>Vector</code> with <code>Short</code> or <code>short[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int SHORT = 4;
+ /**
+ * The <code>CHARACTER</code> (5) type.
+ *
+ * Attributes of this type should be stored as <code>Character</code>,
+ * <code>Vector</code> with <code>Character</code> or <code>char[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int CHARACTER = 5;
+ /**
+ * The <code>BYTE</code> (6) type.
+ *
+ * Attributes of this type should be stored as <code>Byte</code>,
+ * <code>Vector</code> with <code>Byte</code> or <code>byte[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int BYTE = 6;
+ /**
+ * The <code>DOUBLE</code> (7) type.
+ *
+ * Attributes of this type should be stored as <code>Double</code>,
+ * <code>Vector</code> with <code>Double</code> or <code>double[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int DOUBLE = 7;
+ /**
+ * The <code>FLOAT</code> (8) type.
+ *
+ * Attributes of this type should be stored as <code>Float</code>,
+ * <code>Vector</code> with <code>Float</code> or <code>float[]</code> objects,
+ * depending on the <code>getCardinality()</code> value.
+ */
+ public static final int FLOAT = 8;
+ /**
+ * The <code>BIGINTEGER</code> (9) type.
+ *
+ * Attributes of this type should be stored as <code>BigInteger</code>,
+ * <code>Vector</code> with <code>BigInteger</code> or <code>BigInteger[]</code>
+ * objects, depending on the <code>getCardinality()</code> value.
+ *
+ * @deprecated As of 1.1.
+ */
+ public static final int BIGINTEGER = 9;
+ /**
+ * The <code>BIGDECIMAL</code> (10) type.
+ *
+ * Attributes of this type should be stored as <code>BigDecimal</code>,
+ * <code>Vector</code> with <code>BigDecimal</code> or <code>BigDecimal[]</code>
+ * objects depending on <code>getCardinality()</code>.
+ *
+ * @deprecated As of 1.1.
+ */
+ public static final int BIGDECIMAL = 10;
+ /**
+ * The <code>BOOLEAN</code> (11) type.
+ *
+ * Attributes of this type should be stored as <code>Boolean</code>,
+ * <code>Vector</code> with <code>Boolean</code> or <code>boolean[]</code> objects
+ * depending on <code>getCardinality()</code>.
+ */
+ public static final int BOOLEAN = 11;
+
+ /**
+ * Get the name of the attribute. This name may be localized.
+ *
+ * @return The localized name of the definition.
+ */
+ public String getName();
+
+ /**
+ * Unique identity for this attribute.
+ *
+ * Attributes share a global namespace in the registry. E.g. an attribute
+ * <code>cn</code> or <code>commonName</code> must always be a <code>String</code>
+ * and the semantics are always a name of some object. They share this
+ * aspect with LDAP/X.500 attributes. In these standards the OSI Object
+ * Identifier (OID) is used to uniquely identify an attribute. If such an
+ * OID exists, (which can be requested at several standard organisations and
+ * many companies already have a node in the tree) it can be returned here.
+ * Otherwise, a unique id should be returned which can be a Java class name
+ * (reverse domain name) or generated with a GUID algorithm. Note that all
+ * LDAP defined attributes already have an OID. It is strongly advised to
+ * define the attributes from existing LDAP schemes which will give the OID.
+ * Many such schemes exist ranging from postal addresses to DHCP parameters.
+ *
+ * @return The id or oid
+ */
+ public String getID();
+
+ /**
+ * Return a description of this attribute.
+ *
+ * The description may be localized and must describe the semantics of this
+ * type and any constraints.
+ *
+ * @return The localized description of the definition.
+ */
+ public String getDescription();
+
+ /**
+ * Return the cardinality of this attribute.
+ *
+ * The OSGi environment handles multi valued attributes in arrays ([]) or in
+ * <code>Vector</code> objects. The return value is defined as follows:
+ *
+ * <pre>
+ *
+ * x = Integer.MIN_VALUE no limit, but use Vector
+ * x < 0 -x = max occurrences, store in Vector
+ * x > 0 x = max occurrences, store in array []
+ * x = Integer.MAX_VALUE no limit, but use array []
+ * x = 0 1 occurrence required
+ *
+ * </pre>
+ *
+ * @return The cardinality of this attribute.
+ */
+ public int getCardinality();
+
+ /**
+ * Return the type for this attribute.
+ *
+ * <p>
+ * Defined in the following constants which map to the appropriate Java
+ * type. <code>STRING</code>,<code>LONG</code>,<code>INTEGER</code>,
+ * <code>CHAR</code>,<code>BYTE</code>,<code>DOUBLE</code>,<code>FLOAT</code>,
+ * <code>BOOLEAN</code>.
+ *
+ * @return The type for this attribute.
+ */
+ public int getType();
+
+ /**
+ * Return a list of option values that this attribute can take.
+ *
+ * <p>
+ * If the function returns <code>null</code>, there are no option values
+ * available.
+ *
+ * <p>
+ * Each value must be acceptable to validate() (return "") and must be a
+ * <code>String</code> object that can be converted to the data type defined
+ * by getType() for this attribute.
+ *
+ * <p>
+ * This list must be in the same sequence as <code>getOptionLabels()</code>.
+ * I.e. for each index i in <code>getOptionValues</code>, i in
+ * <code>getOptionLabels()</code> should be the label.
+ *
+ * <p>
+ * For example, if an attribute can have the value male, female, unknown,
+ * this list can return
+ * <code>new String[] { "male", "female", "unknown" }</code>.
+ *
+ * @return A list values
+ */
+ public String[] getOptionValues();
+
+ /**
+ * Return a list of labels of option values.
+ *
+ * <p>
+ * The purpose of this method is to allow menus with localized labels. It is
+ * associated with <code>getOptionValues</code>. The labels returned here are
+ * ordered in the same way as the values in that method.
+ *
+ * <p>
+ * If the function returns <code>null</code>, there are no option labels
+ * available.
+ * <p>
+ * This list must be in the same sequence as the <code>getOptionValues()</code>
+ * method. I.e. for each index i in <code>getOptionLabels</code>, i in
+ * <code>getOptionValues()</code> should be the associated value.
+ *
+ * <p>
+ * For example, if an attribute can have the value male, female, unknown,
+ * this list can return (for dutch)
+ * <code>new String[] { "Man", "Vrouw", "Onbekend" }</code>.
+ *
+ * @return A list values
+ */
+ public String[] getOptionLabels();
+
+ /**
+ * Validate an attribute in <code>String</code> form.
+ *
+ * An attribute might be further constrained in value. This method will
+ * attempt to validate the attribute according to these constraints. It can
+ * return three different values:
+ *
+ * <pre>
+ * null No validation present
+ * "" No problems detected
+ * "..." A localized description of why the value is wrong
+ * </pre>
+ *
+ * @param value The value before turning it into the basic data type
+ * @return <code>null</code>, "", or another string
+ */
+ public String validate(String value);
+
+ /**
+ * Return a default for this attribute.
+ *
+ * The object must be of the appropriate type as defined by the cardinality
+ * and <code>getType()</code>. The return type is a list of <code>String</code>
+ * objects that can be converted to the appropriate type. The cardinality of
+ * the return array must follow the absolute cardinality of this type. E.g.
+ * if the cardinality = 0, the array must contain 1 element. If the
+ * cardinality is 1, it must contain 0 or 1 elements. If it is -5, it must
+ * contain from 0 to max 5 elements. Note that the special case of a 0
+ * cardinality, meaning a single value, does not allow arrays or vectors of
+ * 0 elements.
+ *
+ * @return Return a default value or <code>null</code> if no default exists.
+ */
+ public String[] getDefaultValue();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java
new file mode 100644
index 0000000..8b336dc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.metatype;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * A MetaType Information object is created by the MetaTypeService to return
+ * meta type information for a specific bundle.
+ *
+ * @version $Revision: 5673 $
+ * @since 1.1
+ */
+public interface MetaTypeInformation extends MetaTypeProvider {
+ /**
+ * Return the PIDs (for ManagedServices) for which ObjectClassDefinition
+ * information is available.
+ *
+ * @return Array of PIDs.
+ */
+ public String[] getPids();
+
+ /**
+ * Return the Factory PIDs (for ManagedServiceFactories) for which
+ * ObjectClassDefinition information is available.
+ *
+ * @return Array of Factory PIDs.
+ */
+ public String[] getFactoryPids();
+
+ /**
+ * Return the bundle for which this object provides meta type information.
+ *
+ * @return Bundle for which this object provides meta type information.
+ */
+ public Bundle getBundle();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java
new file mode 100644
index 0000000..b2385b2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.metatype;
+
+/**
+ * Provides access to metatypes.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface MetaTypeProvider {
+ /**
+ * Returns an object class definition for the specified id localized to the
+ * specified locale.
+ *
+ * <p>
+ * The locale parameter must be a name that consists of <code>language</code>[
+ * "_" <code>country</code>[ "_" <code>variation</code>] ] as is customary in
+ * the <code>Locale</code> class. This <code>Locale</code> class is not used
+ * because certain profiles do not contain it.
+ *
+ * @param id The ID of the requested object class. This can be a pid or
+ * factory pid returned by getPids or getFactoryPids.
+ * @param locale The locale of the definition or <code>null</code> for default
+ * locale.
+ * @return A <code>ObjectClassDefinition</code> object.
+ * @throws IllegalArgumentException If the id or locale arguments are not
+ * valid
+ */
+ public ObjectClassDefinition getObjectClassDefinition(String id, String locale);
+
+ /**
+ * Return a list of available locales.
+ *
+ * The results must be names that consists of language [ _ country [ _
+ * variation ]] as is customary in the <code>Locale</code> class.
+ *
+ * @return An array of locale strings or <code>null</code> if there is no
+ * locale specific localization can be found.
+ *
+ */
+ public String[] getLocales();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java
new file mode 100644
index 0000000..d8f77a3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.metatype;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * The MetaType Service can be used to obtain meta type information for a
+ * bundle. The MetaType Service will examine the specified bundle for meta type
+ * documents to create the returned <code>MetaTypeInformation</code> object.
+ *
+ * <p>
+ * If the specified bundle does not contain any meta type documents, then a
+ * <code>MetaTypeInformation</code> object will be returned that wrappers any
+ * <code>ManagedService</code> or <code>ManagedServiceFactory</code>
+ * services registered by the specified bundle that implement
+ * <code>MetaTypeProvider</code>. Thus the MetaType Service can be used to
+ * retrieve meta type information for bundles which contain a meta type
+ * documents or which provide their own <code>MetaTypeProvider</code> objects.
+ *
+ * @version $Revision: 5673 $
+ * @since 1.1
+ */
+public interface MetaTypeService {
+ /**
+ * Return the MetaType information for the specified bundle.
+ *
+ * @param bundle The bundle for which meta type information is requested.
+ * @return A MetaTypeInformation object for the specified bundle.
+ */
+ public MetaTypeInformation getMetaTypeInformation(Bundle bundle);
+
+ /**
+ * Location of meta type documents. The MetaType Service will process each
+ * entry in the meta type documents directory.
+ */
+ public final static String METATYPE_DOCUMENTS_LOCATION = "OSGI-INF/metatype";
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java
new file mode 100644
index 0000000..5c6687e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.metatype;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Description for the data type information of an objectclass.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface ObjectClassDefinition {
+ /**
+ * Argument for <code>getAttributeDefinitions(int)</code>.
+ * <p>
+ * <code>REQUIRED</code> indicates that only the required definitions are
+ * returned. The value is 1.
+ */
+ public static final int REQUIRED = 1;
+ /**
+ * Argument for <code>getAttributeDefinitions(int)</code>.
+ * <p>
+ * <code>OPTIONAL</code> indicates that only the optional definitions are
+ * returned. The value is 2.
+ */
+ public static final int OPTIONAL = 2;
+ /**
+ * Argument for <code>getAttributeDefinitions(int)</code>.
+ * <p>
+ * <code>ALL</code> indicates that all the definitions are returned. The value
+ * is -1.
+ */
+ public static final int ALL = 0xFFFFFFFF;
+
+ /**
+ * Return the name of this object class.
+ *
+ * The name may be localized.
+ *
+ * @return The name of this object class.
+ */
+ public String getName();
+
+ /**
+ * Return the id of this object class.
+ *
+ * <p>
+ * <code>ObjectDefintion</code> objects share a global namespace in the
+ * registry. They share this aspect with LDAP/X.500 attributes. In these
+ * standards the OSI Object Identifier (OID) is used to uniquely identify
+ * object classes. If such an OID exists, (which can be requested at several
+ * standard organisations and many companies already have a node in the
+ * tree) it can be returned here. Otherwise, a unique id should be returned
+ * which can be a java class name (reverse domain name) or generated with a
+ * GUID algorithm. Note that all LDAP defined object classes already have an
+ * OID associated. It is strongly advised to define the object classes from
+ * existing LDAP schemes which will give the OID for free. Many such schemes
+ * exist ranging from postal addresses to DHCP parameters.
+ *
+ * @return The id of this object class.
+ */
+ public String getID();
+
+ /**
+ * Return a description of this object class.
+ *
+ * The description may be localized.
+ *
+ * @return The description of this object class.
+ */
+ public String getDescription();
+
+ /**
+ * Return the attribute definitions for this object class.
+ *
+ * <p>
+ * Return a set of attributes. The filter parameter can distinguish between
+ * <code>ALL</code>,<code>REQUIRED</code> or the <code>OPTIONAL</code>
+ * attributes.
+ *
+ * @param filter <code>ALL</code>,<code>REQUIRED</code>,<code>OPTIONAL</code>
+ * @return An array of attribute definitions or <code>null</code> if no
+ * attributes are selected
+ */
+ public AttributeDefinition[] getAttributeDefinitions(int filter);
+
+ /**
+ * Return an <code>InputStream</code> object that can be used to create an
+ * icon from.
+ *
+ * <p>
+ * Indicate the size and return an <code>InputStream</code> object containing
+ * an icon. The returned icon maybe larger or smaller than the indicated
+ * size.
+ *
+ * <p>
+ * The icon may depend on the localization.
+ *
+ * @param size Requested size of an icon, e.g. a 16x16 pixels icon then size =
+ * 16
+ * @return An InputStream representing an icon or <code>null</code>
+ * @throws IOException If the <code>InputStream</code> cannot be returned.
+ */
+ public InputStream getIcon(int size) throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html
new file mode 100644
index 0000000..0b2b533
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Metatype Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.metatype; version="[1.1,2.0)"
+</pre>
+</BODY>
+
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo
new file mode 100644
index 0000000..3987f9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo
@@ -0,0 +1 @@
+version 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java
new file mode 100644
index 0000000..0b29053
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.provisioning;
+
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.zip.ZipInputStream;
+
+/**
+ * Service for managing the initial provisioning information.
+ * <p>
+ * Initial provisioning of an OSGi device is a multi step process that
+ * culminates with the installation and execution of the initial management
+ * agent. At each step of the process, information is collected for the next
+ * step. Multiple bundles may be involved and this service provides a means for
+ * these bundles to exchange information. It also provides a means for the
+ * initial Management Bundle to get its initial configuration information.
+ * <p>
+ * The provisioning information is collected in a <code>Dictionary</code>
+ * object, called the Provisioning Dictionary. Any bundle that can access the
+ * service can get a reference to this object and read and update provisioning
+ * information. The key of the dictionary is a <code>String</code> object and
+ * the value is a <code>String</code> or <code>byte[]</code> object. The
+ * single exception is the PROVISIONING_UPDATE_COUNT value which is an Integer.
+ * The <code>provisioning</code> prefix is reserved for keys defined by OSGi,
+ * other key names may be used for implementation dependent provisioning
+ * systems.
+ * <p>
+ * Any changes to the provisioning information will be reflected immediately in
+ * all the dictionary objects obtained from the Provisioning Service.
+ * <p>
+ * Because of the specific application of the Provisioning Service, there should
+ * be only one Provisioning Service registered. This restriction will not be
+ * enforced by the Framework. Gateway operators or manufactures should ensure
+ * that a Provisioning Service bundle is not installed on a device that already
+ * has a bundle providing the Provisioning Service.
+ * <p>
+ * The provisioning information has the potential to contain sensitive
+ * information. Also, the ability to modify provisioning information can have
+ * drastic consequences. Thus, only trusted bundles should be allowed to
+ * register and get the Provisioning Service. The <code>ServicePermission</code>
+ * is used to limit the bundles that can gain access to the Provisioning
+ * Service. There is no check of <code>Permission</code> objects to read or
+ * modify the provisioning information, so care must be taken not to leak the
+ * Provisioning Dictionary received from <code>getInformation</code> method.
+ *
+ * @version $Revision: 5654 $
+ */
+public interface ProvisioningService {
+ /**
+ * The key to the provisioning information that uniquely identifies the
+ * Service Platform. The value must be of type <code>String</code>.
+ */
+ public final static String PROVISIONING_SPID = "provisioning.spid";
+
+ /**
+ * The key to the provisioning information that contains the location of the
+ * provision data provider. The value must be of type <code>String</code>.
+ */
+ public final static String PROVISIONING_REFERENCE = "provisioning.reference";
+
+ /**
+ * The key to the provisioning information that contains the initial
+ * configuration information of the initial Management Agent. The value will
+ * be of type <code>byte[]</code>.
+ */
+ public final static String PROVISIONING_AGENT_CONFIG = "provisioning.agent.config";
+
+ /**
+ * The key to the provisioning information that contains the update count of
+ * the info data. Each set of changes to the provisioning information must
+ * end with this value being incremented. The value must be of type
+ * <code>Integer</code>. This key/value pair is also reflected in the
+ * properties of the ProvisioningService in the service registry.
+ */
+ public final static String PROVISIONING_UPDATE_COUNT = "provisioning.update.count";
+
+ /**
+ * The key to the provisioning information that contains the location of the
+ * bundle to start with <code>AllPermission</code>. The bundle must have
+ * be previously installed for this entry to have any effect.
+ */
+ public final static String PROVISIONING_START_BUNDLE = "provisioning.start.bundle";
+
+ /**
+ * The key to the provisioning information that contains the root X509
+ * certificate used to establish trust with operator when using HTTPS.
+ */
+ public final static String PROVISIONING_ROOTX509 = "provisioning.rootx509";
+
+ /**
+ * The key to the provisioning information that contains the shared secret
+ * used in conjunction with the RSH protocol.
+ */
+ public final static String PROVISIONING_RSH_SECRET = "provisioning.rsh.secret";
+
+ /**
+ * MIME type to be used in the InitialProvisioning-Entries header or stored
+ * in the extra field of a <code>ZipEntry</code> object for String data.
+ */
+ public final static String MIME_STRING = "text/plain;charset=utf-8";
+
+ /**
+ * MIME type to be used in the InitialProvisioning-Entries header or stored
+ * stored in the extra field of a <code>ZipEntry</code> object for
+ * <code>byte[]</code> data.
+ */
+ public final static String MIME_BYTE_ARRAY = "application/octet-stream";
+
+ /**
+ * MIME type to be used in the InitialProvisioning-Entries header or stored
+ * stored in the extra field of a <code>ZipEntry</code> object for an
+ * installable bundle file. Zip entries of this type will be installed in
+ * the framework, but not started. The entry will also not be put into the
+ * information dictionary.
+ */
+ public final static String MIME_BUNDLE = "application/vnd.osgi.bundle";
+
+ /**
+ * Alternative MIME type to be used in the InitialProvisioning-Entries header or stored
+ * stored in the extra field of a <code>ZipEntry</code> object for an
+ * installable bundle file. Zip entries of this type will be installed in
+ * the framework, but not started. The entry will also not be put into the
+ * information dictionary. This alternative entry is only for backward compatibility,
+ * new applications are recommended to use <code>MIME_BUNDLE</code>, which is an official
+ * IANA MIME type.
+ */
+ public final static String MIME_BUNDLE_ALT = "application/x-osgi-bundle";
+
+ /**
+ * MIME type to be stored in the extra field of a ZipEntry for a String that
+ * represents a URL for a bundle. Zip entries of this type will be used to
+ * install (but not start) a bundle from the URL. The entry will not be put
+ * into the information dictionary.
+ */
+ public final static String MIME_BUNDLE_URL = "text/x-osgi-bundle-url";
+
+ /**
+ * Name of the header that specifies the (MIME) type information for the ZIP file
+ * entries.
+ */
+ public final static String INITIALPROVISIONING_ENTRIES = "InitialProvisioning-Entries";
+
+ /**
+ * Returns a reference to the Provisioning Dictionary. Any change operations
+ * (put and remove) to the dictionary will cause an
+ * <code>UnsupportedOperationException</code> to be thrown. Changes must
+ * be done using the <code>setInformation</code> and
+ * <code>addInformation</code> methods of this service.
+ *
+ * @return A reference to the Provisioning Dictionary.
+ */
+ public Dictionary getInformation();
+
+ /**
+ * Replaces the Provisioning Information dictionary with the key/value pairs
+ * contained in <code>info</code>. Any key/value pairs not in
+ * <code>info</code> will be removed from the Provisioning Information
+ * dictionary. This method causes the <code>PROVISIONING_UPDATE_COUNT</code>
+ * to be incremented.
+ *
+ * @param info the new set of Provisioning Information key/value pairs. Any
+ * keys are values that are of an invalid type will be silently
+ * ignored.
+ */
+ public void setInformation(Dictionary info);
+
+ /**
+ * Adds the key/value pairs contained in <code>info</code> to the
+ * Provisioning Information dictionary. This method causes the
+ * <code>PROVISIONING_UPDATE_COUNT</code> to be incremented.
+ *
+ * @param info the set of Provisioning Information key/value pairs to add to
+ * the Provisioning Information dictionary. Any keys are values that
+ * are of an invalid type will be silently ignored.
+ */
+ public void addInformation(Dictionary info);
+
+ /**
+ * Processes the <code>ZipInputStream</code> and extracts information to
+ * add to the Provisioning Information dictionary, as well as,
+ * install/update and start bundles. This method causes the
+ * <code>PROVISIONING_UPDATE_COUNT</code> to be incremented.
+ *
+ * @param zis the <code>ZipInputStream</code> that will be used to add
+ * key/value pairs to the Provisioning Information dictionary and
+ * install and start bundles. If a <code>ZipEntry</code> does not
+ * have an <code>Extra</code> field that corresponds to one of the
+ * four defined MIME types (<code>MIME_STRING</code>,
+ * <code>MIME_BYTE_ARRAY</code>,<code>MIME_BUNDLE</code>, and
+ * <code>MIME_BUNDLE_URL</code>) in will be silently ignored.
+ * @throws IOException if an error occurs while processing the
+ * ZipInputStream. No additions will be made to the Provisioning
+ * Information dictionary and no bundles must be started or
+ * installed.
+ */
+ public void addInformation(ZipInputStream zis) throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html
new file mode 100644
index 0000000..8c28950
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Provisioning Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.provisioning; version="[1.2,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo
new file mode 100644
index 0000000..ef7df68
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo
@@ -0,0 +1 @@
+version 1.2
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java
new file mode 100644
index 0000000..742673f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+import java.util.Dictionary;
+
+/**
+ * A UPnP action.
+ *
+ * Each UPnP service contains zero or more actions. Each action may have zero or
+ * more UPnP state variables as arguments.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPAction {
+ /**
+ * Returns the action name.
+ *
+ * The action name corresponds to the <code>name</code> field in the
+ * <code>actionList</code> of the service description.
+ * <ul>
+ * <li>For standard actions defined by a UPnP Forum working committee,
+ * action names must not begin with <code>X_ </code> nor <code> A_</code>.</li>
+ * <li>For non-standard actions specified by a UPnP vendor and added to a
+ * standard service, action names must begin with <code>X_</code>.</li>
+ * </ul>
+ *
+ * @return Name of action, must not contain a hyphen character or a hash
+ * character
+ */
+ String getName();
+
+ /**
+ * Returns the name of the designated return argument.
+ * <p>
+ * One of the output arguments can be flagged as a designated return
+ * argument.
+ *
+ * @return The name of the designated return argument or <code>null</code> if
+ * none is marked.
+ */
+ String getReturnArgumentName();
+
+ /**
+ * Lists all input arguments for this action.
+ * <p>
+ * Each action may have zero or more input arguments.
+ *
+ * @return Array of input argument names or <code>null</code> if no input
+ * arguments.
+ *
+ * @see UPnPStateVariable
+ */
+ String[] getInputArgumentNames();
+
+ /**
+ * List all output arguments for this action.
+ *
+ * @return Array of output argument names or <code>null</code> if there are no
+ * output arguments.
+ *
+ * @see UPnPStateVariable
+ */
+ String[] getOutputArgumentNames();
+
+ /**
+ * Finds the state variable associated with an argument name.
+ *
+ * Helps to resolve the association of state variables with argument names
+ * in UPnP actions.
+ *
+ * @param argumentName The name of the UPnP action argument.
+ * @return State variable associated with the named argument or
+ * <code>null</code> if there is no such argument.
+ *
+ * @see UPnPStateVariable
+ */
+ UPnPStateVariable getStateVariable(String argumentName);
+
+ /**
+ * Invokes the action.
+ *
+ * The input and output arguments are both passed as <code>Dictionary</code>
+ * objects. Each entry in the <code>Dictionary</code> object has a
+ * <code>String</code> object as key representing the argument name and the
+ * value is the argument itself. The class of an argument value must be
+ * assignable from the class of the associated UPnP state variable.
+ *
+ * The input argument <code>Dictionary</code> object must contain exactly
+ * those arguments listed by <code>getInputArguments</code> method. The output
+ * argument <code>Dictionary</code> object will contain exactly those
+ * arguments listed by <code>getOutputArguments</code> method.
+ *
+ * @param args A <code>Dictionary</code> of arguments. Must contain the correct set and
+ * type of arguments for this action. May be <code>null</code> if no
+ * input arguments exist.
+ *
+ * @return A <code>Dictionary</code> with the output arguments.
+ * <code>null</code> if the action has no output arguments.
+ *
+ * @throws UPnPException A UPnP error has occured.
+ * @throws Exception The execution fails for some reason.
+ *
+ * @see UPnPStateVariable
+ */
+ Dictionary invoke(Dictionary args) throws Exception;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java
new file mode 100644
index 0000000..24ce178
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+import java.util.Dictionary;
+
+/**
+ * Represents a UPnP device.
+ *
+ * For each UPnP root and embedded device, an object is registered with the
+ * framework under the <code>UPnPDevice</code> interface.
+ * <p>
+ * The relationship between a root device and its embedded devices can be
+ * deduced using the <code>UPnPDevice.CHILDREN_UDN</code> and
+ * <code>UPnPDevice.PARENT_UDN</code> service registration properties.
+ * <p>
+ * The values of the UPnP property names are defined by the UPnP Forum.
+ * <p>
+ * All values of the UPnP properties are obtained from the device using the
+ * device's default locale.
+ * <p>
+ * If an application wants to query for a set of localized property values, it
+ * has to use the method <code>UPnPDevice.getDescriptions(String locale)</code>.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPDevice {
+ /*
+ * Constants for the UPnP device match scale.
+ */
+ /**
+ * Constant for the UPnP device match scale, indicating a generic match for
+ * the device. Value is 1.
+ */
+ int MATCH_GENERIC = 1;
+ /**
+ * Constant for the UPnP device match scale, indicating a match with the
+ * device type. Value is 3.
+ */
+ int MATCH_TYPE = 3;
+ /**
+ * Constant for the UPnP device match scale, indicating a match with the
+ * device model. Value is 7.
+ */
+ int MATCH_MANUFACTURER_MODEL = 7;
+ /**
+ * Constant for the UPnP device match scale, indicating a match with the
+ * device revision. Value is 15.
+ */
+ int MATCH_MANUFACTURER_MODEL_REVISION = 15;
+ /**
+ * Constant for the UPnP device match scale, indicating a match with the
+ * device revision and the serial number. Value is 31.
+ */
+ int MATCH_MANUFACTURER_MODEL_REVISION_SERIAL = 31;
+ /**
+ * Constant for the value of the service property <code>DEVICE_CATEGORY</code>
+ * used for all UPnP devices. Value is "UPnP".
+ *
+ * @see "<code>org.osgi.service.device.Constants.DEVICE_CATEGORY</code>"
+ */
+ String DEVICE_CATEGORY = "UPnP";
+ /**
+ * The <code>UPnP.export</code> service property is a hint that marks a device
+ * to be picked up and exported by the UPnP Service. Imported devices do not
+ * have this property set. The registered property requires no value.
+ * <p>
+ * The UPNP_EXPORT string is "UPnP.export".
+ */
+ String UPNP_EXPORT = "UPnP.export";
+ /**
+ * Property key for the Unique Device Name (UDN) property. It is the unique
+ * identifier of an instance of a <code>UPnPDevice</code>. The value of the
+ * property is a <code>String</code> object of the Device UDN. Value of the
+ * key is "UPnP.device.UDN". This property must be set.
+ */
+ String UDN = "UPnP.device.UDN";
+ /**
+ * Property key for the Unique Device ID property. This property is an alias
+ * to <code>UPnPDevice.UDN</code>. It is merely provided for reasons of
+ * symmetry with the <code>UPnPService.ID</code> property. The value of the
+ * property is a <code>String</code> object of the Device UDN. The value of
+ * the key is "UPnP.device.UDN".
+ */
+ String ID = UDN;
+ /**
+ * Property key for the UPnP Device Type property. Some standard property
+ * values are defined by the Universal Plug and Play Forum. The type string
+ * also includes a version number as defined in the UPnP specification. This
+ * property must be set.
+ * <p>
+ * For standard devices defined by a UPnP Forum working committee, this must
+ * consist of the following components in the given order separated by
+ * colons:
+ * <ul>
+ * <li><code>urn</code></li>
+ * <li>schemas-upnp-org</li>
+ * <li><code>device</code></li>
+ * <li>a device type suffix</li>
+ * <li>an integer device version</li>
+ * </ul>
+ * For non-standard devices specified by UPnP vendors following components
+ * must be specified in the given order separated by colons:
+ * <ul>
+ * <li><code>urn</code></li>
+ * <li>an ICANN domain name owned by the vendor</li>
+ * <li><code>device</code></li>
+ * <li>a device type suffix</li>
+ * <li>an integer device version</li>
+ * </ul>
+ * <p>
+ * To allow for backward compatibility the UPnP driver must automatically
+ * generate additional Device Type property entries for smaller versions
+ * than the current one. If for example a device announces its type as
+ * version 3, then properties for versions 2 and 1 must be automatically
+ * generated.
+ * <p>
+ * In the case of exporting a UPnPDevice, the highest available version must
+ * be announced on the network.
+ * <p>
+ * Syntax Example: <code>urn:schemas-upnp-org:device:deviceType:v</code>
+ * <p>
+ * The value is "UPnP.device.type".
+ */
+ String TYPE = "UPnP.device.type";
+ /**
+ * Mandatory property key for the device manufacturer's property. The
+ * property value holds a String representation of the device manufacturer's
+ * name. Value is "UPnP.device.manufacturer".
+ */
+ String MANUFACTURER = "UPnP.device.manufacturer";
+ /**
+ * Mandatory property key for the device model name. The property value
+ * holds a <code>String</code> object giving more information about the device
+ * model. Value is "UPnP.device.modelName".
+ */
+ String MODEL_NAME = "UPnP.device.modelName";
+ /**
+ * Mandatory property key for a short user friendly version of the device
+ * name. The property value holds a <code>String</code> object with the user
+ * friendly name of the device. Value is "UPnP.device.friendlyName".
+ */
+ String FRIENDLY_NAME = "UPnP.device.friendlyName";
+ /**
+ * Optional property key for a URL to the device manufacturers Web site. The
+ * value of the property is a <code>String</code> object representing the URL.
+ * Value is "UPnP.device.manufacturerURL".
+ */
+ String MANUFACTURER_URL = "UPnP.device.manufacturerURL";
+ /**
+ * Optional (but recommended) property key for a <code>String</code> object
+ * with a long description of the device for the end user. The value is
+ * "UPnP.device.modelDescription".
+ */
+ String MODEL_DESCRIPTION = "UPnP.device.modelDescription";
+ /**
+ * Optional (but recommended) property key for a <code>String</code> class
+ * typed property holding the model number of the device. Value is
+ * "UPnP.device.modelNumber".
+ */
+ String MODEL_NUMBER = "UPnP.device.modelNumber";
+ /**
+ * Optional property key for a <code>String</code> typed property holding a
+ * string representing the URL to the Web site for this model. Value is
+ * "UPnP.device.modelURL".
+ */
+ String MODEL_URL = "UPnP.device.modelURL";
+ /**
+ * Optional (but recommended) property key for a <code>String</code> typed
+ * property holding the serial number of the device. Value is
+ * "UPnP.device.serialNumber".
+ */
+ String SERIAL_NUMBER = "UPnP.device.serialNumber";
+ /**
+ * Optional property key for a <code>String</code> typed property holding the
+ * Universal Product Code (UPC) of the device. Value is "UPnP.device.UPC".
+ */
+ String UPC = "UPnP.device.UPC";
+ /**
+ * Optional (but recommended) property key for a <code>String</code> typed
+ * property holding a string representing the URL to a device representation
+ * Web page. Value is "UPnP.presentationURL".
+ */
+ String PRESENTATION_URL = "UPnP.presentationURL";
+ /**
+ * The property key that must be set for all embedded devices. It contains
+ * the UDN of the parent device. The property is not set for root devices.
+ * The value is "UPnP.device.parentUDN".
+ */
+ String PARENT_UDN = "UPnP.device.parentUDN";
+ /**
+ * The property key that must be set for all devices containing other
+ * embedded devices.
+ * <p>
+ * The value is an array of UDNs for each of the device's children (
+ * <code>String[]</code>). The array contains UDNs for the immediate
+ * descendants only.
+ * </p>
+ * <p>
+ * If an embedded device in turn contains embedded devices, the latter are
+ * not included in the array.
+ * </p>
+ * The UPnP Specification does not encourage more than two levels of
+ * nesting.
+ * <p>
+ * The property is not set if the device does not contain embedded devices.
+ * <p>
+ * The property is of type <code>String[]</code>. Value is
+ * "UPnP.device.childrenUDN"
+ */
+ String CHILDREN_UDN = "UPnP.device.childrenUDN";
+
+ /**
+ * Locates a specific service by its service id.
+ *
+ * @param serviceId The service id
+ * @return The requested service or null if not found.
+ */
+ UPnPService getService(String serviceId);
+
+ /**
+ * Lists all services provided by this device.
+ *
+ * @return Array of services or <code>null</code> if no services are
+ * available.
+ */
+ UPnPService[] getServices();
+
+ /**
+ * Lists all icons for this device in a given locale.
+ *
+ * The UPnP specification allows a device to present different icons based
+ * on the client's locale.
+ *
+ * @param locale A language tag as defined by RFC 1766 and maintained by ISO
+ * 639. Examples include "<code>de</code>", "<code>en</code>" or "
+ * <code>en-US</code>". The default locale of the device is specified
+ * by passing a <code>null</code> argument.
+ *
+ * @return Array of icons or null if no icons are available.
+ */
+ UPnPIcon[] getIcons(String locale);
+
+ /**
+ * Get a set of localized UPnP properties.
+ *
+ * The UPnP specification allows a device to present different device
+ * properties based on the client's locale. The properties used to register
+ * the UPnPDevice service in the OSGi registry are based on the device's
+ * default locale. To obtain a localized set of the properties, an
+ * application can use this method.
+ * <p>
+ * Not all properties might be available in all locales. This method does
+ * <b>not </b> substitute missing properties with their default locale
+ * versions.
+ * <p>
+ *
+ * @param locale A language tag as defined by RFC 1766 and maintained by ISO
+ * 639. Examples include "<code>de</code>", "<code>en</code>" or "
+ * <code>en-US</code>". The default locale of the device is specified
+ * by passing a <code>null</code> argument.
+ * @return Dictionary mapping property name Strings to property value
+ * Strings
+ *
+ */
+ Dictionary getDescriptions(String locale);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java
new file mode 100644
index 0000000..80d4455
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+import java.util.Dictionary;
+
+/**
+ * UPnP Events are mapped and delivered to applications according to the OSGi
+ * whiteboard model. An application that wishes to be notified of events
+ * generated by a particular UPnP Device registers a service extending this
+ * interface.
+ * <p>
+ * The notification call from the UPnP Service to any
+ * <code>UPnPEventListener</code> object must be done asynchronous with respect
+ * to the originator (in a separate thread).
+ * <p>
+ * Upon registration of the UPnP Event Listener service with the Framework, the
+ * service is notified for each variable which it listens for with an initial
+ * event containing the current value of the variable. Subsequent notifications
+ * only happen on changes of the value of the variable.
+ * <p>
+ * A UPnP Event Listener service filter the events it receives. This event set
+ * is limited using a standard framework filter expression which is specified
+ * when the listener service is registered.
+ * <p>
+ * The filter is specified in a property named "upnp.filter" and has as a value
+ * an object of type <code>org.osgi.framework.Filter</code>.
+ * <p>
+ * When the Filter is evaluated, the folowing keywords are recognized as defined
+ * as literal constants in the <code>UPnPDevice</code> class.
+ * <p>
+ * The valid subset of properties for the registration of UPnP Event Listener
+ * services are:
+ * <ul>
+ * <li><code>UPnPDevice.TYPE</code>-- Which type of device to listen for events.
+ * </li>
+ * <li><code>UPnPDevice.ID</code>-- The ID of a specific device to listen for
+ * events.</li>
+ * <li><code>UPnPService.TYPE</code>-- The type of a specific service to listen
+ * for events.</li>
+ * <li><code>UPnPService.ID</code>-- The ID of a specific service to listen for
+ * events.</li>
+ * </ul>
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPEventListener {
+ /**
+ * Key for a service property having a value that is an object of type
+ * <code>org.osgi.framework.Filter</code> and that is used to limit received
+ * events.
+ */
+ static final String UPNP_FILTER = "upnp.filter";
+
+ /**
+ * Callback method that is invoked for received events.
+ *
+ * The events are collected in a <code>Dictionary</code> object. Each entry
+ * has a <code>String</code> key representing the event name (= state variable
+ * name) and the new value of the state variable. The class of the value
+ * object must match the class specified by the UPnP State Variable
+ * associated with the event. This method must be called asynchronously
+ *
+ * @param deviceId ID of the device sending the events
+ * @param serviceId ID of the service sending the events
+ * @param events <code>Dictionary</code> object containing the new values for
+ * the state variables that have changed.
+ *
+ *
+ */
+ void notifyUPnPEvent(String deviceId, String serviceId, Dictionary events);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java
new file mode 100644
index 0000000..172c995
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+/**
+ * There are several defined error situations describing UPnP problems while a
+ * control point invokes actions to UPnPDevices.
+ *
+ * @since 1.1
+ * @version $Revision: 5673 $
+ */
+public class UPnPException extends Exception {
+ static final long serialVersionUID = -262013318122195146L;
+
+ /**
+ * No Action found by that name at this service.
+ */
+ public final static int INVALID_ACTION = 401;
+
+ /**
+ * Not enough arguments, too many arguments with a specific name, or one of
+ * more of the arguments are of the wrong type.
+ */
+ public final static int INVALID_ARGS = 402;
+
+ /**
+ * The different end-points are no longer in synchronization.
+ */
+ public final static int INVALID_SEQUENCE_NUMBER = 403;
+
+ /**
+ * Refers to a non existing variable.
+ */
+ public final static int INVALID_VARIABLE = 404;
+
+ /**
+ * The invoked action failed during execution.
+ */
+ public final static int DEVICE_INTERNAL_ERROR = 501;
+
+ /**
+ * Key for an error information that is an int type variable and that is
+ * used to identify occured errors.
+ */
+ private final int errorCode;
+
+ /**
+ * This constructor creates a UPnPException on the specified error code and
+ * error description.
+ *
+ * @param errorCode errorCode which defined UPnP Device Architecture V1.0.
+ * @param errordesc errorDescription which explain the type of propblem.
+ */
+ public UPnPException(int errorCode, String errordesc) {
+ super(errordesc);
+ this.errorCode = errorCode;
+ }
+
+ /**
+ * Returns the UPnPError Code occured by UPnPDevices during invocation.
+ *
+ * @return The UPnPErrorCode defined by a UPnP Forum working committee or
+ * specified by a UPnP vendor.
+ */
+ public int getUPnPError_Code() {
+ return errorCode;
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java
new file mode 100644
index 0000000..8b99be9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A UPnP icon representation.
+ *
+ * Each UPnP device can contain zero or more icons.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPIcon {
+ /**
+ * Returns the MIME type of the icon.
+ *
+ * This method returns the format in which the icon graphics, read from the
+ * <code>InputStream</code> object obtained by the <code>getInputStream()</code>
+ * method, is encoded.
+ * <p>
+ * The format of the returned string is in accordance to RFC2046. A list of
+ * valid MIME types is maintained by the <a
+ * href="http://www.iana.org/assignments/media-types/">IANA</a>.
+ * <p>
+ * Typical values returned include: "image/jpeg" or "image/gif"
+ *
+ * @return The MIME type of the encoded icon.
+ */
+ String getMimeType();
+
+ /**
+ * Returns the width of the icon in pixels.
+ *
+ * If the actual width of the icon is unknown, -1 is returned.
+ *
+ * @return The width in pixels, or -1 if unknown.
+ */
+ int getWidth();
+
+ /**
+ * Returns the height of the icon in pixels.
+ *
+ * If the actual height of the icon is unknown, -1 is returned.
+ *
+ * @return The height in pixels, or -1 if unknown.
+ */
+ int getHeight();
+
+ /**
+ * Returns the size of the icon in bytes.
+ *
+ * This method returns the number of bytes of the icon available to read
+ * from the <code>InputStream</code> object obtained by the
+ * <code>getInputStream()</code> method. If the actual size can not be
+ * determined, -1 is returned.
+ *
+ * @return The icon size in bytes, or -1 if the size is unknown.
+ */
+ int getSize();
+
+ /**
+ * Returns the color depth of the icon in bits.
+ *
+ * @return The color depth in bits. If the actual color depth of the icon is
+ * unknown, -1 is returned.
+ */
+ int getDepth();
+
+ /**
+ * Returns an <code>InputStream</code> object for the icon data.
+ *
+ * The <code>InputStream</code> object provides a way for a client to read the
+ * actual icon graphics data. The number of bytes available from this
+ * <code>InputStream</code> object can be determined via the
+ * <code>getSize()</code> method. The format of the data encoded can be
+ * determined by the MIME type availble via the <code>getMimeType()</code>
+ * method.
+ *
+ * @return An InputStream to read the icon graphics data from.
+ * @throws IOException If the <code>InputStream</code> cannot be returned.
+ * @see UPnPIcon#getMimeType()
+ */
+ InputStream getInputStream() throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java
new file mode 100644
index 0000000..241fb8a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * To keep the current values getting from subscribed UPnPDevices.
+ *
+ * The actual values of the UPnPStateVaraible are passed as Java object type.
+ *
+ * @since 1.1
+ **/
+package org.osgi.service.upnp;
+
+/**
+ * A local UPnP state variable which allows the value of the state variable to
+ * be queried.
+ *
+ * @since 1.1
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPLocalStateVariable extends UPnPStateVariable {
+ /**
+ * This method will keep the current values of UPnPStateVariables of a
+ * UPnPDevice whenever UPnPStateVariable's value is changed , this method
+ * must be called.
+ *
+ * @return <code>Object</code> current value of UPnPStateVariable. if the
+ * current value is initialized with the default value defined UPnP
+ * service description.
+ */
+ public Object getCurrentValue();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java
new file mode 100644
index 0000000..64b5894
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+/**
+ * A representation of a UPnP Service.
+ *
+ * Each UPnP device contains zero or more services. The UPnP description for a
+ * service defines actions, their arguments, and event characteristics.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPService {
+ /**
+ * Property key for the optional service type uri.
+ *
+ * The service type property is used when registering UPnP Device services
+ * and UPnP Event Listener services. The property contains a <code>String</code>
+ * array (<code>String[]</code>) of service types. A UPnP Device service can
+ * thus announce what types of services it contains. A UPnP Event Listener
+ * service can announce for what type of UPnP services it wants
+ * notifications. The service version is encoded in the type string as
+ * specified in the UPnP specification. A <code>null</code> value is a
+ * wildcard, matching <b>all </b> service types. Value is
+ * "UPnP.service.type".
+ *
+ * @see UPnPService#getType()
+ */
+ String TYPE = "UPnP.service.type";
+ /**
+ * Property key for the optional service id.
+ *
+ * The service id property is used when registering UPnP Device services or
+ * UPnP Event Listener services. The value of the property contains a
+ * <code>String</code> array (<code>String[]</code>) of service ids. A UPnP
+ * Device service can thus announce what service ids it contains. A UPnP
+ * Event Listener service can announce for what UPnP service ids it wants
+ * notifications. A service id does <b>not </b> have to be universally
+ * unique. It must be unique only within a device. A <code>null</code> value
+ * is a wildcard, matching <b>all </b> services. The value is
+ * "UPnP.service.id".
+ */
+ String ID = "UPnP.service.id";
+
+ /**
+ * Returns the <code>serviceId</code> field in the UPnP service description.
+ *
+ *
+ * <p>
+ * For standard services defined by a UPnP Forum working committee, the
+ * serviceId must contain the following components in the indicated order:
+ * <ul>
+ * <li><code>urn:upnp-org:serviceId:</code></li>
+ * <li>service ID suffix</li>
+ * </ul>
+ * Example: <code>urn:upnp-org:serviceId:serviceID</code>.
+ *
+ * <p>
+ * Note that <code>upnp-org</code> is used instead of
+ * <code>schemas-upnp-org</code> in this example because an XML schema is not
+ * defined for each serviceId.
+ * </p>
+ *
+ * <p>
+ * For non-standard services specified by UPnP vendors, the serviceId must
+ * contain the following components in the indicated order:
+ * <ul>
+ * <li><code>urn:</code></li>
+ * <li>ICANN domain name owned by the vendor</li>
+ * <li><code>:serviceId:</code></li>
+ * <li>service ID suffix</li>
+ * </ul>
+ * Example: <code>urn:domain-name:serviceId:serviceID</code>.
+ *
+ * @return The service ID suffix defined by a UPnP Forum working committee
+ * or specified by a UPnP vendor. Must be <= 64 characters.
+ * Single URI.
+ */
+ String getId();
+
+ /**
+ * Returns the <code>serviceType</code> field in the UPnP service description.
+ *
+ * <p>
+ * For standard services defined by a UPnP Forum working committee, the
+ * serviceType must contain the following components in the indicated order:
+ * <ul>
+ * <li><code>urn:schemas-upnp-org:service:</code></li>
+ * <li>service type suffix:</li>
+ * <li>integer service version</li>
+ * </ul>
+ * Example: <code>urn:schemas-upnp-org:service:serviceType:v</code>.
+ *
+ * <p>
+ * For non-standard services specified by UPnP vendors, the
+ * <code>serviceType</code> must contain the following components in the
+ * indicated order:
+ * <ul>
+ * <li><code>urn:</code></li>
+ * <li>ICANN domain name owned by the vendor</li>
+ * <li><code>:service:</code></li>
+ * <li>service type suffix:</li>
+ * <li>integer service version</li>
+ * </ul>
+ * Example: <code>urn:domain-name:service:serviceType:v</code>.
+ *
+ * @return The service type suffix defined by a UPnP Forum working committee
+ * or specified by a UPnP vendor. Must be <= 64 characters, not
+ * including the version suffix and separating colon. Single URI.
+ */
+ String getType();
+
+ /**
+ * Returns the version suffix encoded in the <code>serviceType</code> field in
+ * the UPnP service description.
+ *
+ * @return The integer service version defined by a UPnP Forum working
+ * committee or specified by a UPnP vendor.
+ */
+ String getVersion();
+
+ /**
+ * Locates a specific action by name.
+ *
+ * Looks up an action by its name.
+ *
+ * @param name Name of action. Must not contain hyphen or hash characters.
+ * Should be < 32 characters.
+ *
+ * @return The requested action or <code>null</code> if no action is found.
+ */
+ UPnPAction getAction(String name);
+
+ /**
+ * Lists all actions provided by this service.
+ *
+ * @return Array of actions (<code>UPnPAction[]</code> )or <code>null</code> if
+ * no actions are defined for this service.
+ */
+ UPnPAction[] getActions();
+
+ /**
+ * Lists all <code>UPnPStateVariable</code> objects provided by this service.
+ *
+ * @return Array of state variables or <code>null</code> if none are defined
+ * for this service.
+ */
+ UPnPStateVariable[] getStateVariables();
+
+ /**
+ * Gets a <code>UPnPStateVariable</code> objects provided by this service by
+ * name
+ *
+ * @param name Name of the State Variable
+ *
+ * @return State variable or <code>null</code> if no such state variable
+ * exists for this service.
+ */
+ UPnPStateVariable getStateVariable(String name);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java
new file mode 100644
index 0000000..27b7241
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.upnp;
+
+/**
+ * The meta-information of a UPnP state variable as declared in the device's
+ * service state table (SST).
+ * <p>
+ * Method calls to interact with a device (e.g.
+ * <code>UPnPAction.invoke(...);</code>) use this class to encapsulate meta
+ * information about the input and output arguments.
+ * <p>
+ * The actual values of the arguments are passed as Java objects. The mapping of
+ * types from UPnP data types to Java data types is described with the field
+ * definitions.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UPnPStateVariable {
+ /**
+ * Unsigned 1 <code>Byte</code> int.
+ * <p>
+ * Mapped to an <code>Integer</code> object.
+ */
+ static final String TYPE_UI1 = "ui1";
+ /**
+ * Unsigned 2 Byte int.
+ * <p>
+ * Mapped to <code>Integer</code> object.
+ */
+ static final String TYPE_UI2 = "ui2";
+ /**
+ * Unsigned 4 Byte int.
+ * <p>
+ * Mapped to <code>Long</code> object.
+ */
+ static final String TYPE_UI4 = "ui4";
+ /**
+ * 1 Byte int.
+ * <p>
+ * Mapped to <code>Integer</code> object.
+ */
+ static final String TYPE_I1 = "i1";
+ /**
+ * 2 Byte int.
+ * <p>
+ * Mapped to <code>Integer</code> object.
+ */
+ static final String TYPE_I2 = "i2";
+ /**
+ * 4 Byte int.
+ * <p>
+ * Must be between -2147483648 and 2147483647
+ * <p>
+ * Mapped to <code>Integer</code> object.
+ */
+ static final String TYPE_I4 = "i4";
+ /**
+ * Integer number.
+ * <p>
+ * Mapped to <code>Integer</code> object.
+ */
+ static final String TYPE_INT = "int";
+ /**
+ * 4 Byte float.
+ * <p>
+ * Same format as float. Must be between 3.40282347E+38 to 1.17549435E-38.
+ * <p>
+ * Mapped to <code>Float</code> object.
+ */
+ static final String TYPE_R4 = "r4";
+ /**
+ * 8 Byte float.
+ * <p>
+ * Same format as float. Must be between -1.79769313486232E308 and
+ * -4.94065645841247E-324 for negative values, and between
+ * 4.94065645841247E-324 and 1.79769313486232E308 for positive values, i.e.,
+ * IEEE 64-bit (8-Byte) double.
+ * <p>
+ * Mapped to <code>Double</code> object.
+ */
+ static final String TYPE_R8 = "r8";
+ /**
+ * Same as r8.
+ * <p>
+ * Mapped to <code>Double</code> object.
+ */
+ static final String TYPE_NUMBER = "number";
+ /**
+ * Same as r8 but no more than 14 digits to the left of the decimal point
+ * and no more than 4 to the right.
+ * <p>
+ * Mapped to <code>Double</code> object.
+ */
+ static final String TYPE_FIXED_14_4 = "fixed.14.4";
+ /**
+ * Floating-point number.
+ * <p>
+ * Mantissa (left of the decimal) and/or exponent may have a leading sign.
+ * Mantissa and/or exponent may have leading zeros. Decimal character in
+ * mantissa is a period, i.e., whole digits in mantissa separated from
+ * fractional digits by period. Mantissa separated from exponent by E. (No
+ * currency symbol.) (No grouping of digits in the mantissa, e.g., no
+ * commas.)
+ * <p>
+ * Mapped to <code>Float</code> object.
+ */
+ static final String TYPE_FLOAT = "float";
+ /**
+ * Unicode string.
+ * <p>
+ * One character long.
+ * <p>
+ * Mapped to <code>Character</code> object.
+ */
+ static final String TYPE_CHAR = "char";
+ /**
+ * Unicode string.
+ * <p>
+ * No limit on length.
+ * <p>
+ * Mapped to <code>String</code> object.
+ */
+ static final String TYPE_STRING = "string";
+ /**
+ * A calendar date.
+ * <p>
+ * Date in a subset of ISO 8601 format without time data.
+ * <p>
+ * See <a
+ * href="http://www.w3.org/TR/xmlschema-2/#date">http://www.w3.org/TR/xmlschema-2/#date
+ * </a>.
+ * <p>
+ * Mapped to <code>java.util.Date</code> object. Always 00:00 hours.
+ */
+ static final String TYPE_DATE = "date";
+ /**
+ * A specific instant of time.
+ * <p>
+ * Date in ISO 8601 format with optional time but no time zone.
+ * <p>
+ * See <a
+ * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#dateTime
+ * </a>.
+ * <p>
+ * Mapped to <code>java.util.Date</code> object using default time zone.
+ */
+ static final String TYPE_DATETIME = "dateTime";
+ /**
+ * A specific instant of time.
+ * <p>
+ * Date in ISO 8601 format with optional time and optional time zone.
+ * <p>
+ * See <a
+ * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#dateTime
+ * </a>.
+ * <p>
+ * Mapped to <code>java.util.Date</code> object adjusted to default time zone.
+ */
+ static final String TYPE_DATETIME_TZ = "dateTime.tz";
+ /**
+ * An instant of time that recurs every day.
+ * <p>
+ * Time in a subset of ISO 8601 format with no date and no time zone.
+ * <p>
+ * See <a
+ * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#time
+ * </a>.
+ * <p>
+ * Mapped to <code>Long</code>. Converted to milliseconds since midnight.
+ */
+ static final String TYPE_TIME = "time";
+ /**
+ * An instant of time that recurs every day.
+ * <p>
+ * Time in a subset of ISO 8601 format with optional time zone but no date.
+ * <p>
+ * See <a
+ * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#time
+ * </a>.
+ * <p>
+ * Mapped to <code>Long</code> object. Converted to milliseconds since
+ * midnight and adjusted to default time zone, wrapping at 0 and
+ * 24*60*60*1000.
+ */
+ static final String TYPE_TIME_TZ = "time.tz";
+ /**
+ * True or false.
+ * <p>
+ * Mapped to <code>Boolean</code> object.
+ */
+ static final String TYPE_BOOLEAN = "boolean";
+ /**
+ * MIME-style Base64 encoded binary BLOB.
+ * <p>
+ * Takes 3 Bytes, splits them into 4 parts, and maps each 6 bit piece to an
+ * octet. (3 octets are encoded as 4.) No limit on size.
+ * <p>
+ * Mapped to <code>byte[]</code> object. The Java byte array will hold the
+ * decoded content of the BLOB.
+ */
+ static final String TYPE_BIN_BASE64 = "bin.base64";
+ /**
+ * Hexadecimal digits representing octets.
+ * <p>
+ * Treats each nibble as a hex digit and encodes as a separate Byte. (1
+ * octet is encoded as 2.) No limit on size.
+ * <p>
+ * Mapped to <code>byte[]</code> object. The Java byte array will hold the
+ * decoded content of the BLOB.
+ */
+ static final String TYPE_BIN_HEX = "bin.hex";
+ /**
+ * Universal Resource Identifier.
+ * <p>
+ * Mapped to <code>String</code> object.
+ */
+ static final String TYPE_URI = "uri";
+ /**
+ * Universally Unique ID.
+ * <p>
+ * Hexadecimal digits representing octets. Optional embedded hyphens are
+ * ignored.
+ * <p>
+ * Mapped to <code>String</code> object.
+ */
+ static final String TYPE_UUID = "uuid";
+
+ /**
+ * Returns the variable name.
+ *
+ * <ul>
+ * <li>All standard variables defined by a UPnP Forum working committee
+ * must not begin with <code>X_</code> nor <code>A_</code>.</li>
+ * <li>All non-standard variables specified by a UPnP vendor and added to a
+ * standard service must begin with <code>X_</code>.</li>
+ * </ul>
+ *
+ * @return Name of state variable. Must not contain a hyphen character nor a
+ * hash character. Should be < 32 characters.
+ */
+ String getName();
+
+ /**
+ * Returns the Java class associated with the UPnP data type of this state
+ * variable.
+ * <P>
+ * Mapping between the UPnP data types and Java classes is performed
+ * according to the schema mentioned above.
+ *
+ * <pre>
+ *
+ * Integer ui1, ui2, i1, i2, i4, int
+ * Long ui4, time, time.tz
+ * Float r4, float
+ * Double r8, number, fixed.14.4
+ * Character char
+ * String string, uri, uuid
+ * Date date, dateTime, dateTime.tz
+ * Boolean boolean
+ * byte[] bin.base64, bin.hex
+ *
+ * </pre>
+ *
+ * @return A class object corresponding to the Java type of this argument.
+ */
+ Class getJavaDataType();
+
+ /**
+ * Returns the UPnP type of this state variable. Valid types are defined as
+ * constants.
+ *
+ * @return The UPnP data type of this state variable, as defined in above
+ * constants.
+ */
+ String getUPnPDataType();
+
+ /**
+ * Returns the default value, if defined.
+ *
+ * @return The default value or <code>null</code> if not defined. The type of
+ * the returned object can be determined by <code>getJavaDataType</code>.
+ */
+ Object getDefaultValue();
+
+ /**
+ * Returns the allowed values, if defined. Allowed values can be defined
+ * only for String types.
+ *
+ * @return The allowed values or <code>null</code> if not defined. Should be
+ * less than 32 characters.
+ */
+ String[] getAllowedValues();
+
+ /**
+ * Returns the minimum value, if defined. Minimum values can only be defined
+ * for numeric types.
+ *
+ * @return The minimum value or <code>null</code> if not defined.
+ */
+ Number getMinimum();
+
+ /**
+ * Returns the maximum value, if defined. Maximum values can only be defined
+ * for numeric types.
+ *
+ * @return The maximum value or <code>null</code> if not defined.
+ */
+ Number getMaximum();
+
+ /**
+ * Returns the size of an increment operation, if defined. Step sizes can be
+ * defined only for numeric types.
+ *
+ * @return The increment size or null if not defined.
+ */
+ Number getStep();
+
+ /**
+ * Tells if this StateVariable can be used as an event source.
+ *
+ * If the StateVariable is eventable, an event listener service can be
+ * registered to be notified when changes to the variable appear.
+ *
+ * @return <code>true</code> if the <code>StateVariable</code> generates events,
+ * <code>false</code> otherwise.
+ */
+ boolean sendsEvents();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html
new file mode 100644
index 0000000..5422e04
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>UPnP Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.upnp; version="[1.1,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo
new file mode 100644
index 0000000..3987f9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo
@@ -0,0 +1 @@
+version 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java
new file mode 100644
index 0000000..94289f7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+/**
+ * The <code>Authorization</code> interface encapsulates an authorization context
+ * on which bundles can base authorization decisions, where appropriate.
+ * <p>
+ * Bundles associate the privilege to access restricted resources or operations
+ * with roles. Before granting access to a restricted resource or operation, a
+ * bundle will check if the <code>Authorization</code> object passed to it possess
+ * the required role, by calling its <code>hasRole</code> method.
+ * <p>
+ * Authorization contexts are instantiated by calling the
+ * {@link UserAdmin#getAuthorization} method.
+ *
+ * <p>
+ * <i>Trusting Authorization objects </i>
+ * <p>
+ * There are no restrictions regarding the creation of <code>Authorization</code>
+ * objects. Hence, a service must only accept <code>Authorization</code> objects
+ * from bundles that has been authorized to use the service using code based (or
+ * Java 2) permissions.
+ *
+ * <p>
+ * In some cases it is useful to use <code>ServicePermission</code> to do the code
+ * based access control. A service basing user access control on
+ * <code>Authorization</code> objects passed to it, will then require that a
+ * calling bundle has the <code>ServicePermission</code> to get the service in
+ * question. This is the most convenient way. The OSGi environment will do the
+ * code based permission check when the calling bundle attempts to get the
+ * service from the service registry.
+ * <p>
+ * Example: A servlet using a service on a user's behalf. The bundle with the
+ * servlet must be given the <code>ServicePermission</code> to get the Http
+ * Service.
+ * <p>
+ * However, in some cases the code based permission checks need to be more
+ * fine-grained. A service might allow all bundles to get it, but require
+ * certain code based permissions for some of its methods.
+ * <p>
+ * Example: A servlet using a service on a user's behalf, where some service
+ * functionality is open to anyone, and some is restricted by code based
+ * permissions. When a restricted method is called (e.g., one handing over an
+ * <code>Authorization</code> object), the service explicitly checks that the
+ * calling bundle has permission to make the call.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Authorization {
+ /**
+ * Gets the name of the {@link User} that this <code>Authorization</code>
+ * context was created for.
+ *
+ * @return The name of the {@link User} object that this
+ * <code>Authorization</code> context was created for, or
+ * <code>null</code> if no user was specified when this
+ * <code>Authorization</code> context was created.
+ */
+ public String getName();
+
+ /**
+ * Checks if the role with the specified name is implied by this
+ * <code>Authorization</code> context.
+ * <p>
+ *
+ * Bundles must define globally unique role names that are associated with
+ * the privilege of accessing restricted resources or operations. Operators
+ * will grant users access to these resources, by creating a {@link Group}
+ * object for each role and adding {@link User} objects to it.
+ *
+ * @param name The name of the role to check for.
+ *
+ * @return <code>true</code> if this <code>Authorization</code> context implies
+ * the specified role, otherwise <code>false</code>.
+ */
+ public boolean hasRole(String name);
+
+ /**
+ * Gets the names of all roles implied by this <code>Authorization</code>
+ * context.
+ *
+ * @return The names of all roles implied by this
+ * <code>Authorization</code> context, or <code>null</code> if no roles
+ * are in the context. The predefined role <code>user.anyone</code>
+ * will not be included in this list.
+ */
+ public String[] getRoles();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java
new file mode 100644
index 0000000..4016a43
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+/**
+ * A named grouping of roles (<code>Role</code> objects).
+ * <p>
+ * Whether or not a given <code>Authorization</code> context implies a
+ * <code>Group</code> object depends on the members of that <code>Group</code>
+ * object.
+ * <p>
+ * A <code>Group</code> object can have two kinds of members: <i>basic </i> and
+ * <i>required </i>. A <code>Group</code> object is implied by an
+ * <code>Authorization</code> context if all of its required members are implied
+ * and at least one of its basic members is implied.
+ * <p>
+ * A <code>Group</code> object must contain at least one basic member in order to
+ * be implied. In other words, a <code>Group</code> object without any basic
+ * member roles is never implied by any <code>Authorization</code> context.
+ * <p>
+ * A <code>User</code> object always implies itself.
+ * <p>
+ * No loop detection is performed when adding members to <code>Group</code>
+ * objects, which means that it is possible to create circular implications.
+ * Loop detection is instead done when roles are checked. The semantics is that
+ * if a role depends on itself (i.e., there is an implication loop), the role is
+ * not implied.
+ * <p>
+ * The rule that a <code>Group</code> object must have at least one basic member
+ * to be implied is motivated by the following example:
+ *
+ * <pre>
+ *
+ * group foo
+ * required members: marketing
+ * basic members: alice, bob
+ *
+ * </pre>
+ *
+ * Privileged operations that require membership in "foo" can be performed only
+ * by "alice" and "bob", who are in marketing.
+ * <p>
+ * If "alice" and "bob" ever transfer to a different department, anybody in
+ * marketing will be able to assume the "foo" role, which certainly must be
+ * prevented. Requiring that "foo" (or any <code>Group</code> object for that
+ * matter) must have at least one basic member accomplishes that.
+ * <p>
+ * However, this would make it impossible for a <code>Group</code> object to be
+ * implied by just its required members. An example where this implication might
+ * be useful is the following declaration: "Any citizen who is an adult is
+ * allowed to vote." An intuitive configuration of "voter" would be:
+ *
+ * <pre>
+ *
+ * group voter
+ * required members: citizen, adult
+ * basic members:
+ *
+ * </pre>
+ *
+ * However, according to the above rule, the "voter" role could never be assumed
+ * by anybody, since it lacks any basic members. In order to address this issue
+ * a predefined role named "user.anyone" can be specified, which is always
+ * implied. The desired implication of the "voter" group can then be achieved by
+ * specifying "user.anyone" as its basic member, as follows:
+ *
+ * <pre>
+ *
+ * group voter
+ * required members: citizen, adult
+ * basic members: user.anyone
+ *
+ * </pre>
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Group extends User {
+ /**
+ * Adds the specified <code>Role</code> object as a basic member to this
+ * <code>Group</code> object.
+ *
+ * @param role The role to add as a basic member.
+ *
+ * @return <code>true</code> if the given role could be added as a basic
+ * member, and <code>false</code> if this <code>Group</code> object
+ * already contains a <code>Role</code> object whose name matches that
+ * of the specified role.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> with name
+ * <code>admin</code>.
+ */
+ public boolean addMember(Role role);
+
+ /**
+ * Adds the specified <code>Role</code> object as a required member to this
+ * <code>Group</code> object.
+ *
+ * @param role The <code>Role</code> object to add as a required member.
+ *
+ * @return <code>true</code> if the given <code>Role</code> object could be
+ * added as a required member, and <code>false</code> if this
+ * <code>Group</code> object already contains a <code>Role</code> object
+ * whose name matches that of the specified role.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> with name
+ * <code>admin</code>.
+ */
+ public boolean addRequiredMember(Role role);
+
+ /**
+ * Removes the specified <code>Role</code> object from this <code>Group</code>
+ * object.
+ *
+ * @param role The <code>Role</code> object to remove from this <code>Group</code>
+ * object.
+ *
+ * @return <code>true</code> if the <code>Role</code> object could be removed,
+ * otherwise <code>false</code>.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> with name
+ * <code>admin</code>.
+ */
+ public boolean removeMember(Role role);
+
+ /**
+ * Gets the basic members of this <code>Group</code> object.
+ *
+ * @return The basic members of this <code>Group</code> object, or
+ * <code>null</code> if this <code>Group</code> object does not contain
+ * any basic members.
+ */
+ public Role[] getMembers();
+
+ /**
+ * Gets the required members of this <code>Group</code> object.
+ *
+ * @return The required members of this <code>Group</code> object, or
+ * <code>null</code> if this <code>Group</code> object does not contain
+ * any required members.
+ */
+ public Role[] getRequiredMembers();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java
new file mode 100644
index 0000000..e33d559
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+import java.util.Dictionary;
+
+/**
+ * The base interface for <code>Role</code> objects managed by the User Admin
+ * service.
+ *
+ * <p>
+ * This interface exposes the characteristics shared by all <code>Role</code>
+ * classes: a name, a type, and a set of properties.
+ * <p>
+ * Properties represent public information about the <code>Role</code> object that
+ * can be read by anyone. Specific {@link UserAdminPermission} objects are
+ * required to change a <code>Role</code> object's properties.
+ * <p>
+ * <code>Role</code> object properties are <code>Dictionary</code> objects. Changes
+ * to these objects are propagated to the User Admin service and made
+ * persistent.
+ * <p>
+ * Every User Admin service contains a set of predefined <code>Role</code> objects
+ * that are always present and cannot be removed. All predefined <code>Role</code>
+ * objects are of type <code>ROLE</code>. This version of the
+ * <code>org.osgi.service.useradmin</code> package defines a single predefined
+ * role named "user.anyone", which is inherited by any other role.
+ * Other predefined roles may be added in the future. Since
+ * "user.anyone" is a <code>Role</code> object that has properties
+ * associated with it that can be read and modified. Access to these properties
+ * and their use is application specific and is controlled using
+ * <code>UserAdminPermission</code> in the same way that properties for other
+ * <code>Role</code> objects are.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Role {
+ /**
+ * The name of the predefined role, user.anyone, that all users and groups
+ * belong to.
+ * @since 1.1
+ */
+ public static final String USER_ANYONE = "user.anyone";
+ /**
+ * The type of a predefined role.
+ *
+ * <p>
+ * The value of <code>ROLE</code> is 0.
+ */
+ public static final int ROLE = 0;
+ /**
+ * The type of a {@link User} role.
+ *
+ * <p>
+ * The value of <code>USER</code> is 1.
+ */
+ public static final int USER = 1;
+ /**
+ * The type of a {@link Group} role.
+ *
+ * <p>
+ * The value of <code>GROUP</code> is 2.
+ */
+ public static final int GROUP = 2;
+
+ /**
+ * Returns the name of this role.
+ *
+ * @return The role's name.
+ */
+ public String getName();
+
+ /**
+ * Returns the type of this role.
+ *
+ * @return The role's type.
+ */
+ public int getType();
+
+ /**
+ * Returns a <code>Dictionary</code> of the (public) properties of this
+ * <code>Role</code> object. Any changes to the returned <code>Dictionary</code>
+ * will change the properties of this <code>Role</code> object. This will
+ * cause a <code>UserAdminEvent</code> object of type
+ * {@link UserAdminEvent#ROLE_CHANGED} to be broadcast to any
+ * <code>UserAdminListener</code> objects.
+ *
+ * <p>
+ * Only objects of type <code>String</code> may be used as property keys, and
+ * only objects of type <code>String</code> or <code>byte[]</code> may be used
+ * as property values. Any other types will cause an exception of type
+ * <code>IllegalArgumentException</code> to be raised.
+ *
+ * <p>
+ * In order to add, change, or remove a property in the returned
+ * <code>Dictionary</code>, a {@link UserAdminPermission} named after the
+ * property name (or a prefix of it) with action <code>changeProperty</code>
+ * is required.
+ *
+ * @return <code>Dictionary</code> containing the properties of this
+ * <code>Role</code> object.
+ */
+ public Dictionary getProperties();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java
new file mode 100644
index 0000000..b9103fd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+import java.util.Dictionary;
+
+/**
+ * A <code>User</code> role managed by a User Admin service.
+ *
+ * <p>
+ * In this context, the term "user" is not limited to just human
+ * beings. Instead, it refers to any entity that may have any number of
+ * credentials associated with it that it may use to authenticate itself.
+ * <p>
+ * In general, <code>User</code> objects are associated with a specific User Admin
+ * service (namely the one that created them), and cannot be used with other
+ * User Admin services.
+ * <p>
+ * A <code>User</code> object may have credentials (and properties, inherited from
+ * the {@link Role} class) associated with it. Specific
+ * {@link UserAdminPermission} objects are required to read or change a
+ * <code>User</code> object's credentials.
+ * <p>
+ * Credentials are <code>Dictionary</code> objects and have semantics that are
+ * similar to the properties in the <code>Role</code> class.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface User extends Role {
+ /**
+ * Returns a <code>Dictionary</code> of the credentials of this <code>User</code>
+ * object. Any changes to the returned <code>Dictionary</code> object will
+ * change the credentials of this <code>User</code> object. This will cause a
+ * <code>UserAdminEvent</code> object of type
+ * {@link UserAdminEvent#ROLE_CHANGED} to be broadcast to any
+ * <code>UserAdminListeners</code> objects.
+ *
+ * <p>
+ * Only objects of type <code>String</code> may be used as credential keys,
+ * and only objects of type <code>String</code> or of type <code>byte[]</code>
+ * may be used as credential values. Any other types will cause an exception
+ * of type <code>IllegalArgumentException</code> to be raised.
+ *
+ * <p>
+ * In order to retrieve a credential from the returned <code>Dictionary</code>
+ * object, a {@link UserAdminPermission} named after the credential name (or
+ * a prefix of it) with action <code>getCredential</code> is required.
+ * <p>
+ * In order to add or remove a credential from the returned
+ * <code>Dictionary</code> object, a {@link UserAdminPermission} named after
+ * the credential name (or a prefix of it) with action
+ * <code>changeCredential</code> is required.
+ *
+ * @return <code>Dictionary</code> object containing the credentials of this
+ * <code>User</code> object.
+ */
+ public Dictionary getCredentials();
+
+ /**
+ * Checks to see if this <code>User</code> object has a credential with the
+ * specified <code>key</code> set to the specified <code>value</code>.
+ *
+ * <p>
+ * If the specified credential <code>value</code> is not of type
+ * <code>String</code> or <code>byte[]</code>, it is ignored, that is,
+ * <code>false</code> is returned (as opposed to an
+ * <code>IllegalArgumentException</code> being raised).
+ *
+ * @param key The credential <code>key</code>.
+ * @param value The credential <code>value</code>.
+ *
+ * @return <code>true</code> if this user has the specified credential;
+ * <code>false</code> otherwise.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> named after the
+ * credential key (or a prefix of it) with action
+ * <code>getCredential</code>.
+ */
+ public boolean hasCredential(String key, Object value);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java
new file mode 100644
index 0000000..2e4b096
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+import org.osgi.framework.InvalidSyntaxException;
+
+/**
+ * This interface is used to manage a database of named <code>Role</code> objects,
+ * which can be used for authentication and authorization purposes.
+ *
+ * <p>
+ * This version of the User Admin service defines two types of <code>Role</code>
+ * objects: "User" and "Group". Each type of role is represented by an
+ * <code>int</code> constant and an interface. The range of positive integers is
+ * reserved for new types of roles that may be added in the future. When
+ * defining proprietary role types, negative constant values must be used.
+ *
+ * <p>
+ * Every role has a name and a type.
+ *
+ * <p>
+ * A {@link User} object can be configured with credentials (e.g., a password)
+ * and properties (e.g., a street address, phone number, etc.).
+ * <p>
+ * A {@link Group} object represents an aggregation of {@link User} and
+ * {@link Group} objects. In other words, the members of a <code>Group</code>
+ * object are roles themselves.
+ * <p>
+ * Every User Admin service manages and maintains its own namespace of
+ * <code>Role</code> objects, in which each <code>Role</code> object has a unique
+ * name.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UserAdmin {
+ /**
+ * Creates a <code>Role</code> object with the given name and of the given
+ * type.
+ *
+ * <p>
+ * If a <code>Role</code> object was created, a <code>UserAdminEvent</code>
+ * object of type {@link UserAdminEvent#ROLE_CREATED} is broadcast to any
+ * <code>UserAdminListener</code> object.
+ *
+ * @param name The <code>name</code> of the <code>Role</code> object to create.
+ * @param type The type of the <code>Role</code> object to create. Must be
+ * either a {@link Role#USER} type or {@link Role#GROUP} type.
+ *
+ * @return The newly created <code>Role</code> object, or <code>null</code> if a
+ * role with the given name already exists.
+ *
+ * @throws IllegalArgumentException if <code>type</code> is invalid.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> with name
+ * <code>admin</code>.
+ */
+ public Role createRole(String name, int type);
+
+ /**
+ * Removes the <code>Role</code> object with the given name from this User
+ * Admin service and all groups it is a member of.
+ *
+ * <p>
+ * If the <code>Role</code> object was removed, a <code>UserAdminEvent</code>
+ * object of type {@link UserAdminEvent#ROLE_REMOVED} is broadcast to any
+ * <code>UserAdminListener</code> object.
+ *
+ * @param name The name of the <code>Role</code> object to remove.
+ *
+ * @return <code>true</code> If a <code>Role</code> object with the given name
+ * is present in this User Admin service and could be removed,
+ * otherwise <code>false</code>.
+ *
+ * @throws SecurityException If a security manager exists and the caller
+ * does not have the <code>UserAdminPermission</code> with name
+ * <code>admin</code>.
+ */
+ public boolean removeRole(String name);
+
+ /**
+ * Gets the <code>Role</code> object with the given <code>name</code> from this
+ * User Admin service.
+ *
+ * @param name The name of the <code>Role</code> object to get.
+ *
+ * @return The requested <code>Role</code> object, or <code>null</code> if this
+ * User Admin service does not have a <code>Role</code> object with
+ * the given <code>name</code>.
+ */
+ public Role getRole(String name);
+
+ /**
+ * Gets the <code>Role</code> objects managed by this User Admin service that
+ * have properties matching the specified LDAP filter criteria. See
+ * <code>org.osgi.framework.Filter</code> for a description of the filter
+ * syntax. If a <code>null</code> filter is specified, all Role objects
+ * managed by this User Admin service are returned.
+ *
+ * @param filter The filter criteria to match.
+ *
+ * @return The <code>Role</code> objects managed by this User Admin service
+ * whose properties match the specified filter criteria, or all
+ * <code>Role</code> objects if a <code>null</code> filter is specified.
+ * If no roles match the filter, <code>null</code> will be returned.
+ * @throws InvalidSyntaxException If the filter is not well formed.
+ *
+ */
+ public Role[] getRoles(String filter) throws InvalidSyntaxException;
+
+ /**
+ * Gets the user with the given property <code>key</code>-<code>value</code>
+ * pair from the User Admin service database. This is a convenience method
+ * for retrieving a <code>User</code> object based on a property for which
+ * every <code>User</code> object is supposed to have a unique value (within
+ * the scope of this User Admin service), such as for example a X.500
+ * distinguished name.
+ *
+ * @param key The property key to look for.
+ * @param value The property value to compare with.
+ *
+ * @return A matching user, if <em>exactly</em> one is found. If zero or
+ * more than one matching users are found, <code>null</code> is
+ * returned.
+ */
+ public User getUser(String key, String value);
+
+ /**
+ * Creates an <code>Authorization</code> object that encapsulates the
+ * specified <code>User</code> object and the <code>Role</code> objects it
+ * possesses. The <code>null</code> user is interpreted as the anonymous user.
+ * The anonymous user represents a user that has not been authenticated. An
+ * <code>Authorization</code> object for an anonymous user will be unnamed,
+ * and will only imply groups that user.anyone implies.
+ *
+ * @param user The <code>User</code> object to create an
+ * <code>Authorization</code> object for, or <code>null</code> for the
+ * anonymous user.
+ *
+ * @return the <code>Authorization</code> object for the specified
+ * <code>User</code> object.
+ */
+ public Authorization getAuthorization(User user);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java
new file mode 100644
index 0000000..88ef8fb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * <code>Role</code> change event.
+ * <p>
+ * <code>UserAdminEvent</code> objects are delivered asynchronously to any
+ * <code>UserAdminListener</code> objects when a change occurs in any of the
+ * <code>Role</code> objects managed by a User Admin service.
+ *
+ * <p>
+ * A type code is used to identify the event. The following event types are
+ * defined: {@link #ROLE_CREATED} type, {@link #ROLE_CHANGED} type, and
+ * {@link #ROLE_REMOVED} type. Additional event types may be defined in the
+ * future.
+ *
+ * @see UserAdmin
+ * @see UserAdminListener
+ *
+ * @version $Revision: 5673 $
+ */
+public class UserAdminEvent {
+ private ServiceReference ref;
+ private int type;
+ private Role role;
+ /**
+ * A <code>Role</code> object has been created.
+ *
+ * <p>
+ * The value of <code>ROLE_CREATED</code> is 0x00000001.
+ */
+ public static final int ROLE_CREATED = 0x00000001;
+ /**
+ * A <code>Role</code> object has been modified.
+ *
+ * <p>
+ * The value of <code>ROLE_CHANGED</code> is 0x00000002.
+ */
+ public static final int ROLE_CHANGED = 0x00000002;
+ /**
+ * A <code>Role</code> object has been removed.
+ *
+ * <p>
+ * The value of <code>ROLE_REMOVED</code> is 0x00000004.
+ */
+ public static final int ROLE_REMOVED = 0x00000004;
+
+ /**
+ * Constructs a <code>UserAdminEvent</code> object from the given
+ * <code>ServiceReference</code> object, event type, and <code>Role</code>
+ * object.
+ *
+ * @param ref The <code>ServiceReference</code> object of the User Admin
+ * service that generated this event.
+ * @param type The event type.
+ * @param role The <code>Role</code> object on which this event occurred.
+ */
+ public UserAdminEvent(ServiceReference ref, int type, Role role) {
+ this.ref = ref;
+ this.type = type;
+ this.role = role;
+ }
+
+ /**
+ * Gets the <code>ServiceReference</code> object of the User Admin service
+ * that generated this event.
+ *
+ * @return The User Admin service's <code>ServiceReference</code> object.
+ */
+ public ServiceReference getServiceReference() {
+ return ref;
+ }
+
+ /**
+ * Returns the type of this event.
+ *
+ * <p>
+ * The type values are {@link #ROLE_CREATED} type, {@link #ROLE_CHANGED}
+ * type, and {@link #ROLE_REMOVED} type.
+ *
+ * @return The event type.
+ */
+ public int getType() {
+ return type;
+ }
+
+ /**
+ * Gets the <code>Role</code> object this event was generated for.
+ *
+ * @return The <code>Role</code> object this event was generated for.
+ */
+ public Role getRole() {
+ return role;
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java
new file mode 100644
index 0000000..a301b92
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+/**
+ * Listener for UserAdminEvents.
+ *
+ * <p>
+ * <code>UserAdminListener</code> objects are registered with the Framework
+ * service registry and notified with a <code>UserAdminEvent</code> object when a
+ * <code>Role</code> object has been created, removed, or modified.
+ * <p>
+ * <code>UserAdminListener</code> objects can further inspect the received
+ * <code>UserAdminEvent</code> object to determine its type, the <code>Role</code>
+ * object it occurred on, and the User Admin service that generated it.
+ *
+ * @see UserAdmin
+ * @see UserAdminEvent
+ *
+ * @version $Revision: 5673 $
+ */
+public interface UserAdminListener {
+ /**
+ * Receives notification that a <code>Role</code> object has been created,
+ * removed, or modified.
+ *
+ * @param event The <code>UserAdminEvent</code> object.
+ */
+ public void roleChanged(UserAdminEvent event);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java
new file mode 100644
index 0000000..52be194
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java
@@ -0,0 +1,643 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.useradmin;
+
+import java.io.IOException;
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ * Permission to configure and access the {@link Role} objects managed by a User
+ * Admin service.
+ *
+ * <p>
+ * This class represents access to the <code>Role</code> objects managed by a
+ * User Admin service and their properties and credentials (in the case of
+ * {@link User} objects).
+ * <p>
+ * The permission name is the name (or name prefix) of a property or credential.
+ * The naming convention follows the hierarchical property naming convention.
+ * Also, an asterisk may appear at the end of the name, following a
+ * ".", or by itself, to signify a wildcard match. For example:
+ * "org.osgi.security.protocol.*" or "*" is valid, but
+ * "*protocol" or "a*b" are not valid.
+ *
+ * <p>
+ * The <code>UserAdminPermission</code> with the reserved name "admin"
+ * represents the permission required for creating and removing
+ * <code>Role</code> objects in the User Admin service, as well as adding and
+ * removing members in a <code>Group</code> object. This
+ * <code>UserAdminPermission</code> does not have any actions associated with
+ * it.
+ *
+ * <p>
+ * The actions to be granted are passed to the constructor in a string
+ * containing a list of one or more comma-separated keywords. The possible
+ * keywords are: <code>changeProperty</code>,<code>changeCredential</code>, and
+ * <code>getCredential</code>. Their meaning is defined as follows:
+ *
+ * <pre>
+ *
+ * action
+ * changeProperty Permission to change (i.e., add and remove)
+ * Role object properties whose names start with
+ * the name argument specified in the constructor.
+ * changeCredential Permission to change (i.e., add and remove)
+ * User object credentials whose names start
+ * with the name argument specified in the constructor.
+ * getCredential Permission to retrieve and check for the
+ * existence of User object credentials whose names
+ * start with the name argument specified in the
+ * constructor.
+ *
+ * </pre>
+ *
+ * The action string is converted to lowercase before processing.
+ *
+ * <p>
+ * Following is a PermissionInfo style policy entry which grants a user
+ * administration bundle a number of <code>UserAdminPermission</code> object:
+ *
+ * <pre>
+ *
+ * (org.osgi.service.useradmin.UserAdminPermission "admin")
+ * (org.osgi.service.useradmin.UserAdminPermission "com.foo.*" "changeProperty,getCredential,changeCredential")
+ * (org.osgi.service.useradmin.UserAdminPermission "user.*", "changeProperty,changeCredential")
+ *
+ * </pre>
+ *
+ * The first permission statement grants the bundle the permission to perform
+ * any User Admin service operations of type "admin", that is, create and remove
+ * roles and configure <code>Group</code> objects.
+ *
+ * <p>
+ * The second permission statement grants the bundle the permission to change
+ * any properties as well as get and change any credentials whose names start
+ * with <code>com.foo.</code>.
+ *
+ * <p>
+ * The third permission statement grants the bundle the permission to change any
+ * properties and credentials whose names start with <code>user.</code>. This
+ * means that the bundle is allowed to change, but not retrieve any credentials
+ * with the given prefix.
+ *
+ * <p>
+ * The following policy entry empowers the Http Service bundle to perform user
+ * authentication:
+ *
+ * <pre>
+ *
+ * grant codeBase "${jars}http.jar" {
+ * permission org.osgi.service.useradmin.UserAdminPermission
+ * "user.password", "getCredential";
+ * };
+ *
+ * </pre>
+ *
+ * <p>
+ * The permission statement grants the Http Service bundle the permission to
+ * validate any password credentials (for authentication purposes), but the
+ * bundle is not allowed to change any properties or credentials.
+ *
+ * @ThreadSafe
+ * @version $Revision: 6381 $
+ */
+public final class UserAdminPermission extends BasicPermission {
+ static final long serialVersionUID = -1179971692401603789L;
+ /**
+ * The permission name "admin".
+ */
+ public static final String ADMIN = "admin";
+ /**
+ * The action string "changeProperty".
+ */
+ public static final String CHANGE_PROPERTY = "changeProperty";
+ private static final int ACTION_CHANGE_PROPERTY = 0x1;
+ /**
+ * The action string "changeCredential".
+ */
+ public static final String CHANGE_CREDENTIAL = "changeCredential";
+ private static final int ACTION_CHANGE_CREDENTIAL = 0x2;
+ /**
+ * The action string "getCredential".
+ */
+ public static final String GET_CREDENTIAL = "getCredential";
+ private static final int ACTION_GET_CREDENTIAL = 0x4;
+ /**
+ * All actions
+ */
+ private static final int ACTION_ALL = ACTION_CHANGE_PROPERTY
+ | ACTION_CHANGE_CREDENTIAL
+ | ACTION_GET_CREDENTIAL;
+ /**
+ * No actions.
+ */
+ static final int ACTION_NONE = 0;
+ /**
+ * The actions in canonical form.
+ *
+ * @serial
+ */
+ private volatile String actions = null;
+ /**
+ * The actions mask.
+ */
+ private transient int action_mask;
+
+ /**
+ * Creates a new <code>UserAdminPermission</code> with the specified name
+ * and actions. <code>name</code> is either the reserved string
+ * "admin" or the name of a credential or property, and
+ * <code>actions</code> contains a comma-separated list of the actions
+ * granted on the specified name. Valid actions are
+ * <code>changeProperty</code>,<code>changeCredential</code>, and
+ * getCredential.
+ *
+ * @param name the name of this <code>UserAdminPermission</code>
+ * @param actions the action string.
+ *
+ * @throws IllegalArgumentException If <code>name</code> equals
+ * "admin" and <code>actions</code> are specified.
+ */
+ public UserAdminPermission(String name, String actions) {
+ this(name, parseActions(actions));
+ }
+
+ /**
+ * Package private constructor used by
+ * <code>UserAdminPermissionCollection</code>.
+ *
+ * @param name class name
+ * @param mask action mask
+ */
+ UserAdminPermission(String name, int mask) {
+ super(name);
+ setTransients(mask);
+ }
+
+ /**
+ * Called by constructors and when deserialized.
+ *
+ * @param mask action mask
+ */
+ private synchronized void setTransients(int mask) {
+ if (getName().equals(ADMIN)) {
+ if (mask != ACTION_NONE) {
+ throw new IllegalArgumentException("Actions specified for "
+ + "no-action " + "UserAdminPermission");
+ }
+ }
+ else {
+ if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+ throw new IllegalArgumentException("Invalid action string");
+ }
+ }
+ action_mask = mask;
+ }
+
+ /**
+ * Returns the current action mask.
+ * <p>
+ * Used by the UserAdminPermissionCollection class.
+ *
+ * @return Current action mask.
+ */
+ synchronized int getActionsMask() {
+ return action_mask;
+ }
+
+ /**
+ * Parse action string into action mask.
+ *
+ * @param actions Action string.
+ * @return action mask.
+ */
+ private static int parseActions(String actions) {
+ boolean seencomma = false;
+ int mask = ACTION_NONE;
+ if (actions == null) {
+ return mask;
+ }
+ char[] a = actions.toCharArray();
+ int i = a.length - 1;
+ if (i < 0)
+ return mask;
+ while (i != -1) {
+ char c;
+ // skip whitespace
+ while ((i != -1)
+ && ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+ || c == '\f' || c == '\t'))
+ i--;
+ // check for the known strings
+ int matchlen;
+ if (i >= 12 && match_get(a, i - 10) && match_credential(a, i)) {
+ matchlen = 13;
+ mask |= ACTION_GET_CREDENTIAL;
+ }
+ else
+ if (i >= 13 && match_change(a, i - 8) && match_property(a, i)) {
+ matchlen = 14;
+ mask |= ACTION_CHANGE_PROPERTY;
+ }
+ else
+ if (i >= 15 && match_change(a, i - 10)
+ && match_credential(a, i)) {
+ matchlen = 16;
+ mask |= ACTION_CHANGE_CREDENTIAL;
+ }
+ else {
+ // parse error
+ throw new IllegalArgumentException(
+ "invalid permission: " + actions);
+ }
+ // make sure we didn't just match the tail of a word
+ // like "ackbarfimport". Also, skip to the comma.
+ seencomma = false;
+ while (i >= matchlen && !seencomma) {
+ switch (a[i - matchlen]) {
+ case ',' :
+ seencomma = true;
+ /* FALLTHROUGH */
+ case ' ' :
+ case '\r' :
+ case '\n' :
+ case '\f' :
+ case '\t' :
+ break;
+ default :
+ throw new IllegalArgumentException(
+ "invalid permission: " + actions);
+ }
+ i--;
+ }
+ // point i at the location of the comma minus one (or -1).
+ i -= matchlen;
+ }
+ if (seencomma) {
+ throw new IllegalArgumentException("invalid permission: " + actions);
+ }
+ return mask;
+ }
+
+ private static boolean match_change(char[] a, int i) {
+ return ((a[i - 5] == 'c' || a[i - 5] == 'C')
+ && (a[i - 4] == 'h' || a[i - 4] == 'H')
+ && (a[i - 3] == 'a' || a[i - 3] == 'A')
+ && (a[i - 2] == 'n' || a[i - 2] == 'N')
+ && (a[i - 1] == 'g' || a[i - 1] == 'G') && (a[i - 0] == 'e' || a[i - 0] == 'E'));
+ }
+
+ private static boolean match_get(char[] a, int i) {
+ return ((a[i - 2] == 'g' || a[i - 2] == 'G')
+ && (a[i - 1] == 'e' || a[i - 1] == 'E') && (a[i - 0] == 't' || a[i - 0] == 'T'));
+ }
+
+ private static boolean match_property(char[] a, int i) {
+ return ((a[i - 7] == 'p' || a[i - 7] == 'P')
+ && (a[i - 6] == 'r' || a[i - 6] == 'R')
+ && (a[i - 5] == 'o' || a[i - 5] == 'O')
+ && (a[i - 4] == 'p' || a[i - 4] == 'P')
+ && (a[i - 3] == 'e' || a[i - 3] == 'E')
+ && (a[i - 2] == 'r' || a[i - 2] == 'R')
+ && (a[i - 1] == 't' || a[i - 1] == 'T') && (a[i - 0] == 'y' || a[i - 0] == 'Y'));
+ }
+
+ private static boolean match_credential(char[] a, int i) {
+ return ((a[i - 9] == 'c' || a[i - 9] == 'C')
+ && (a[i - 8] == 'r' || a[i - 8] == 'R')
+ && (a[i - 7] == 'e' || a[i - 7] == 'E')
+ && (a[i - 6] == 'd' || a[i - 6] == 'D')
+ && (a[i - 5] == 'e' || a[i - 5] == 'E')
+ && (a[i - 4] == 'n' || a[i - 4] == 'N')
+ && (a[i - 3] == 't' || a[i - 3] == 'T')
+ && (a[i - 2] == 'i' || a[i - 2] == 'I')
+ && (a[i - 1] == 'a' || a[i - 1] == 'A') && (a[i - 0] == 'l' || a[i - 0] == 'L'));
+ }
+
+ /**
+ * Checks if this <code>UserAdminPermission</code> object
+ * "implies" the specified permission.
+ * <P>
+ * More specifically, this method returns <code>true</code> if:
+ * <p>
+ * <ul>
+ * <li><i>p </i> is an instanceof <code>UserAdminPermission</code>,
+ * <li><i>p </i>'s actions are a proper subset of this object's actions, and
+ * <li><i>p </i>'s name is implied by this object's name. For example,
+ * "java.*" implies "java.home".
+ * </ul>
+ *
+ * @param p the permission to check against.
+ *
+ * @return <code>true</code> if the specified permission is implied by this
+ * object; <code>false</code> otherwise.
+ */
+ public boolean implies(Permission p) {
+ if (p instanceof UserAdminPermission) {
+ UserAdminPermission requested = (UserAdminPermission) p;
+ int mask = getActionsMask();
+ int targetMask = requested.getActionsMask();
+ return // Check that the we have the requested action
+ ((targetMask & mask) == targetMask) &&
+ // If the target action mask is ACTION_NONE, it must be an
+ // admin permission, and then we must be that too
+ (targetMask != ACTION_NONE || mask == ACTION_NONE) &&
+ // Check that name name matches
+ super.implies(p);
+ }
+ return false;
+ }
+
+ /**
+ * Returns the canonical string representation of the actions, separated by
+ * comma.
+ *
+ * @return the canonical string representation of the actions.
+ */
+ public String getActions() {
+ String result = actions;
+ if (result == null) {
+ StringBuffer sb = new StringBuffer();
+ boolean comma = false;
+ int mask = getActionsMask();
+ if ((mask & ACTION_CHANGE_CREDENTIAL) == ACTION_CHANGE_CREDENTIAL) {
+ sb.append(CHANGE_CREDENTIAL);
+ comma = true;
+ }
+ if ((mask & ACTION_CHANGE_PROPERTY) == ACTION_CHANGE_PROPERTY) {
+ if (comma)
+ sb.append(',');
+ sb.append(CHANGE_PROPERTY);
+ comma = true;
+ }
+ if ((mask & ACTION_GET_CREDENTIAL) == ACTION_GET_CREDENTIAL) {
+ if (comma)
+ sb.append(',');
+ sb.append(GET_CREDENTIAL);
+ }
+ actions = result = sb.toString();
+ }
+ return result;
+ }
+
+ /**
+ * Returns a new <code>PermissionCollection</code> object for storing
+ * <code>UserAdminPermission</code> objects.
+ *
+ * @return a new <code>PermissionCollection</code> object suitable for
+ * storing <code>UserAdminPermission</code> objects.
+ */
+ public PermissionCollection newPermissionCollection() {
+ return new UserAdminPermissionCollection();
+ }
+
+ /**
+ * Checks two <code>UserAdminPermission</code> objects for equality. Checks
+ * that <code>obj</code> is a <code>UserAdminPermission</code>, and has the
+ * same name and actions as this object.
+ *
+ * @param obj the object to be compared for equality with this object.
+ *
+ * @return <code>true</code> if <code>obj</code> is a
+ * <code>UserAdminPermission</code> object, and has the same name
+ * and actions as this <code>UserAdminPermission</code> object.
+ */
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof UserAdminPermission)) {
+ return false;
+ }
+
+ UserAdminPermission uap = (UserAdminPermission) obj;
+
+ return (getActionsMask() == uap.getActionsMask())
+ && getName().equals(uap.getName());
+ }
+
+ /**
+ * Returns the hash code value for this object.
+ *
+ * @return A hash code value for this object.
+ */
+ public int hashCode() {
+ int h = 31 * 17 + getName().hashCode();
+ h = 31 * h + getActions().hashCode();
+ return h;
+ }
+
+ /**
+ * writeObject is called to save the state of this object to a stream. The
+ * actions are serialized, and the superclass takes care of the name.
+ */
+ private synchronized void writeObject(java.io.ObjectOutputStream s)
+ throws IOException {
+ // Write out the actions. The superclass takes care of the name
+ // call getActions to make sure actions field is initialized
+ if (actions == null)
+ getActions();
+ s.defaultWriteObject();
+ }
+
+ /*
+ * Restores this object from a stream (i.e., deserializes it).
+ */
+ private synchronized void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ // Read in the action, then initialize the rest
+ s.defaultReadObject();
+ setTransients(parseActions(actions));
+ }
+
+ /**
+ * Returns a string describing this <code>UserAdminPermission</code> object.
+ * This string must be in <code>PermissionInfo</code> encoded format.
+ *
+ * @return The <code>PermissionInfo</code> encoded string for this
+ * <code>UserAdminPermission</code> object.
+ * @see "<code>org.osgi.service.permissionadmin.PermissionInfo.getEncoded</code>"
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append('(');
+ sb.append(getClass().getName());
+ sb.append(" \"");
+ sb.append(getName());
+ String a = getActions();
+ if (a.length() > 0) {
+ sb.append("\" \"");
+ sb.append(a);
+ }
+ sb.append("\")");
+ return sb.toString();
+ }
+}
+
+/**
+ * A <code>UserAdminPermissionCollection</code> stores a set of
+ * <code>UserAdminPermission</code> permissions.
+ */
+
+final class UserAdminPermissionCollection extends PermissionCollection {
+ static final long serialVersionUID = -7222111885230120581L;
+ /**
+ * Table of permissions.
+ *
+ * @serial
+ * @GuardedBy this
+ */
+ private final Hashtable permissions;
+ /**
+ * Boolean saying if "*" is in the collection.
+ *
+ * @serial
+ * @GuardedBy this
+ */
+ private boolean all_allowed;
+
+ /**
+ * Creates an empty <code>UserAdminPermissionCollection</code> object.
+ */
+ public UserAdminPermissionCollection() {
+ permissions = new Hashtable();
+ all_allowed = false;
+ }
+
+ /**
+ * Adds the given permission to this
+ * <code>UserAdminPermissionCollection</code>. The key for the hash is the
+ * name.
+ *
+ * @param permission the <code>Permission</code> object to add.
+ *
+ * @throws IllegalArgumentException If the given permission is not a
+ * <code>UserAdminPermission</code>
+ * @throws SecurityException If this
+ * <code>UserAdminPermissionCollection</code> object has been marked
+ * readonly
+ */
+ public void add(Permission permission) {
+ if (!(permission instanceof UserAdminPermission))
+ throw new IllegalArgumentException("Invalid permission: "
+ + permission);
+ if (isReadOnly()) {
+ throw new SecurityException("Attempt to add a Permission to a "
+ + "readonly PermissionCollection");
+ }
+ final UserAdminPermission uap = (UserAdminPermission) permission;
+ final String name = uap.getName();
+ synchronized (this) {
+ final UserAdminPermission existing = (UserAdminPermission) permissions
+ .get(name);
+ if (existing != null) {
+ int oldMask = existing.getActionsMask();
+ int newMask = uap.getActionsMask();
+ if (oldMask != newMask) {
+ permissions.put(name, new UserAdminPermission(name, oldMask
+ | newMask));
+ }
+ }
+ else {
+ permissions.put(name, uap);
+ }
+ if (!all_allowed) {
+ if (name.equals("*")) {
+ all_allowed = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks to see if this <code>PermissionCollection</code> implies the given
+ * permission.
+ *
+ * @param permission the <code>Permission</code> object to check against
+ *
+ * @return true if the given permission is implied by this
+ * <code>PermissionCollection</code>, false otherwise.
+ */
+ public boolean implies(Permission permission) {
+ if (!(permission instanceof UserAdminPermission)) {
+ return false;
+ }
+ final UserAdminPermission requested = (UserAdminPermission) permission;
+ String name = requested.getName();
+ final int desired = requested.getActionsMask();
+ UserAdminPermission x;
+ int effective = 0;
+ synchronized (this) {
+ // Short circuit if the "*" Permission was added.
+ // desired can only be ACTION_NONE when name is "admin".
+ if (all_allowed && (desired != UserAdminPermission.ACTION_NONE)) {
+ x = (UserAdminPermission) permissions.get("*");
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ }
+ // strategy:
+ // Check for full match first. Then work our way up the
+ // name looking for matches on a.b.*
+
+ x = (UserAdminPermission) permissions.get(name);
+ }
+ if (x != null) {
+ // we have a direct hit!
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ // work our way up the tree...
+ int last;
+ int offset = name.length() - 1;
+ while ((last = name.lastIndexOf(".", offset)) != -1) {
+ name = name.substring(0, last + 1) + "*";
+ synchronized (this) {
+ x = (UserAdminPermission) permissions.get(name);
+ }
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ offset = last - 1;
+ }
+ // we don't have to check for "*" as it was already checked
+ // at the top (all_allowed), so we just return false
+ return false;
+ }
+
+ /**
+ * Returns an enumeration of all the <code>UserAdminPermission</code>
+ * objects in the container.
+ *
+ * @return an enumeration of all the <code>UserAdminPermission</code>
+ * objects.
+ */
+ public Enumeration elements() {
+ return permissions.elements();
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html
new file mode 100644
index 0000000..c8c223d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>User Admin Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.useradmin; version="[1.1,2.0)"
+</pre>
+</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo
new file mode 100644
index 0000000..3987f9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo
@@ -0,0 +1 @@
+version 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java
new file mode 100644
index 0000000..49df68a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * <code>BasicEnvelope</code> is an implementation of the {@link Envelope}
+ * interface
+ *
+ * @version $Revision: 5673 $
+ */
+public class BasicEnvelope implements Envelope {
+ Object value;
+ Object identification;
+ String scope;
+
+ /**
+ * Constructor.
+ *
+ * @param value Content of this envelope, may be <code>null</code>.
+ * @param identification Identifying object for this <code>Envelope</code>
+ * object, must not be <code>null</code>
+ * @param scope Scope name for this object, must not be <code>null</code>
+ * @see Envelope
+ */
+ public BasicEnvelope(Object value, Object identification, String scope) {
+ this.value = value;
+ this.identification = identification;
+ this.scope = scope;
+ }
+
+ /**
+ * @see org.osgi.service.wireadmin.Envelope#getValue()
+ */
+ public Object getValue() {
+ return value;
+ }
+
+ /**
+ * @see org.osgi.service.wireadmin.Envelope#getIdentification()
+ */
+ public Object getIdentification() {
+ return identification;
+ }
+
+ /**
+ * @see org.osgi.service.wireadmin.Envelope#getScope()
+ */
+ public String getScope() {
+ return scope;
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java
new file mode 100644
index 0000000..cef1c1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * Data Consumer, a service that can receive udpated values from
+ * {@link Producer} services.
+ *
+ * <p>
+ * Service objects registered under the <code>Consumer</code> interface are
+ * expected to consume values from a Producer service via a <code>Wire</code>
+ * object. A Consumer service may poll the Producer service by calling the
+ * {@link Wire#poll} method. The Consumer service will also receive an updated
+ * value when called at it's {@link #updated} method. The Producer service
+ * should have coerced the value to be an instance of one of the types specified
+ * by the {@link Wire#getFlavors} method, or one of their subclasses.
+ *
+ * <p>
+ * Consumer service objects must register with a <code>service.pid</code> and a
+ * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} property. It is recommended
+ * that Consumer service objects also register with a
+ * <code>service.description</code> property.
+ *
+ * <p>
+ * If an <code>Exception</code> is thrown by any of the <code>Consumer</code>
+ * methods, a <code>WireAdminEvent</code> of type
+ * {@link WireAdminEvent#CONSUMER_EXCEPTION} is broadcast by the Wire Admin
+ * service.
+ *
+ * <p>
+ * Security Considerations - Data consuming bundles will require
+ * <code>ServicePermission[Consumer,REGISTER]</code>. In general, only the Wire
+ * Admin service bundle should have this permission. Thus only the Wire Admin
+ * service may directly call a Consumer service. Care must be taken in the
+ * sharing of <code>Wire</code> objects with other bundles.
+ * <p>
+ * Consumer services must be registered with their scope when they can receive
+ * different types of objects from the Producer service. The Consumer service
+ * should have <code>WirePermission</code> for each of these scope names.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Consumer {
+ /**
+ * Update the value. This Consumer service is called by the <code>Wire</code>
+ * object with an updated value from the Producer service.
+ *
+ * <p>
+ * Note: This method may be called by a <code>Wire</code> object prior to this
+ * object being notified that it is connected to that <code>Wire</code> object
+ * (via the {@link #producersConnected} method).
+ * <p>
+ * When the Consumer service can receive <code>Envelope</code> objects, it
+ * must have registered all scope names together with the service object,
+ * and each of those names must be permitted by the bundle's
+ * <code>WirePermission</code>. If an <code>Envelope</code> object is delivered
+ * with the <code>updated</code> method, then the Consumer service should
+ * assume that the security check has been performed.
+ *
+ * @param wire The <code>Wire</code> object which is delivering the updated
+ * value.
+ * @param value The updated value. The value should be an instance of one of
+ * the types specified by the {@link Wire#getFlavors} method.
+ */
+ public void updated(Wire wire, Object value);
+
+ /**
+ * Update the list of <code>Wire</code> objects to which this Consumer service
+ * is connected.
+ *
+ * <p>
+ * This method is called when the Consumer service is first registered and
+ * subsequently whenever a <code>Wire</code> associated with this Consumer
+ * service becomes connected, is modified or becomes disconnected.
+ *
+ * <p>
+ * The Wire Admin service must call this method asynchronously. This implies
+ * that implementors of Consumer can be assured that the callback will not
+ * take place during registration when they execute the registration in a
+ * synchronized method.
+ *
+ * @param wires An array of the current and complete list of <code>Wire</code>
+ * objects to which this Consumer service is connected. May be
+ * <code>null</code> if the Consumer service is not currently connected
+ * to any <code>Wire</code> objects.
+ */
+ public void producersConnected(Wire[] wires);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java
new file mode 100644
index 0000000..5f57638
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * Identifies a contained value.
+ *
+ * An <code>Envelope</code> object combines a status value, an identification
+ * object and a scope name. The <code>Envelope</code> object allows the use of
+ * standard Java types when a Producer service can produce more than one kind of
+ * object. The <code>Envelope</code> object allows the Consumer service to
+ * recognize the kind of object that is received. For example, a door lock could
+ * be represented by a <code>Boolean</code> object. If the <code>Producer</code>
+ * service would send such a <code>Boolean</code> object, then the Consumer
+ * service would not know what door the <code>Boolean</code> object represented.
+ * The <code>Envelope</code> object contains an identification object so the
+ * Consumer service can discriminate between different kinds of values. The
+ * identification object may be a simple <code>String</code> object, but it can
+ * also be a domain specific object that is mutually agreed by the Producer and
+ * the Consumer service. This object can then contain relevant information that
+ * makes the identification easier.
+ * <p>
+ * The scope name of the envelope is used for security. The Wire object must
+ * verify that any <code>Envelope</code> object send through the <code>update</code>
+ * method or coming from the <code>poll</code> method has a scope name that
+ * matches the permissions of both the Producer service and the Consumer service
+ * involved. The wireadmin package also contains a class <code>BasicEnvelope</code>
+ * that implements the methods of this interface.
+ *
+ * @see WirePermission
+ * @see BasicEnvelope
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Envelope {
+ /**
+ * Return the value associated with this <code>Envelope</code> object.
+ *
+ * @return the value of the status item, or <code>null</code> when no item is
+ * associated with this object.
+ */
+ public Object getValue();
+
+ /**
+ * Return the identification of this <code>Envelope</code> object.
+ *
+ * An identification may be of any Java type. The type must be mutually
+ * agreed between the Consumer and Producer services.
+ *
+ * @return an object which identifies the status item in the address space
+ * of the composite producer, must not be null.
+ */
+ public Object getIdentification();
+
+ /**
+ * Return the scope name of this <code>Envelope</code> object.
+ *
+ * Scope names are used to restrict the communication between the Producer
+ * and Consumer services. Only <code>Envelopes</code> objects with a scope
+ * name that is permitted for the Producer and the Consumer services must be
+ * passed through a <code>Wire</code> object.
+ *
+ * @return the security scope for the status item, must not be null.
+ */
+ public String getScope();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java
new file mode 100644
index 0000000..faf6dfd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * Data Producer, a service that can generate values to be used by
+ * {@link Consumer} services.
+ *
+ * <p>
+ * Service objects registered under the Producer interface are expected to
+ * produce values (internally generated or from external sensors). The value can
+ * be of different types. When delivering a value to a <code>Wire</code> object,
+ * the Producer service should coerce the value to be an instance of one of the
+ * types specified by {@link Wire#getFlavors}. The classes are specified in
+ * order of preference.
+ *
+ * <p>
+ * When the data represented by the Producer object changes, this object should
+ * send the updated value by calling the <code>update</code> method on each of
+ * <code>Wire</code> objects passed in the most recent call to this object's
+ * {@link #consumersConnected} method. These <code>Wire</code> objects will pass
+ * the value on to the associated <code>Consumer</code> service object.
+ *
+ * <p>
+ * The Producer service may use the information in the <code>Wire</code> object's
+ * properties to schedule the delivery of values to the <code>Wire</code> object.
+ *
+ * <p>
+ * Producer service objects must register with a <code>service.pid</code> and a
+ * {@link WireConstants#WIREADMIN_PRODUCER_FLAVORS} property. It is recommended
+ * that a Producer service object also registers with a
+ * <code>service.description</code> property. Producer service objects must
+ * register with a {@link WireConstants#WIREADMIN_PRODUCER_FILTERS} property if
+ * the Producer service will be performing filtering instead of the
+ * <code>Wire</code> object.
+ *
+ * <p>
+ * If an exception is thrown by a Producer object method, a
+ * <code>WireAdminEvent</code> of type {@link WireAdminEvent#PRODUCER_EXCEPTION}
+ * is broadcast by the Wire Admin service.
+ *
+ * <p>
+ * Security Considerations. Data producing bundles will require
+ * <code>ServicePermission[Producer,REGISTER]</code> to register a Producer
+ * service. In general, only the Wire Admin service should have
+ * <code>ServicePermission[Producer,GET]</code>. Thus only the Wire Admin service
+ * may directly call a Producer service. Care must be taken in the sharing of
+ * <code>Wire</code> objects with other bundles.
+ * <p>
+ * Producer services must be registered with scope names when they can send
+ * different types of objects (composite) to the Consumer service. The Producer
+ * service should have <code>WirePermission</code> for each of these scope names.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Producer {
+ /**
+ * Return the current value of this <code>Producer</code> object.
+ *
+ * <p>
+ * This method is called by a <code>Wire</code> object in response to the
+ * Consumer service calling the <code>Wire</code> object's <code>poll</code>
+ * method. The Producer should coerce the value to be an instance of one of
+ * the types specified by {@link Wire#getFlavors}. The types are specified
+ * in order of of preference. The returned value should be as new or newer
+ * than the last value furnished by this object.
+ *
+ * <p>
+ * Note: This method may be called by a <code>Wire</code> object prior to this
+ * object being notified that it is connected to that <code>Wire</code> object
+ * (via the {@link #consumersConnected} method).
+ * <p>
+ * If the Producer service returns an <code>Envelope</code> object that has an
+ * unpermitted scope name, then the Wire object must ignore (or remove) the
+ * transfer.
+ * <p>
+ * If the <code>Wire</code> object has a scope set, the return value must be
+ * an array of <code>Envelope</code> objects (<code>Envelope[]</code>). The
+ * <code>Wire</code> object must have removed any <code>Envelope</code> objects
+ * that have a scope name that is not in the Wire object's scope.
+ *
+ * @param wire The <code>Wire</code> object which is polling this service.
+ * @return The current value of the Producer service or <code>null</code> if
+ * the value cannot be coerced into a compatible type. Or an array
+ * of <code>Envelope</code> objects.
+ */
+ public Object polled(Wire wire);
+
+ /**
+ * Update the list of <code>Wire</code> objects to which this
+ * <code>Producer</code> object is connected.
+ *
+ * <p>
+ * This method is called when the Producer service is first registered and
+ * subsequently whenever a <code>Wire</code> associated with this Producer
+ * becomes connected, is modified or becomes disconnected.
+ *
+ * <p>
+ * The Wire Admin service must call this method asynchronously. This implies
+ * that implementors of a Producer service can be assured that the callback
+ * will not take place during registration when they execute the
+ * registration in a synchronized method.
+ *
+ * @param wires An array of the current and complete list of <code>Wire</code>
+ * objects to which this Producer service is connected. May be
+ * <code>null</code> if the Producer is not currently connected to any
+ * <code>Wire</code> objects.
+ */
+ public void consumersConnected(Wire[] wires);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java
new file mode 100644
index 0000000..9e0c1a9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+import java.util.Dictionary;
+
+/**
+ * A connection between a Producer service and a Consumer service.
+ *
+ * <p>
+ * A <code>Wire</code> object connects a Producer service to a Consumer service.
+ * Both the Producer and Consumer services are identified by their unique
+ * <code>service.pid</code> values. The Producer and Consumer services may
+ * communicate with each other via <code>Wire</code> objects that connect them.
+ * The Producer service may send updated values to the Consumer service by
+ * calling the {@link #update} method. The Consumer service may request an
+ * updated value from the Producer service by calling the {@link #poll} method.
+ *
+ * <p>
+ * A Producer service and a Consumer service may be connected through multiple
+ * <code>Wire</code> objects.
+ *
+ * <p>
+ * Security Considerations. <code>Wire</code> objects are available to Producer
+ * and Consumer services connected to a given <code>Wire</code> object and to
+ * bundles which can access the <code>WireAdmin</code> service. A bundle must have
+ * <code>ServicePermission[WireAdmin,GET]</code> to get the <code>WireAdmin</code>
+ * service to access all <code>Wire</code> objects. A bundle registering a
+ * Producer service or a Consumer service must have the appropriate
+ * <code>ServicePermission[Consumer|Producer,REGISTER]</code> to register the
+ * service and will be passed <code>Wire</code> objects when the service object's
+ * <code>consumersConnected</code> or <code>producersConnected</code> method is
+ * called.
+ *
+ * <p>
+ * Scope. Each Wire object can have a scope set with the <code>setScope</code>
+ * method. This method should be called by a Consumer service when it assumes a
+ * Producer service that is composite (supports multiple information items). The
+ * names in the scope must be verified by the <code>Wire</code> object before it
+ * is used in communication. The semantics of the names depend on the Producer
+ * service and must not be interpreted by the Wire Admin service.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface Wire {
+ /**
+ * Return the state of this <code>Wire</code> object.
+ *
+ * <p>
+ * A connected <code>Wire</code> must always be disconnected before becoming
+ * invalid.
+ *
+ * @return <code>false</code> if this <code>Wire</code> object is invalid
+ * because it has been deleted via {@link WireAdmin#deleteWire};
+ * <code>true</code> otherwise.
+ */
+ public boolean isValid();
+
+ /**
+ * Return the connection state of this <code>Wire</code> object.
+ *
+ * <p>
+ * A <code>Wire</code> is connected after the Wire Admin service receives
+ * notification that the Producer service and the Consumer service for this
+ * <code>Wire</code> object are both registered. This method will return
+ * <code>true</code> prior to notifying the Producer and Consumer services via
+ * calls to their respective <code>consumersConnected</code> and
+ * <code>producersConnected</code> methods.
+ * <p>
+ * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_CONNECTED}
+ * must be broadcast by the Wire Admin service when the <code>Wire</code>
+ * becomes connected.
+ *
+ * <p>
+ * A <code>Wire</code> object is disconnected when either the Consumer or
+ * Producer service is unregistered or the <code>Wire</code> object is
+ * deleted.
+ * <p>
+ * A <code>WireAdminEvent</code> of type
+ * {@link WireAdminEvent#WIRE_DISCONNECTED} must be broadcast by the Wire
+ * Admin service when the <code>Wire</code> becomes disconnected.
+ *
+ * @return <code>true</code> if both the Producer and Consumer for this
+ * <code>Wire</code> object are connected to the <code>Wire</code>
+ * object; <code>false</code> otherwise.
+ */
+ public boolean isConnected();
+
+ /**
+ * Return the list of data types understood by the Consumer service
+ * connected to this <code>Wire</code> object. Note that subclasses of the
+ * classes in this list are acceptable data types as well.
+ *
+ * <p>
+ * The list is the value of the
+ * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} service property of the
+ * Consumer service object connected to this object. If no such property was
+ * registered or the type of the property value is not <code>Class[]</code>,
+ * this method must return <code>null</code>.
+ *
+ * @return An array containing the list of classes understood by the
+ * Consumer service or <code>null</code> if the <code>Wire</code> is not
+ * connected, or the consumer did not register a
+ * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} property or the
+ * value of the property is not of type <code>Class[]</code>.
+ */
+ public Class[] getFlavors();
+
+ /**
+ * Update the value.
+ *
+ * <p>
+ * This methods is called by the Producer service to notify the Consumer
+ * service connected to this <code>Wire</code> object of an updated value.
+ * <p>
+ * If the properties of this <code>Wire</code> object contain a
+ * {@link WireConstants#WIREADMIN_FILTER} property, then filtering is
+ * performed. If the Producer service connected to this <code>Wire</code>
+ * object was registered with the service property
+ * {@link WireConstants#WIREADMIN_PRODUCER_FILTERS}, the Producer service
+ * will perform the filtering according to the rules specified for the
+ * filter. Otherwise, this <code>Wire</code> object will perform the filtering
+ * of the value.
+ * <p>
+ * If no filtering is done, or the filter indicates the updated value should
+ * be delivered to the Consumer service, then this <code>Wire</code> object
+ * must call the {@link Consumer#updated} method with the updated value. If
+ * this <code>Wire</code> object is not connected, then the Consumer service
+ * must not be called and the value is ignored.
+ * <p>
+ * If the value is an <code>Envelope</code> object, and the scope name is not
+ * permitted, then the <code>Wire</code> object must ignore this call and not
+ * transfer the object to the Consumer service.
+ *
+ * <p>
+ * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_TRACE}
+ * must be broadcast by the Wire Admin service after the Consumer service
+ * has been successfully called.
+ *
+ * @param value The updated value. The value should be an instance of one of
+ * the types returned by {@link #getFlavors}.
+ * @see WireConstants#WIREADMIN_FILTER
+ */
+ public void update(Object value);
+
+ /**
+ * Poll for an updated value.
+ *
+ * <p>
+ * This methods is normally called by the Consumer service to request an
+ * updated value from the Producer service connected to this <code>Wire</code>
+ * object. This <code>Wire</code> object will call the {@link Producer#polled}
+ * method to obtain an updated value. If this <code>Wire</code> object is not
+ * connected, then the Producer service must not be called.
+ * <p>
+ *
+ * If this <code>Wire</code> object has a scope, then this method must return
+ * an array of <code>Envelope</code> objects. The objects returned must match
+ * the scope of this object. The <code>Wire</code> object must remove all
+ * <code>Envelope</code> objects with a scope name that is not in the
+ * <code>Wire</code> object's scope. Thus, the list of objects returned must
+ * only contain <code>Envelope</code> objects with a permitted scope name. If
+ * the array becomes empty, <code>null</code> must be returned.
+ *
+ * <p>
+ * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_TRACE}
+ * must be broadcast by the Wire Admin service after the Producer service
+ * has been successfully called.
+ *
+ * @return A value whose type should be one of the types returned by
+ * {@link #getFlavors},<code>Envelope[]</code>, or <code>null</code>
+ * if the <code>Wire</code> object is not connected, the Producer
+ * service threw an exception, or the Producer service returned a
+ * value which is not an instance of one of the types returned by
+ * {@link #getFlavors}.
+ */
+ public Object poll();
+
+ /**
+ * Return the last value sent through this <code>Wire</code> object.
+ *
+ * <p>
+ * The returned value is the most recent, valid value passed to the
+ * {@link #update} method or returned by the {@link #poll} method of this
+ * object. If filtering is performed by this <code>Wire</code> object, this
+ * methods returns the last value provided by the Producer service. This
+ * value may be an <code>Envelope[]</code> when the Producer service uses
+ * scoping. If the return value is an Envelope object (or array), it must be
+ * verified that the Consumer service has the proper WirePermission to see
+ * it.
+ *
+ * @return The last value passed though this <code>Wire</code> object or
+ * <code>null</code> if no valid values have been passed or the
+ * Consumer service has no permission.
+ */
+ public Object getLastValue();
+
+ /**
+ * Return the wire properties for this <code>Wire</code> object.
+ *
+ * @return The properties for this <code>Wire</code> object. The returned
+ * <code>Dictionary</code> must be read only.
+ */
+ public Dictionary getProperties();
+
+ /**
+ * Return the calculated scope of this <code>Wire</code> object.
+ *
+ * The purpose of the <code>Wire</code> object's scope is to allow a Producer
+ * and/or Consumer service to produce/consume different types over a single
+ * <code>Wire</code> object (this was deemed necessary for efficiency
+ * reasons). Both the Consumer service and the Producer service must set an
+ * array of scope names (their scope) with the service registration property
+ * <code>WIREADMIN_PRODUCER_SCOPE</code>, or
+ * <code>WIREADMIN_CONSUMER_SCOPE</code> when they can produce multiple types.
+ * If a Producer service can produce different types, it should set this
+ * property to the array of scope names it can produce, the Consumer service
+ * must set the array of scope names it can consume. The scope of a
+ * <code>Wire</code> object is defined as the intersection of permitted scope
+ * names of the Producer service and Consumer service.
+ * <p>
+ * If neither the Consumer, or the Producer service registers scope names
+ * with its service registration, then the <code>Wire</code> object's scope
+ * must be <code>null</code>.
+ * <p>
+ * The <code>Wire</code> object's scope must not change when a Producer or
+ * Consumer services modifies its scope.
+ * <p>
+ * A scope name is permitted for a Producer service when the registering
+ * bundle has <code>WirePermission[name,PRODUCE]</code>, and for a Consumer
+ * service when the registering bundle has <code>WirePermission[name,CONSUME]</code>.
+ * <p>
+ * If either Consumer service or Producer service has not set a
+ * <code>WIREADMIN_*_SCOPE</code> property, then the returned value must be
+ * <code>null</code>.
+ * <p>
+ * If the scope is set, the <code>Wire</code> object must enforce the scope
+ * names when <code>Envelope</code> objects are used as a parameter to update
+ * or returned from the <code>poll</code> method. The <code>Wire</code> object
+ * must then remove all <code>Envelope</code> objects with a scope name that
+ * is not permitted.
+ *
+ * @return A list of permitted scope names or null if the Produce or
+ * Consumer service has set no scope names.
+ */
+ public String[] getScope();
+
+ /**
+ * Return true if the given name is in this <code>Wire</code> object's scope.
+ *
+ * @param name The scope name
+ * @return true if the name is listed in the permitted scope names
+ */
+ public boolean hasScope(String name);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java
new file mode 100644
index 0000000..578ef4f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+import java.util.Dictionary;
+
+import org.osgi.framework.InvalidSyntaxException;
+
+/**
+ * Wire Administration service.
+ *
+ * <p>
+ * This service can be used to create <code>Wire</code> objects connecting a
+ * Producer service and a Consumer service. <code>Wire</code> objects also have
+ * wire properties that may be specified when a <code>Wire</code> object is
+ * created. The Producer and Consumer services may use the <code>Wire</code>
+ * object's properties to manage or control their interaction. The use of
+ * <code>Wire</code> object's properties by a Producer or Consumer services is
+ * optional.
+ *
+ * <p>
+ * Security Considerations. A bundle must have
+ * <code>ServicePermission[WireAdmin,GET]</code> to get the Wire Admin service to
+ * create, modify, find, and delete <code>Wire</code> objects.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface WireAdmin {
+ /**
+ * Create a new <code>Wire</code> object that connects a Producer service to a
+ * Consumer service.
+ *
+ * The Producer service and Consumer service do not have to be registered
+ * when the <code>Wire</code> object is created.
+ *
+ * <p>
+ * The <code>Wire</code> configuration data must be persistently stored. All
+ * <code>Wire</code> connections are reestablished when the <code>WireAdmin</code>
+ * service is registered. A <code>Wire</code> can be permanently removed by
+ * using the {@link #deleteWire} method.
+ *
+ * <p>
+ * The <code>Wire</code> object's properties must have case insensitive
+ * <code>String</code> objects as keys (like the Framework). However, the case
+ * of the key must be preserved.
+ *
+ * <p>
+ * The <code>WireAdmin</code> service must automatically add the following
+ * <code>Wire</code> properties:
+ * <ul>
+ * <li>{@link WireConstants#WIREADMIN_PID} set to the value of the
+ * <code>Wire</code> object's persistent identity (PID). This value is
+ * generated by the Wire Admin service when a <code>Wire</code> object is
+ * created.</li>
+ * <li>{@link WireConstants#WIREADMIN_PRODUCER_PID} set to the value of
+ * Producer service's PID.</li>
+ * <li>{@link WireConstants#WIREADMIN_CONSUMER_PID} set to the value of
+ * Consumer service's PID.</li>
+ * </ul>
+ * If the <code>properties</code> argument already contains any of these keys,
+ * then the supplied values are replaced with the values assigned by the
+ * Wire Admin service.
+ *
+ * <p>
+ * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
+ * {@link WireAdminEvent#WIRE_CREATED} after the new <code>Wire</code> object
+ * becomes available from {@link #getWires}.
+ *
+ * @param producerPID The <code>service.pid</code> of the Producer service to
+ * be connected to the <code>Wire</code> object.
+ * @param consumerPID The <code>service.pid</code> of the Consumer service to
+ * be connected to the <code>Wire</code> object.
+ * @param properties The <code>Wire</code> object's properties. This argument
+ * may be <code>null</code> if the caller does not wish to define any
+ * <code>Wire</code> object's properties.
+ * @return The <code>Wire</code> object for this connection.
+ *
+ * @throws java.lang.IllegalArgumentException If <code>properties</code>
+ * contains invalid wire types or case variants of the same key
+ * name.
+ */
+ public Wire createWire(String producerPID, String consumerPID,
+ Dictionary properties);
+
+ /**
+ * Delete a <code>Wire</code> object.
+ *
+ * <p>
+ * The <code>Wire</code> object representing a connection between a Producer
+ * service and a Consumer service must be removed. The persistently stored
+ * configuration data for the <code>Wire</code> object must destroyed. The
+ * <code>Wire</code> object's method {@link Wire#isValid} will return
+ * <code>false</code> after it is deleted.
+ *
+ * <p>
+ * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
+ * {@link WireAdminEvent#WIRE_DELETED} after the <code>Wire</code> object
+ * becomes invalid.
+ *
+ * @param wire The <code>Wire</code> object which is to be deleted.
+ */
+ public void deleteWire(Wire wire);
+
+ /**
+ * Update the properties of a <code>Wire</code> object.
+ *
+ * The persistently stored configuration data for the <code>Wire</code> object
+ * is updated with the new properties and then the Consumer and Producer
+ * services will be called at the respective
+ * {@link Consumer#producersConnected} and
+ * {@link Producer#consumersConnected} methods.
+ *
+ * <p>
+ * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
+ * {@link WireAdminEvent#WIRE_UPDATED} after the updated properties are
+ * available from the <code>Wire</code> object.
+ *
+ * @param wire The <code>Wire</code> object which is to be updated.
+ * @param properties The new <code>Wire</code> object's properties or
+ * <code>null</code> if no properties are required.
+ *
+ * @throws java.lang.IllegalArgumentException If <code>properties</code>
+ * contains invalid wire types or case variants of the same key
+ * name.
+ */
+ public void updateWire(Wire wire, Dictionary properties);
+
+ /**
+ * Return the <code>Wire</code> objects that match the given <code>filter</code>.
+ *
+ * <p>
+ * The list of available <code>Wire</code> objects is matched against the
+ * specified <code>filter</code>.<code>Wire</code> objects which match the
+ * <code>filter</code> must be returned. These <code>Wire</code> objects are not
+ * necessarily connected. The Wire Admin service should not return invalid
+ * <code>Wire</code> objects, but it is possible that a <code>Wire</code> object
+ * is deleted after it was placed in the list.
+ *
+ * <p>
+ * The filter matches against the <code>Wire</code> object's properties
+ * including {@link WireConstants#WIREADMIN_PRODUCER_PID},
+ * {@link WireConstants#WIREADMIN_CONSUMER_PID} and
+ * {@link WireConstants#WIREADMIN_PID}.
+ *
+ * @param filter Filter string to select <code>Wire</code> objects or
+ * <code>null</code> to select all <code>Wire</code> objects.
+ * @return An array of <code>Wire</code> objects which match the
+ * <code>filter</code> or <code>null</code> if no <code>Wire</code>
+ * objects match the <code>filter</code>.
+ * @throws org.osgi.framework.InvalidSyntaxException If the specified
+ * <code>filter</code> has an invalid syntax.
+ * @see org.osgi.framework.Filter
+ */
+ public Wire[] getWires(String filter) throws InvalidSyntaxException;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java
new file mode 100644
index 0000000..bba84ef
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A Wire Admin Event.
+ *
+ * <p>
+ * <code>WireAdminEvent</code> objects are delivered to all registered
+ * <code>WireAdminListener</code> service objects which specify an interest in the
+ * <code>WireAdminEvent</code> type. Events must be delivered in chronological
+ * order with respect to each listener. For example, a <code>WireAdminEvent</code>
+ * of type {@link #WIRE_CONNECTED} must be delivered before a
+ * <code>WireAdminEvent</code> of type {@link #WIRE_DISCONNECTED} for a particular
+ * <code>Wire</code> object.
+ *
+ * <p>
+ * A type code is used to identify the type of event. The following event types
+ * are defined:
+ * <ul>
+ * <li>{@link #WIRE_CREATED}
+ * <li>{@link #WIRE_CONNECTED}
+ * <li>{@link #WIRE_UPDATED}
+ * <li>{@link #WIRE_TRACE}
+ * <li>{@link #WIRE_DISCONNECTED}
+ * <li>{@link #WIRE_DELETED}
+ * <li>{@link #PRODUCER_EXCEPTION}
+ * <li>{@link #CONSUMER_EXCEPTION}
+ * </ul>
+ * Additional event types may be defined in the future.
+ *
+ * <p>
+ * Event type values must be unique and disjoint bit values. Event types must be
+ * defined as a bit in a 32 bit integer and can thus be bitwise OR'ed together.
+ * <p>
+ * Security Considerations. <code>WireAdminEvent</code> objects contain
+ * <code>Wire</code> objects. Care must be taken in the sharing of <code>Wire</code>
+ * objects with other bundles.
+ *
+ * @see WireAdminListener
+ *
+ * @version $Revision: 5673 $
+ */
+public class WireAdminEvent {
+ /**
+ * The WireAdmin service which created this event.
+ */
+ private ServiceReference reference;
+ /**
+ * The <code>Wire</code> object associated with this event.
+ */
+ private Wire wire;
+ /**
+ * Type of this event.
+ *
+ * @see #getType
+ */
+ private int type;
+ /**
+ * Exception associates with this the event.
+ */
+ private Throwable throwable;
+ /**
+ * A Producer service method has thrown an exception.
+ *
+ * <p>
+ * This <code>WireAdminEvent</code> type indicates that a Producer service
+ * method has thrown an exception. The {@link WireAdminEvent#getThrowable}
+ * method will return the exception that the Producer service method raised.
+ *
+ * <p>
+ * The value of <code>PRODUCER_EXCEPTION</code> is 0x00000001.
+ */
+ public final static int PRODUCER_EXCEPTION = 0x00000001;
+ /**
+ * A Consumer service method has thrown an exception.
+ *
+ * <p>
+ * This <code>WireAdminEvent</code> type indicates that a Consumer service
+ * method has thrown an exception. The {@link WireAdminEvent#getThrowable}
+ * method will return the exception that the Consumer service method raised.
+ *
+ * <p>
+ * The value of <code>CONSUMER_EXCEPTION</code> is 0x00000002.
+ */
+ public final static int CONSUMER_EXCEPTION = 0x00000002;
+ /**
+ * A <code>Wire</code> has been created.
+ *
+ * <p>
+ * This <code>WireAdminEvent</code> type that indicates that a new
+ * <code>Wire</code> object has been created.
+ *
+ * An event is broadcast when {@link WireAdmin#createWire} is called. The
+ * {@link WireAdminEvent#getWire} method will return the <code>Wire</code>
+ * object that has just been created.
+ *
+ * <p>
+ * The value of <code>WIRE_CREATED</code> is 0x00000004.
+ */
+ public final static int WIRE_CREATED = 0x00000004;
+ /**
+ * A <code>Wire</code> has been updated.
+ *
+ * <p>
+ * This <code>WireAdminEvent</code> type that indicates that an existing
+ * <code>Wire</code> object has been updated with new properties.
+ *
+ * An event is broadcast when {@link WireAdmin#updateWire} is called with a
+ * valid wire. The {@link WireAdminEvent#getWire} method will return the
+ * <code>Wire</code> object that has just been updated.
+ *
+ * <p>
+ * The value of <code>WIRE_UPDATED</code> is 0x00000008.
+ */
+ public final static int WIRE_UPDATED = 0x00000008;
+ /**
+ * A <code>Wire</code> has been deleted.
+ *
+ * <p>
+ * This <code>WireAdminEvent</code> type that indicates that an existing wire
+ * has been deleted.
+ *
+ * An event is broadcast when {@link WireAdmin#deleteWire} is called with a
+ * valid wire. {@link WireAdminEvent#getWire} will return the <code>Wire</code>
+ * object that has just been deleted.
+ *
+ * <p>
+ * The value of <code>WIRE_DELETED</code> is 0x00000010.
+ */
+ public final static int WIRE_DELETED = 0x00000010;
+ /**
+ * The <code>WireAdminEvent</code> type that indicates that an existing
+ * <code>Wire</code> object has become connected.
+ *
+ * The Consumer object and the Producer object that are associated with the
+ * <code>Wire</code> object have both been registered and the <code>Wire</code>
+ * object is connected. See {@link Wire#isConnected} for a description of
+ * the connected state. This event may come before the
+ * <code>producersConnected</code> and <code>consumersConnected</code> method
+ * have returned or called to allow synchronous delivery of the events. Both
+ * methods can cause other <code>WireAdminEvent</code> s to take place and
+ * requiring this event to be send before these methods are returned would
+ * mandate asynchronous delivery.
+ *
+ * <p>
+ * The value of <code>WIRE_CONNECTED</code> is 0x00000020.
+ */
+ public final static int WIRE_CONNECTED = 0x00000020;
+ /**
+ * The <code>WireAdminEvent</code> type that indicates that an existing
+ * <code>Wire</code> object has become disconnected.
+ *
+ * The Consumer object or/and Producer object is/are unregistered breaking
+ * the connection between the two. See {@link Wire#isConnected} for a
+ * description of the connected state.
+ *
+ * <p>
+ * The value of <code>WIRE_DISCONNECTED</code> is 0x00000040.
+ */
+ public final static int WIRE_DISCONNECTED = 0x00000040;
+ /**
+ * The <code>WireAdminEvent</code> type that indicates that a new value is
+ * transferred over the <code>Wire</code> object.
+ *
+ * This event is sent after the Consumer service has been notified by
+ * calling the {@link Consumer#updated} method or the Consumer service
+ * requested a new value with the {@link Wire#poll} method. This is an
+ * advisory event meaning that when this event is received, another update
+ * may already have occurred and this the {@link Wire#getLastValue} method
+ * returns a newer value then the value that was communicated for this
+ * event.
+ *
+ * <p>
+ * The value of <code>WIRE_TRACE</code> is 0x00000080.
+ */
+ public final static int WIRE_TRACE = 0x00000080;
+
+ /**
+ * Constructs a <code>WireAdminEvent</code> object from the given
+ * <code>ServiceReference</code> object, event type, <code>Wire</code> object
+ * and exception.
+ *
+ * @param reference The <code>ServiceReference</code> object of the Wire Admin
+ * service that created this event.
+ * @param type The event type. See {@link #getType}.
+ * @param wire The <code>Wire</code> object associated with this event.
+ * @param exception An exception associated with this event. This may be
+ * <code>null</code> if no exception is associated with this event.
+ */
+ public WireAdminEvent(ServiceReference reference, int type, Wire wire,
+ Throwable exception) {
+ this.reference = reference;
+ this.wire = wire;
+ this.type = type;
+ this.throwable = exception;
+ }
+
+ /**
+ * Return the <code>ServiceReference</code> object of the Wire Admin service
+ * that created this event.
+ *
+ * @return The <code>ServiceReference</code> object for the Wire Admin service
+ * that created this event.
+ */
+ public ServiceReference getServiceReference() {
+ return reference;
+ }
+
+ /**
+ * Return the <code>Wire</code> object associated with this event.
+ *
+ * @return The <code>Wire</code> object associated with this event or
+ * <code>null</code> when no <code>Wire</code> object is associated with
+ * the event.
+ */
+ public Wire getWire() {
+ return wire;
+ }
+
+ /**
+ * Return the type of this event.
+ * <p>
+ * The type values are:
+ * <ul>
+ * <li>{@link #WIRE_CREATED}
+ * <li>{@link #WIRE_CONNECTED}
+ * <li>{@link #WIRE_UPDATED}
+ * <li>{@link #WIRE_TRACE}
+ * <li>{@link #WIRE_DISCONNECTED}
+ * <li>{@link #WIRE_DELETED}
+ * <li>{@link #PRODUCER_EXCEPTION}
+ * <li>{@link #CONSUMER_EXCEPTION}
+ * </ul>
+ *
+ * @return The type of this event.
+ */
+ public int getType() {
+ return type;
+ }
+
+ /**
+ * Returns the exception associated with the event, if any.
+ *
+ * @return An exception or <code>null</code> if no exception is associated
+ * with this event.
+ */
+ public Throwable getThrowable() {
+ return throwable;
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java
new file mode 100644
index 0000000..e741dd9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * Listener for Wire Admin Events.
+ *
+ * <p>
+ * <code>WireAdminListener</code> objects are registered with the Framework
+ * service registry and are notified with a <code>WireAdminEvent</code> object
+ * when an event is broadcast.
+ * <p>
+ * <code>WireAdminListener</code> objects can inspect the received
+ * <code>WireAdminEvent</code> object to determine its type, the <code>Wire</code>
+ * object with which it is associated, and the Wire Admin service that
+ * broadcasts the event.
+ *
+ * <p>
+ * <code>WireAdminListener</code> objects must be registered with a service
+ * property {@link WireConstants#WIREADMIN_EVENTS} whose value is a bitwise OR
+ * of all the event types the listener is interested in receiving.
+ * <p>
+ * For example:
+ *
+ * <pre>
+ * Integer mask = new Integer(WIRE_TRACE | WIRE_CONNECTED | WIRE_DISCONNECTED);
+ * Hashtable ht = new Hashtable();
+ * ht.put(WIREADMIN_EVENTS, mask);
+ * context.registerService(WireAdminListener.class.getName(), this, ht);
+ * </pre>
+ *
+ * If a <code>WireAdminListener</code> object is registered without a service
+ * property {@link WireConstants#WIREADMIN_EVENTS}, then the
+ * <code>WireAdminListener</code> will receive no events.
+ *
+ * <p>
+ * Security Considerations. Bundles wishing to monitor <code>WireAdminEvent</code>
+ * objects will require <code>ServicePermission[WireAdminListener,REGISTER]</code>
+ * to register a <code>WireAdminListener</code> service. Since
+ * <code>WireAdminEvent</code> objects contain <code>Wire</code> objects, care must
+ * be taken in assigning permission to register a <code>WireAdminListener</code>
+ * service.
+ *
+ * @see WireAdminEvent
+ *
+ * @version $Revision: 5673 $
+ */
+public interface WireAdminListener {
+ /**
+ * Receives notification of a broadcast <code>WireAdminEvent</code> object.
+ *
+ * The event object will be of an event type specified in this
+ * <code>WireAdminListener</code> service's
+ * {@link WireConstants#WIREADMIN_EVENTS} service property.
+ *
+ * @param event The <code>WireAdminEvent</code> object.
+ */
+ void wireAdminEvent(WireAdminEvent event);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java
new file mode 100644
index 0000000..b616a4f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+/**
+ * Defines standard names for <code>Wire</code> properties, wire filter
+ * attributes, Consumer and Producer service properties.
+ *
+ * @version $Revision: 5673 $
+ */
+public interface WireConstants {
+ /**
+ * <code>Wire</code> property key (named <code>wireadmin.pid</code>) specifying
+ * the persistent identity (PID) of this <code>Wire</code> object.
+ *
+ * <p>
+ * Each <code>Wire</code> object has a PID to allow unique and persistent
+ * identification of a specific <code>Wire</code> object. The PID must be
+ * generated by the {@link WireAdmin} service when the <code>Wire</code>
+ * object is created.
+ *
+ * <p>
+ * This wire property is automatically set by the Wire Admin service. The
+ * value of the property must be of type <code>String</code>.
+ */
+ public final static String WIREADMIN_PID = "wireadmin.pid";
+ /**
+ * A service registration property for a Producer service that is composite.
+ * It contains the names of the composite Consumer services it can
+ * inter-operate with. Inter-operability exists when any name in this array
+ * matches any name in the array set by the Consumer service. The type of
+ * this property must be <code>String[]</code>.
+ */
+ public final static String WIREADMIN_PRODUCER_COMPOSITE = "wireadmin.producer.composite";
+ /**
+ * A service registration property for a Consumer service that is composite.
+ * It contains the names of the composite Producer services it can cooperate
+ * with. Inter-operability exists when any name in this array matches any
+ * name in the array set by the Producer service. The type of this property
+ * must be <code>String[]</code>.
+ */
+ public final static String WIREADMIN_CONSUMER_COMPOSITE = "wireadmin.consumer.composite";
+ /**
+ * Service registration property key (named
+ * <code>wireadmin.producer.scope</code>) specifying a list of names that may
+ * be used to define the scope of this <code>Wire</code> object. A Producer
+ * service should set this service property when it can produce more than
+ * one kind of value. This property is only used during registration,
+ * modifying the property must not have any effect of the <code>Wire</code>
+ * object's scope. Each name in the given list mist have
+ * <code>WirePermission[name,PRODUCE]</code> or else is ignored. The type of
+ * this service registration property must be <code>String[]</code>.
+ *
+ * @see Wire#getScope
+ * @see #WIREADMIN_CONSUMER_SCOPE
+ */
+ public final static String WIREADMIN_PRODUCER_SCOPE = "wireadmin.producer.scope";
+ /**
+ * Service registration property key (named
+ * <code>wireadmin.consumer.scope</code>) specifying a list of names that may
+ * be used to define the scope of this <code>Wire</code> object. A
+ * <code>Consumer</code> service should set this service property when it can
+ * produce more than one kind of value. This property is only used during
+ * registration, modifying the property must not have any effect of the
+ * <code>Wire</code> object's scope. Each name in the given list mist have
+ * <code>WirePermission[name,CONSUME]</code> or else is ignored. The type of this
+ * service registration property must be <code>String[]</code>.
+ *
+ * @see Wire#getScope
+ * @see #WIREADMIN_PRODUCER_SCOPE
+ */
+ public final static String WIREADMIN_CONSUMER_SCOPE = "wireadmin.consumer.scope";
+ /**
+ * Matches all scope names.
+ */
+ public final static String WIREADMIN_SCOPE_ALL[] = {"*"};
+ /**
+ * <code>Wire</code> property key (named <code>wireadmin.producer.pid</code>)
+ * specifying the <code>service.pid</code> of the associated Producer service.
+ *
+ * <p>
+ * This wire property is automatically set by the WireAdmin service. The
+ * value of the property must be of type <code>String</code>.
+ */
+ public final static String WIREADMIN_PRODUCER_PID = "wireadmin.producer.pid";
+ /**
+ * <code>Wire</code> property key (named <code>wireadmin.consumer.pid</code>)
+ * specifying the <code>service.pid</code> of the associated Consumer service.
+ *
+ * <p>
+ * This wire property is automatically set by the Wire Admin service. The
+ * value of the property must be of type <code>String</code>.
+ */
+ public final static String WIREADMIN_CONSUMER_PID = "wireadmin.consumer.pid";
+ /**
+ * <code>Wire</code> property key (named <code>wireadmin.filter</code>)
+ * specifying a filter used to control the delivery rate of data between the
+ * Producer and the Consumer service.
+ *
+ * <p>
+ * This property should contain a filter as described in the <code>Filter</code>
+ * class. The filter can be used to specify when an updated value from the
+ * Producer service should be delivered to the Consumer service. In many
+ * cases the Consumer service does not need to receive the data with the
+ * same rate that the Producer service can generate data. This property can
+ * be used to control the delivery rate.
+ * <p>
+ * The filter can use a number of pre-defined attributes that can be used to
+ * control the delivery of new data values. If the filter produces a match
+ * upon the wire filter attributes, the Consumer service should be notifed
+ * of the updated data value.
+ * <p>
+ * If the Producer service was registered with the
+ * {@link #WIREADMIN_PRODUCER_FILTERS} service property indicating that the
+ * Producer service will perform the data filtering then the <code>Wire</code>
+ * object will not perform data filtering. Otherwise, the <code>Wire</code>
+ * object must perform basic filtering. Basic filtering includes supporting
+ * the following standard wire filter attributes:
+ * <ul>
+ * <li>{@link #WIREVALUE_CURRENT}- Current value
+ * <li>{@link #WIREVALUE_PREVIOUS}- Previous value
+ * <li>{@link #WIREVALUE_DELTA_ABSOLUTE}- Absolute delta
+ * <li>{@link #WIREVALUE_DELTA_RELATIVE}- Relative delta
+ * <li>{@link #WIREVALUE_ELAPSED}- Elapsed time
+ * </ul>
+ *
+ * @see org.osgi.framework.Filter
+ */
+ public final static String WIREADMIN_FILTER = "wireadmin.filter";
+ /* Wire filter attribute names. */
+ /**
+ * <code>Wire</code> object's filter attribute (named
+ * <code>wirevalue.current</code>) representing the current value.
+ */
+ public final static String WIREVALUE_CURRENT = "wirevalue.current";
+ /**
+ * <code>Wire</code> object's filter attribute (named
+ * <code>wirevalue.previous</code>) representing the previous value.
+ */
+ public final static String WIREVALUE_PREVIOUS = "wirevalue.previous";
+ /**
+ * <code>Wire</code> object's filter attribute (named
+ * <code>wirevalue.delta.absolute</code>) representing the absolute delta.
+ * The absolute (always positive) difference between the last update and the
+ * current value (only when numeric). This attribute must not be used when
+ * the values are not numeric.
+ */
+ public final static String WIREVALUE_DELTA_ABSOLUTE = "wirevalue.delta.absolute";
+ /**
+ * <code>Wire</code> object's filter attribute (named
+ * <code>wirevalue.delta.relative</code>) representing the relative delta.
+ * The relative difference is |<code>previous</code>-<code>current</code> |/|
+ * <code>current</code>| (only when numeric). This attribute must not be used
+ * when the values are not numeric.
+ */
+ public final static String WIREVALUE_DELTA_RELATIVE = "wirevalue.delta.relative";
+ /**
+ * <code>Wire</code> object's filter attribute (named
+ * <code>wirevalue.elapsed</code>) representing the elapsed time, in ms,
+ * between this filter evaluation and the last update of the
+ * <code>Consumer</code> service.
+ */
+ public final static String WIREVALUE_ELAPSED = "wirevalue.elapsed";
+ /* Service registration property key names. */
+ /**
+ * Service Registration property (named <code>wireadmin.producer.filters</code>).
+ * A <code>Producer</code> service registered with this property indicates to
+ * the Wire Admin service that the Producer service implements at least the
+ * filtering as described for the {@link #WIREADMIN_FILTER} property. If the
+ * Producer service is not registered with this property, the <code>Wire</code>
+ * object must perform the basic filtering as described in
+ * {@link #WIREADMIN_FILTER}.
+ *
+ * <p>
+ * The type of the property value is not relevant. Only its presence is
+ * relevant.
+ */
+ public final static String WIREADMIN_PRODUCER_FILTERS = "wireadmin.producer.filters";
+ /**
+ * Service Registration property (named <code>wireadmin.consumer.flavors</code>)
+ * specifying the list of data types understood by this Consumer service.
+ *
+ * <p>
+ * The Consumer service object must be registered with this service
+ * property. The list must be in the order of preference with the first type
+ * being the most preferred. The value of the property must be of type
+ * <code>Class[]</code>.
+ */
+ public final static String WIREADMIN_CONSUMER_FLAVORS = "wireadmin.consumer.flavors";
+ /**
+ * Service Registration property (named <code>wireadmin.producer.flavors</code>)
+ * specifying the list of data types available from this Producer service.
+ *
+ * <p>
+ * The Producer service object should be registered with this service
+ * property.
+ *
+ * <p>
+ * The value of the property must be of type <code>Class[]</code>.
+ */
+ public final static String WIREADMIN_PRODUCER_FLAVORS = "wireadmin.producer.flavors";
+ /**
+ * Service Registration property (named <code>wireadmin.events</code>)
+ * specifying the <code>WireAdminEvent</code> type of interest to a Wire Admin
+ * Listener service. The value of the property is a bitwise OR of all the
+ * <code>WireAdminEvent</code> types the Wire Admin Listener service wishes to
+ * receive and must be of type <code>Integer</code>.
+ *
+ * @see WireAdminEvent
+ */
+ public final static String WIREADMIN_EVENTS = "wireadmin.events";
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java
new file mode 100644
index 0000000..6073466
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java
@@ -0,0 +1,485 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2009). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.wireadmin;
+
+import java.io.IOException;
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ * Permission for the scope of a <code>Wire</code> object. When a
+ * <code>Envelope</code> object is used for communication with the
+ * <code>poll</code> or <code>update</code> method, and the scope is set, then
+ * the <code>Wire</code> object must verify that the Consumer service has
+ * <code>WirePermission[name,CONSUME]</code> and the Producer service has
+ * <code>WirePermission[name,PRODUCE]</code> for all names in the scope.
+ * <p>
+ * The names are compared with the normal rules for permission names. This means
+ * that they may end with a "*" to indicate wildcards. E.g. Door.* indicates all
+ * scope names starting with the string "Door". The last period is required due
+ * to the implementations of the <code>BasicPermission</code> class.
+ *
+ * @ThreadSafe
+ * @version $Revision: 6381 $
+ */
+final public class WirePermission extends BasicPermission {
+ static final long serialVersionUID = -5583709391516569321L;
+ /**
+ * The action string for the <code>produce</code> action.
+ */
+ public static final String PRODUCE = "produce";
+ /**
+ * The action string for the <code>consume</code> action.
+ */
+ public static final String CONSUME = "consume";
+ private final static int ACTION_PRODUCE = 0x00000001;
+ private final static int ACTION_CONSUME = 0x00000002;
+ private final static int ACTION_ALL = ACTION_PRODUCE
+ | ACTION_CONSUME;
+ private final static int ACTION_NONE = 0;
+ /**
+ * The actions mask.
+ */
+ private transient int action_mask;
+ /**
+ * The actions in canonical form.
+ *
+ * @serial
+ */
+ private volatile String actions = null;
+
+ /**
+ * Create a new WirePermission with the given name (may be wildcard) and
+ * actions.
+ *
+ * @param name Wire name.
+ * @param actions <code>produce</code>, <code>consume</code> (canonical
+ * order).
+ */
+ public WirePermission(String name, String actions) {
+ this(name, parseActions(actions));
+ }
+
+ /**
+ * Package private constructor used by WirePermissionCollection.
+ *
+ * @param name class name
+ * @param mask action mask
+ */
+ WirePermission(String name, int mask) {
+ super(name);
+ setTransients(mask);
+ }
+
+ /**
+ * Called by constructors and when deserialized.
+ *
+ * @param mask action mask
+ */
+ private synchronized void setTransients(int mask) {
+ if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+ throw new IllegalArgumentException("invalid action string");
+ }
+ action_mask = mask;
+ }
+
+ /**
+ * Returns the current action mask. Used by the WirePermissionCollection
+ * object.
+ *
+ * @return The actions mask.
+ */
+ synchronized int getActionsMask() {
+ return action_mask;
+ }
+
+ /**
+ * Parse action string into action mask.
+ *
+ * @param actions Action string.
+ * @return action mask.
+ */
+ private static int parseActions(String actions) {
+ boolean seencomma = false;
+ int mask = ACTION_NONE;
+ if (actions == null) {
+ return mask;
+ }
+ char[] a = actions.toCharArray();
+ int i = a.length - 1;
+ if (i < 0)
+ return mask;
+ while (i != -1) {
+ char c;
+ // skip whitespace
+ while ((i != -1)
+ && ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+ || c == '\f' || c == '\t'))
+ i--;
+ // check for the known strings
+ int matchlen;
+ if (i >= 6 && (a[i - 6] == 'p' || a[i - 6] == 'P')
+ && (a[i - 5] == 'r' || a[i - 5] == 'R')
+ && (a[i - 4] == 'o' || a[i - 4] == 'O')
+ && (a[i - 3] == 'd' || a[i - 3] == 'D')
+ && (a[i - 2] == 'u' || a[i - 2] == 'U')
+ && (a[i - 1] == 'c' || a[i - 1] == 'C')
+ && (a[i] == 'e' || a[i] == 'E')) {
+ matchlen = 7;
+ mask |= ACTION_PRODUCE;
+ }
+ else
+ if (i >= 6 && (a[i - 6] == 'c' || a[i - 6] == 'C')
+ && (a[i - 5] == 'o' || a[i - 5] == 'O')
+ && (a[i - 4] == 'n' || a[i - 4] == 'N')
+ && (a[i - 3] == 's' || a[i - 3] == 'S')
+ && (a[i - 2] == 'u' || a[i - 2] == 'U')
+ && (a[i - 1] == 'm' || a[i - 1] == 'M')
+ && (a[i] == 'e' || a[i] == 'E')) {
+ matchlen = 7;
+ mask |= ACTION_CONSUME;
+ }
+ else {
+ // parse error
+ throw new IllegalArgumentException("invalid permission: "
+ + actions);
+ }
+ // make sure we didn't just match the tail of a word
+ // like "ackbarfregister". Also, skip to the comma.
+ seencomma = false;
+ while (i >= matchlen && !seencomma) {
+ switch (a[i - matchlen]) {
+ case ',' :
+ seencomma = true;
+ /* FALLTHROUGH */
+ case ' ' :
+ case '\r' :
+ case '\n' :
+ case '\f' :
+ case '\t' :
+ break;
+ default :
+ throw new IllegalArgumentException(
+ "invalid permission: " + actions);
+ }
+ i--;
+ }
+ // point i at the location of the comma minus one (or -1).
+ i -= matchlen;
+ }
+ if (seencomma) {
+ throw new IllegalArgumentException("invalid permission: " + actions);
+ }
+ return mask;
+ }
+
+ /**
+ * Checks if this <code>WirePermission</code> object <code>implies</code>
+ * the specified permission.
+ * <P>
+ * More specifically, this method returns <code>true</code> if:
+ * <p>
+ * <ul>
+ * <li><i>p </i> is an instanceof the <code>WirePermission</code> class,
+ * <li><i>p </i>'s actions are a proper subset of this object's actions, and
+ * <li><i>p </i>'s name is implied by this object's name. For example,
+ * <code>java.*</code> implies <code>java.home</code>.
+ * </ul>
+ *
+ * @param p The permission to check against.
+ *
+ * @return <code>true</code> if the specified permission is implied by this
+ * object; <code>false</code> otherwise.
+ */
+ public boolean implies(Permission p) {
+ if (p instanceof WirePermission) {
+ WirePermission requested = (WirePermission) p;
+ int requestedMask = requested.getActionsMask();
+ return ((getActionsMask() & requestedMask) == requestedMask)
+ && super.implies(p);
+ }
+ return false;
+ }
+
+ /**
+ * Returns the canonical string representation of the actions. Always
+ * returns present actions in the following order: <code>produce</code>,
+ * <code>consume</code>.
+ *
+ * @return The canonical string representation of the actions.
+ */
+ public String getActions() {
+ String result = actions;
+ if (result == null) {
+ StringBuffer sb = new StringBuffer();
+ boolean comma = false;
+ int mask = getActionsMask();
+ if ((mask & ACTION_PRODUCE) == ACTION_PRODUCE) {
+ sb.append(PRODUCE);
+ comma = true;
+ }
+ if ((mask & ACTION_CONSUME) == ACTION_CONSUME) {
+ if (comma)
+ sb.append(',');
+ sb.append(CONSUME);
+ }
+ actions = result = sb.toString();
+ }
+ return result;
+ }
+
+ /**
+ * Returns a new <code>PermissionCollection</code> object for storing
+ * <code>WirePermission</code> objects.
+ *
+ * @return A new <code>PermissionCollection</code> object suitable for
+ * storing <code>WirePermission</code> objects.
+ */
+ public PermissionCollection newPermissionCollection() {
+ return new WirePermissionCollection();
+ }
+
+ /**
+ * Determines the equalty of two <code>WirePermission</code> objects.
+ *
+ * Checks that specified object has the same name and actions as this
+ * <code>WirePermission</code> object.
+ *
+ * @param obj The object to test for equality.
+ * @return true if <code>obj</code> is a <code>WirePermission</code>, and
+ * has the same name and actions as this <code>WirePermission</code>
+ * object; <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof WirePermission)) {
+ return false;
+ }
+ WirePermission wp = (WirePermission) obj;
+ return (getActionsMask() == wp.getActionsMask())
+ && getName().equals(wp.getName());
+ }
+
+ /**
+ * Returns the hash code value for this object.
+ *
+ * @return Hash code value for this object.
+ */
+ public int hashCode() {
+ int h = 31 * 17 + getName().hashCode();
+ h = 31 * h + getActions().hashCode();
+ return h;
+ }
+
+ /**
+ * Returns a string describing this <code>WirePermission</code>. The
+ * convention is to specify the class name, the permission name, and the
+ * actions in the following format:
+ * '(org.osgi.service.wireadmin.WirePermission "name"
+ * "actions")'.
+ *
+ * @return information about this <code>Permission</code> object.
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append('(');
+ sb.append(getClass().getName());
+ sb.append(" \"");
+ sb.append(getName());
+ String a = getActions();
+ if (a.length() > 0) {
+ sb.append("\" \"");
+ sb.append(a);
+ }
+ sb.append("\")");
+ return sb.toString();
+ }
+
+ /**
+ * WriteObject is called to save the state of the ServicePermission to a
+ * stream. The actions are serialized, and the superclass takes care of the
+ * name.
+ */
+ private synchronized void writeObject(java.io.ObjectOutputStream s)
+ throws IOException {
+ // Write out the actions. The superclass takes care of the name
+ // call getActions to make sure actions field is initialized
+ if (actions == null)
+ getActions();
+ s.defaultWriteObject();
+ }
+
+ /**
+ * readObject is called to restore the state of the ServicePermission from a
+ * stream.
+ */
+ private synchronized void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ // Read in the action, then initialize the rest
+ s.defaultReadObject();
+ setTransients(parseActions(actions));
+ }
+}
+
+/**
+ * A <code>WirePermissionCollection</code> stores a set of
+ * <code>WirePermission</code> permissions.
+ */
+
+final class WirePermissionCollection extends PermissionCollection {
+ static final long serialVersionUID = 2617521094909826016L;
+ /**
+ * Table of permissions.
+ *
+ * @GuardedBy this
+ * @serial
+ */
+ private final Hashtable permissions;
+ /**
+ * Boolean saying if "*" is in the collection.
+ *
+ * @GuardedBy this
+ * @serial
+ */
+ private boolean all_allowed;
+
+ /**
+ * Creates an empty WirePermissionCollection object.
+ *
+ */
+ public WirePermissionCollection() {
+ permissions = new Hashtable();
+ all_allowed = false;
+ }
+
+ /**
+ * Adds a permission to this PermissionCollection.
+ *
+ * @param permission The Permission object to add.
+ *
+ * @throws IllegalArgumentException If the permission is not a
+ * WirePermission object.
+ *
+ * @throws SecurityException If this PermissionCollection has been marked
+ * read-only.
+ */
+ public void add(Permission permission) {
+ if (!(permission instanceof WirePermission)) {
+ throw new IllegalArgumentException("invalid permission: "
+ + permission);
+ }
+ if (isReadOnly()) {
+ throw new SecurityException("attempt to add a Permission to a "
+ + "readonly PermissionCollection");
+ }
+ WirePermission wp = (WirePermission) permission;
+ String name = wp.getName();
+ synchronized (this) {
+ WirePermission existing = (WirePermission) permissions.get(name);
+ if (existing != null) {
+ int oldMask = existing.getActionsMask();
+ int newMask = wp.getActionsMask();
+ if (oldMask != newMask) {
+ permissions.put(name, new WirePermission(name, oldMask
+ | newMask));
+ }
+ }
+ else {
+ permissions.put(name, wp);
+ }
+ if (!all_allowed) {
+ if (name.equals("*")) {
+ all_allowed = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * Determines if a set of permissions implies the permissions expressed in
+ * <code>permission</code>.
+ *
+ * @param permission The Permission object to compare.
+ *
+ * @return <code>true</code> if <code>permission</code> is a proper subset
+ * of a permission in the set; <code>false</code> otherwise.
+ */
+ public boolean implies(Permission permission) {
+ if (!(permission instanceof WirePermission)) {
+ return false;
+ }
+ WirePermission requested = (WirePermission) permission;
+ WirePermission x;
+ int desired = requested.getActionsMask();
+ int effective = 0;
+ String name = requested.getName();
+ synchronized (this) {
+ // short circuit if the "*" Permission was added
+ if (all_allowed) {
+ x = (WirePermission) permissions.get("*");
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired)
+ return true;
+ }
+ }
+ // strategy:
+ // Check for full match first. Then work our way up the
+ // name looking for matches on a.b.*
+ x = (WirePermission) permissions.get(name);
+ }
+ if (x != null) {
+ // we have a direct hit!
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return true;
+ }
+ }
+ // work our way up the tree...
+ int last;
+ int offset = name.length() - 1;
+ while ((last = name.lastIndexOf(".", offset)) != -1) {
+ name = name.substring(0, last + 1) + "*";
+ synchronized (this) {
+ x = (WirePermission) permissions.get(name);
+ }
+ if (x != null) {
+ effective |= x.getActionsMask();
+ if ((effective & desired) == desired) {
+ return (true);
+ }
+ }
+ offset = last - 1;
+ }
+ // we don't have to check for "*" as it was already checked
+ // at the top (all_allowed), so we just return false
+ return false;
+ }
+
+ /**
+ * Returns an enumeration of all the Permission objects in the container.
+ *
+ * @return Enumeration of all the Permission objects.
+ */
+ public Enumeration elements() {
+ return permissions.elements();
+ }
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html
new file mode 100644
index 0000000..36d1d82
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Wire Admin Package Version 1.0.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.wireadmin; version="[1.0,2.0)"
+</pre>
+</BODY>
+
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo
new file mode 100644
index 0000000..7c8de03
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo
@@ -0,0 +1 @@
+version 1.0
diff --git a/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
index eab6b11..68e239d 100644
--- a/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
@@ -68,7 +68,7 @@ Bundle-Activator: org.eclipse.osgi.framework.internal.core.SystemBundleActivator
Bundle-Description: %systemBundle
Bundle-Copyright: %copyright
Bundle-Vendor: %eclipse.org
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Localization: systembundle
Bundle-DocUrl: http://www.eclipse.org
Eclipse-ExtensibleAPI: true
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
index 5f2028e..c487509 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
// try to set the socket re-use property, it isn't a problem if it can't be set
}
Thread t = new Thread(this, "ConsoleSocketGetter"); //$NON-NLS-1$
- t.setDaemon(true);
+ t.setDaemon(false);
t.start();
}
@@ -159,7 +159,11 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
*/
public void stopConsole() {
if (builtinSession != null)
- builtinSession.unregister();
+ try {
+ builtinSession.unregister();
+ } catch (IllegalStateException e) {
+ // ignore; this can happen if the session was closed manually (bug 314343)
+ }
sessions.close();
cpTracker.close();
if (scsg != null)
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
index 8ebe629..1761141 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
@@ -29,7 +29,7 @@ public abstract class MultiplexingFactory {
private ServiceTracker packageAdminTracker;
// used to get access to the protected SecurityManager#getClassContext method
- private static class InternalSecurityManager extends SecurityManager {
+ static class InternalSecurityManager extends SecurityManager {
public Class[] getClassContext() {
return super.getClassContext();
}
@@ -48,14 +48,11 @@ public abstract class MultiplexingFactory {
abstract public Object getParentFactory();
- public synchronized boolean isMultiplexing() {
- return factories != null;
+ public boolean isMultiplexing() {
+ return getFactories() != null;
}
- public synchronized void register(Object factory) {
- if (factories == null)
- factories = new LinkedList();
-
+ public void register(Object factory) {
// set parent for each factory so they can do proper delegation
try {
Class clazz = factory.getClass();
@@ -65,13 +62,11 @@ public abstract class MultiplexingFactory {
adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "register", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
throw new RuntimeException(e.getMessage(), e);
}
- factories.add(factory);
+ addFactory(factory);
}
- public synchronized void unregister(Object factory) {
- factories.remove(factory);
- if (factories.isEmpty())
- factories = null;
+ public void unregister(Object factory) {
+ removeFactory(factory);
// close the service tracker
try {
// this is brittle; if class does not directly extend MultplexingFactory then this method will not exist, but we do not want a public method here
@@ -84,23 +79,29 @@ public abstract class MultiplexingFactory {
}
}
- public synchronized Object designateSuccessor() {
- Object parentFactory = getParentFactory();
- if (factories == null || factories.isEmpty())
- return parentFactory;
-
- Object successor = factories.remove(0);
+ public Object designateSuccessor() {
+ List released = releaseFactories();
+ // Note that we do this outside of the sync block above.
+ // This is only possible because we do additional locking outside of
+ // this class to ensure no other threads are trying to manipulate the
+ // list of registered factories. See Framework class the following methods:
+ // Framework.installURLStreamHandlerFactory(BundleContext, FrameworkAdaptor)
+ // Framework.installContentHandlerFactory(BundleContext, FrameworkAdaptor)
+ // Framework.uninstallURLStreamHandlerFactory
+ // Framework.uninstallContentHandlerFactory()
+ if (released == null || released.isEmpty())
+ return getParentFactory();
+ Object successor = released.remove(0);
try {
Class clazz = successor.getClass();
Method register = clazz.getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$
- for (Iterator it = factories.iterator(); it.hasNext();) {
+ for (Iterator it = released.iterator(); it.hasNext();) {
register.invoke(successor, new Object[] {it.next()});
}
} catch (Exception e) {
adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "designateSuccessor", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
throw new RuntimeException(e.getMessage(), e);
}
- factories = null;
closePackageAdminTracker(); // close tracker
return successor;
}
@@ -109,7 +110,8 @@ public abstract class MultiplexingFactory {
packageAdminTracker.close();
}
- public synchronized Object findAuthorizedFactory(List ignoredClasses) {
+ public Object findAuthorizedFactory(List ignoredClasses) {
+ List current = getFactories();
Class[] classStack = internalSecurityManager.getClassContext();
for (int i = 0; i < classStack.length; i++) {
Class clazz = classStack[i];
@@ -117,9 +119,9 @@ public abstract class MultiplexingFactory {
continue;
if (hasAuthority(clazz))
return this;
- if (factories == null)
+ if (current == null)
continue;
- for (Iterator it = factories.iterator(); it.hasNext();) {
+ for (Iterator it = current.iterator(); it.hasNext();) {
Object factory = it.next();
try {
Method hasAuthorityMethod = factory.getClass().getMethod("hasAuthority", new Class[] {Class.class}); //$NON-NLS-1$
@@ -142,4 +144,29 @@ public abstract class MultiplexingFactory {
}
return false;
}
+
+ private synchronized List getFactories() {
+ return factories;
+ }
+
+ private synchronized List releaseFactories() {
+ if (factories == null)
+ return null;
+
+ List released = new LinkedList(factories);
+ factories = null;
+ return released;
+ }
+
+ private synchronized void addFactory(Object factory) {
+ List updated = (factories == null) ? new LinkedList() : new LinkedList(factories);
+ updated.add(factory);
+ factories = updated;
+ }
+
+ private synchronized void removeFactory(Object factory) {
+ List updated = new LinkedList(factories);
+ updated.remove(factory);
+ factories = updated.isEmpty() ? null : updated;
+ }
}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
index 82263d1..5d197d5 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
@@ -340,7 +340,15 @@ public class BaseStorage implements SynchronousBundleListener {
}
public BaseData[] getInstalledBundles() {
- return readBundleDatas();
+ try {
+ return readBundleDatas();
+ } catch (Throwable t) {
+ // be safe here and throw out the results and start over
+ // otherwise this would result in a failed launch
+ FrameworkLogEntry logEntry = new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, "Error loading bundle datas. Recalculating cache.", 0, t, null); //$NON-NLS-1$
+ adaptor.getFrameworkLog().log(logEntry);
+ return null;
+ }
}
private BaseData[] readBundleDatas() {
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
index 9a295c6..e4ee07b 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -559,9 +559,9 @@ class RequiresHolder {
for (int i = 0; i < fragments.length; i++) {
BundleSpecification[] fragmentRequiredBundles = fragments[i].getRequiredBundles();
for (int j = 0; j < fragmentRequiredBundles.length; j++) {
- if (resolved.contains(fragmentRequiredBundles[i].getSupplier())) {
- resolvedBundlesExported.put(fragmentRequiredBundles[i].getSupplier(), new Boolean(fragmentRequiredBundles[i].isExported()));
- resolved.remove(fragmentRequiredBundles[i].getSupplier());
+ if (resolved.contains(fragmentRequiredBundles[j].getSupplier())) {
+ resolvedBundlesExported.put(fragmentRequiredBundles[j].getSupplier(), new Boolean(fragmentRequiredBundles[j].isExported()));
+ resolved.remove(fragmentRequiredBundles[j].getSupplier());
}
}
if (resolved.size() == 0) {
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
index 08716f5..d77af7b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde.api.tools.ui; singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.201.qualifier
Bundle-Localization: plugin
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseTabGroup.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseTabGroup.java
index f17853a..8eae9a9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseTabGroup.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseTabGroup.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,11 +11,14 @@
package org.eclipse.pde.api.tools.ui.internal.use;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
+import org.eclipse.debug.ui.CommonTab;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
/**
+ * The tab group for API use scanning
*
+ * @since 1.0
*/
public class ApiUseTabGroup extends AbstractLaunchConfigurationTabGroup {
@@ -25,7 +28,9 @@ public class ApiUseTabGroup extends AbstractLaunchConfigurationTabGroup {
public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
setTabs(new ILaunchConfigurationTab[]{
new ApiUseScanTab(),
- new ApiUsePatternTab()});
+ new ApiUsePatternTab(),
+ new CommonTab()
+ });
}
}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ReportPatternPage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ReportPatternPage.java
index 299212d..fc7b7e1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ReportPatternPage.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ReportPatternPage.java
@@ -85,6 +85,7 @@ public class ReportPatternPage extends UsePatternPage {
}
else {
this.to.setSelection(true);
+ this.kind = Pattern.REPORT_TO;
}
SWTFactory.createLabel(comp, Messages.ReportPatternPage_pattern, 1);
this.patterntext = SWTFactory.createSingleText(comp, 1);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
index 9577157..29484e4 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde.api.tools;singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.202.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.osgi;bundle-version="[3.4.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
index f7230bf..fb1eedf 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
@@ -133,7 +133,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
private IPath savelocation = null;
/**
- * If the cache of profiles needs to be saved or not.
+ * If the cache of baselines needs to be saved or not.
*/
private boolean fNeedsSaving = false;
@@ -199,9 +199,9 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
public synchronized boolean removeApiBaseline(String name) {
if(name != null) {
initializeStateCache();
- IApiBaseline profile = (IApiBaseline) baselinecache.remove(name);
- if(profile != null) {
- profile.dispose();
+ IApiBaseline baseline = (IApiBaseline) baselinecache.remove(name);
+ if(baseline != null) {
+ baseline.dispose();
boolean success = true;
if(savelocation == null) {
return success;
@@ -214,7 +214,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
fNeedsSaving = true;
//flush the model cache
- ApiModelCache.getCache().removeElementInfo(profile);
+ ApiModelCache.getCache().removeElementInfo(baseline);
return success;
}
}
@@ -223,8 +223,8 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
/**
* Loads the infos for the given baseline from persisted storage (the *.profile file)
- * @param baseline
- * @throws CoreException
+ * @param baseline the given baseline
+ * @throws CoreException if an exception occurs while loading baseline infos
*/
public void loadBaselineInfos(IApiBaseline baseline) throws CoreException {
initializeStateCache();
@@ -256,7 +256,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
}
/**
- * Initializes the profile cache lazily. Only performs work
+ * Initializes the baseline cache lazily. Only performs work
* if the current cache has not been created yet
* @throws FactoryConfigurationError
* @throws ParserConfigurationException
@@ -305,7 +305,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
/**
* Persists all of the cached elements to individual xml files named
- * with the id of the API profile
+ * with the id of the API baseline
* @throws IOException
*/
private void persistStateCache() throws CoreException, IOException {
@@ -341,6 +341,8 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
try {
fout = new FileOutputStream(file);
writeBaselineDescription(baseline, fout);
+ // need to save the api baseline state in order to be able to reload it later
+ handlecache.put(baseline.getName(), file.getAbsolutePath());
fout.flush();
}
finally {
@@ -368,24 +370,24 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
}
/**
- * Returns an XML description of the given profile.
+ * Returns an XML description of the given baseline.
*
- * @param profile API profile
- * @return XML
- * @throws CoreException
+ * @param baseline the given API baseline
+ * @return XML string representation of the given baseline
+ * @throws CoreException if an exception occurs while retrieving the xml string representation
*/
- private String getProfileXML(IApiBaseline profile) throws CoreException {
+ private String getProfileXML(IApiBaseline baseline) throws CoreException {
Document document = Util.newDocument();
Element root = document.createElement(IApiXmlConstants.ELEMENT_APIPROFILE);
document.appendChild(root);
- root.setAttribute(IApiXmlConstants.ATTR_NAME, profile.getName());
+ root.setAttribute(IApiXmlConstants.ATTR_NAME, baseline.getName());
root.setAttribute(IApiXmlConstants.ATTR_VERSION, IApiXmlConstants.API_PROFILE_CURRENT_VERSION);
- String location = profile.getLocation();
+ String location = baseline.getLocation();
if (location != null) {
root.setAttribute(IApiXmlConstants.ATTR_LOCATION, location);
}
Element celement = null;
- IApiComponent[] components = profile.getApiComponents();
+ IApiComponent[] components = baseline.getApiComponents();
for(int i = 0, max = components.length; i < max; i++) {
IApiComponent comp = components[i];
if (!comp.isSystemComponent()) {
@@ -412,11 +414,11 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
}
/**
- * Constructs and returns a profile from the given input stream (persisted profile).
+ * Restore a baseline from the given input stream (persisted baseline).
*
- * @param stream input stream
- * @return API profile
- * @throws CoreException if unable to restore the profile
+ * @param baseline the given baseline to restore
+ * @param stream the given input stream
+ * @throws CoreException if unable to restore the baseline
*/
private void restoreBaseline(IApiBaseline baseline, InputStream stream) throws CoreException {
long start = System.currentTimeMillis();
@@ -492,10 +494,10 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
}
}
if (baseline == null) {
- abort("Invalid profile description", null); //$NON-NLS-1$
+ abort("Invalid baseline description", null); //$NON-NLS-1$
}
if(DEBUG) {
- System.out.println("Time to restore a persisted profile : " + (System.currentTimeMillis() - start) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+ System.out.println("Time to restore a persisted baseline : " + (System.currentTimeMillis() - start) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
@@ -533,9 +535,9 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
}
/**
- * Returns if the given name is an existing profile name
+ * Returns if the given name is an existing baseline name
* @param name
- * @return true if the given name is an existing profile name, false otherwise
+ * @return true if the given name is an existing baseline name, false otherwise
*/
public boolean isExistingProfileName(String name) {
if(baselinecache == null) {
@@ -550,10 +552,10 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
public void stop() {
try {
if(baselinecache != null) {
- // we should first dispose all existing profiles
+ // we should first dispose all existing baselines
for (Iterator iterator = this.baselinecache.values().iterator(); iterator.hasNext();) {
- IApiBaseline profile = (IApiBaseline) iterator.next();
- profile.dispose();
+ IApiBaseline baseline = (IApiBaseline) iterator.next();
+ baseline.dispose();
}
this.baselinecache.clear();
}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
index 1fa4195..78b78c2 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
@@ -1304,32 +1304,30 @@ public class ReferenceExtractor extends ClassAdapter {
Reference.methodReference(method, superTypeName, method.getName(), method.getSignature(), IReference.REF_OVERRIDE));
}
}
- if(!"<clinit>".equals(name)) { //$NON-NLS-1$
- int argumentcount = 0;
- if((access & Opcodes.ACC_SYNTHETIC) == 0) {
- if(signature != null) {
- this.processSignature(name, signature, IReference.REF_PARAMETERIZED_METHODDECL, METHOD);
- argumentcount = this.signaturevisitor.argumentcount;
+ int argumentcount = 0;
+ if((access & Opcodes.ACC_SYNTHETIC) == 0) {
+ if(signature != null) {
+ this.processSignature(name, signature, IReference.REF_PARAMETERIZED_METHODDECL, METHOD);
+ argumentcount = this.signaturevisitor.argumentcount;
+ }
+ else {
+ Type[] arguments = Type.getArgumentTypes(desc);
+ for(int i = 0; i < arguments.length; i++) {
+ Type type = arguments[i];
+ this.addTypeReference(type, IReference.REF_PARAMETER);
+ argumentcount += type.getSize();
}
- else {
- Type[] arguments = Type.getArgumentTypes(desc);
- for(int i = 0; i < arguments.length; i++) {
- Type type = arguments[i];
- this.addTypeReference(type, IReference.REF_PARAMETER);
- argumentcount += type.getSize();
- }
- this.addTypeReference(Type.getReturnType(desc), IReference.REF_RETURNTYPE);
- if(exceptions != null) {
- for(int i = 0; i < exceptions.length; i++) {
- this.addTypeReference(Type.getObjectType(exceptions[i]), IReference.REF_THROWS);
- }
+ this.addTypeReference(Type.getReturnType(desc), IReference.REF_RETURNTYPE);
+ if(exceptions != null) {
+ for(int i = 0; i < exceptions.length; i++) {
+ this.addTypeReference(Type.getObjectType(exceptions[i]), IReference.REF_THROWS);
}
}
}
- MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
- if(mv != null && ((access & (Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT)) == 0)) {
- return new ClassFileMethodVisitor(mv, name, argumentcount);
- }
+ }
+ MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
+ if(mv != null && ((access & (Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT)) == 0)) {
+ return new ClassFileMethodVisitor(mv, name, argumentcount);
}
}
return null;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java
index a5700f3..bbacbfc 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java
@@ -176,6 +176,16 @@ public class ExcludeListDeltaVisitor extends DeltaXmlVisitor {
}
}
}
+ if (delta.getElementType() == IDelta.API_BASELINE_ELEMENT_TYPE) {
+ switch(delta.getKind()) {
+ case IDelta.ADDED :
+ if (delta.getFlags() == IDelta.API_COMPONENT) {
+ if (!checkExclude(delta)) {
+ super.processLeafDelta(delta);
+ }
+ }
+ }
+ }
break;
case IDelta.CHANGED :
if ((this.flags & CHECK_OTHER) != 0) {
@@ -245,6 +255,11 @@ public class ExcludeListDeltaVisitor extends DeltaXmlVisitor {
super.processLeafDelta(delta);
}
}
+ break;
+ case IDelta.API_COMPONENT :
+ if (!checkExclude(delta)) {
+ super.processLeafDelta(delta);
+ }
}
break;
}
diff --git a/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
index f9ba5e5..2a87f9a 100644
--- a/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde.build;singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: pdebuild.jar
Bundle-Activator: org.eclipse.pde.internal.build.BuildActivator
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html b/eclipse/plugins/org.eclipse.pde.build/feature/cpl-v10.html
similarity index 100%
copy from eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html
copy to eclipse/plugins/org.eclipse.pde.build/feature/cpl-v10.html
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html b/eclipse/plugins/org.eclipse.pde.build/feature/rootfiles/cpl-v10.html
similarity index 100%
copy from eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html
copy to eclipse/plugins/org.eclipse.pde.build/feature/rootfiles/cpl-v10.html
diff --git a/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml b/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
index 50dda73..351a026 100644
--- a/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
+++ b/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
@@ -207,8 +207,9 @@ set here?
<!-- Invokes the p2 transformer to process all the repositories found in repoBaseLocation -->
<!-- ===================================================================== -->
<target name="transformRepos">
+ <property name="repoBaseLocation.excludes" value=".*" />
<p2.repo2runnable destination="${transformedRepoLocation}">
- <source dir="${repoBaseLocation}/" includes="*"/>
+ <source dir="${repoBaseLocation}/" includes="*" excludes="${repoBaseLocation.excludes}"/>
</p2.repo2runnable>
</target>
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
index 36aea25..f1c379f 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
@@ -12,8 +12,10 @@ package org.eclipse.pde.internal.build;
import java.io.*;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.*;
import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry;
import org.eclipse.equinox.p2.core.IAgentLocation;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.engine.IProfile;
@@ -309,18 +311,19 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
if (siteFactory != null && refresh == false)
return siteFactory.createSite();
- if (siteFactory == null || refresh == true) {
- siteFactory = new BuildTimeSiteFactory();
- siteFactory.setFilterState(filterState);
- siteFactory.setFilterRoots(featuresForFilterRoots, pluginsForFilterRoots);
- siteFactory.setReportResolutionErrors(reportResolutionErrors);
- siteFactory.setFilterP2Base(filterP2Base);
- }
+ //If there is an exception from createSite(), we will discard the factory
+ BuildTimeSiteFactory factory = new BuildTimeSiteFactory();
+ factory.setFilterState(filterState);
+ factory.setFilterRoots(featuresForFilterRoots, pluginsForFilterRoots);
+ factory.setReportResolutionErrors(reportResolutionErrors);
+ factory.setFilterP2Base(filterP2Base);
+ factory.setSitePaths(getPaths());
+ factory.setEESources(getEESources());
+ factory.setInitialState(pdeUIState);
+
+ BuildTimeSite result = factory.createSite();
+ siteFactory = factory;
- siteFactory.setSitePaths(getPaths());
- siteFactory.setEESources(getEESources());
- siteFactory.setInitialState(pdeUIState);
- BuildTimeSite result = siteFactory.createSite();
if (platformProperties != null)
result.setPlatformPropeties(platformProperties);
@@ -455,6 +458,7 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
try {
state = getSite(false).getRegistry();
} catch (CoreException e) {
+ BundleHelper.getDefault().getLog().log(e.getStatus());
return null;
}
Path path = new Path(location);
@@ -473,7 +477,7 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
try {
feature = getSite(false).findFeature(id, null, false);
} catch (CoreException e) {
- //Ignore
+ BundleHelper.getDefault().getLog().log(e.getStatus());
}
if (feature == null)
return null;
@@ -605,28 +609,55 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
}
private List getAssociatedRepositories(File profileFile) {
- if (profileFile == null || !profileFile.isDirectory() || !profileFile.getName().endsWith(".profile")) //$NON-NLS-1$
+ if (profileFile == null || !profileFile.exists() || !profileFile.getName().endsWith(".profile")) //$NON-NLS-1$
return Collections.EMPTY_LIST;
ArrayList result = new ArrayList();
URI profileURI = profileFile.toURI();
result.add(profileURI);
- URI dataArea = URIUtil.append(profileURI, "../../.."); //$NON-NLS-1$
- File areaFile = URIUtil.toFile(dataArea);
- if (areaFile != null && areaFile.exists()) {
- IProvisioningAgent agent = BundleHelper.getDefault().getProvisioningAgent(dataArea);
+
+ Map profileInfo = extractProfileInformation(profileFile);
+ if (profileInfo == null)
+ return result;
+
+ File areaFile = new File((String) profileInfo.get(PROFILE_DATA_AREA));
+ if (areaFile.exists()) {
+ IProvisioningAgent agent = BundleHelper.getDefault().getProvisioningAgent(areaFile.toURI());
if (agent != null) {
- IProfileRegistry registry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
- Path profilePath = new Path(profileFile.getPath());
+ IProfileRegistry registry = new SimpleProfileRegistry(agent, (File) profileInfo.get(PROFILE_REGISTRY), null, false);
try {
- IProfile profile = registry.getProfile(profilePath.removeFileExtension().lastSegment());
- if (profile != null) {
- String cache = profile.getProperty(IProfile.PROP_CACHE);
- if (cache != null)
- result.add(new File(cache).toURI());
- String sharedCache = profile.getProperty(IProfile.PROP_SHARED_CACHE);
- if (sharedCache != null)
- result.add(new File(cache).toURI());
+ long timestamp = ((Long) profileInfo.get(PROFILE_TIMESTAMP)).longValue();
+ String profileId = (String) profileInfo.get(PROFILE_ID);
+ if (timestamp == -1L) {
+ long[] timestamps = registry.listProfileTimestamps(profileId);
+ if (timestamps.length > 0)
+ timestamp = timestamps[timestamps.length - 1];
+ }
+
+ //specifying the timestamp avoids attempting to lock the profile registry
+ //which could be a problem if it is read only.
+ if (timestamp > 0) {
+ IProfile profile = registry.getProfile(profileId, timestamp);
+ if (profile != null) {
+ String cache = profile.getProperty(IProfile.PROP_CACHE);
+ if (cache != null)
+ result.add(new File(cache).toURI());
+ String sharedCache = profile.getProperty(IProfile.PROP_SHARED_CACHE);
+ if (sharedCache != null)
+ result.add(new File(cache).toURI());
+ String dropinRepositories = profile.getProperty("org.eclipse.equinox.p2.cache.extensions"); //$NON-NLS-1$
+ if (dropinRepositories != null) {
+ // #filterRepos will remove any dropin folders that require synchronization
+ StringTokenizer tokenizer = new StringTokenizer(dropinRepositories, "|"); //$NON-NLS-1$
+ while (tokenizer.hasMoreTokens()) {
+ try {
+ result.add(new URI(tokenizer.nextToken()));
+ } catch (URISyntaxException e) {
+ //skip
+ }
+ }
+ }
+ }
}
} catch (IllegalStateException e) {
//unable to read profile, may be read only
@@ -641,6 +672,64 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
return result;
}
+ private static String PROFILE_TIMESTAMP = "timestamp"; //$NON-NLS-1$
+ private static String PROFILE_ID = "profileId"; //$NON-NLS-1$
+ private static String PROFILE_DATA_AREA = "dataArea"; //$NON-NLS-1$
+ private static String PROFILE_REGISTRY = "registry"; //$NON-NLS-1$
+
+ private static Map extractProfileInformation(File target) {
+ if (target == null || !target.exists())
+ return null;
+
+ IPath path = new Path(target.getAbsolutePath());
+ if (!path.lastSegment().endsWith(PROFILE) && !path.lastSegment().endsWith(PROFILE_GZ))
+ return null;
+
+ //expect at least "p2/org.eclipse.equinox.p2.engine/profileRegistry/Profile.profile"
+ if (path.segmentCount() < 4)
+ return null;
+
+ Map results = new HashMap();
+ results.put(PROFILE_TIMESTAMP, new Long(-1));
+
+ String profileId = null;
+ if (target.isFile()) {
+ //p2/org.eclipse.equinox.p2.engine/profileRegistry/Profile.profile/123456.profile.gz
+ if (path.segmentCount() < 5)
+ return null;
+
+ String timestamp = path.lastSegment();
+ int idx = timestamp.indexOf('.');
+ if (idx > 0) {
+ timestamp = timestamp.substring(0, idx);
+ try {
+ results.put(PROFILE_TIMESTAMP, new Long(timestamp));
+ } catch (NumberFormatException e) {
+ //not a timestamp?
+ }
+ }
+
+ path = path.removeLastSegments(1);
+ profileId = path.removeFileExtension().lastSegment();
+ } else {
+ //target is the profile folder
+ profileId = path.removeFileExtension().lastSegment();
+ }
+
+ profileId = SimpleProfileRegistry.unescape(profileId);
+ results.put(PROFILE_ID, profileId);
+
+ //remove Profile.profile to get the registry folder
+ path = path.removeLastSegments(1);
+ results.put(PROFILE_REGISTRY, path.toFile());
+
+ //removing "org.eclipse.equinox.p2.engine/profileRegistry"
+ path = path.removeLastSegments(2);
+ results.put(PROFILE_DATA_AREA, path.toOSString());
+
+ return results;
+ }
+
public URI[] getContextMetadata() {
return contextMetadata;
}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
index 850ad6b..8a409f4 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
@@ -290,7 +290,7 @@ public class FeatureGenerator extends AbstractScriptGenerator {
try {
executableFeature = getSite(false).findFeature(FEATURE_EQUINOX_EXECUTABLE, null, false);
} catch (CoreException e) {
- // ignore
+ BundleHelper.getDefault().getLog().log(e.getStatus());
}
if (executableFeature != null) {
/* the executable feature includes the launcher and fragments already */
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
index 711a150..17a6ed9 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
@@ -38,6 +38,10 @@ public interface IPDEBuildConstants {
public final static String MANIFEST_FOLDER = "META-INF"; //$NON-NLS-1$
public final static String MANIFEST = "MANIFEST.MF"; //$NON-NLS-1$
+ public static final String FILE_SCHEME = "file"; //$NON-NLS-1$
+ public static final String PROFILE = "profile"; //$NON-NLS-1$
+ public static final String PROFILE_GZ = "profile.gz"; //$NON-NLS-1$
+
// default values
public final static String PROPERTY_GENERIC_TARGETS = "genericTargets"; //$NON-NLS-1$
public final static String DEFAULT_BUILD_SCRIPT_FILENAME = "build.xml"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
index 3ec78ac..71fd74a 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
@@ -1024,7 +1024,7 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
script.printConditionStart(PROPERTY_COMPILE_PROBLEM_MARKER_EXISTS, TRUE, null);
script.printStartTag("and"); //$NON-NLS-1$
script.printAvailableTask(null, Utils.getPropertyFormat(PROPERTY_COMPILE_PROBLEM_MARKER));
- script.printIsFalse(PROPERTY_P2_PUBLISHONERROR);
+ script.printIsFalse(Utils.getPropertyFormat(PROPERTY_P2_PUBLISHONERROR));
script.printEndTag("and"); //$NON-NLS-1$
script.printEndCondition();
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/PackageConfigScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/PackageConfigScriptGenerator.java
index 0ffaef8..08c96af 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/PackageConfigScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/PackageConfigScriptGenerator.java
@@ -184,9 +184,12 @@ public class PackageConfigScriptGenerator extends AssembleConfigScriptGenerator
script.println();
}
- protected FileSet[] generatePermissions(boolean zip) {
- //In the packager there is nothing to do since, the features we are packaging are pre-built and do not have a build.properties
- return new FileSet[0];
+ protected FileSet[] generatePermissions(String root, boolean zip) {
+ if (packagingProperties != null && packagingProperties.size() > 0) {
+ //In the packager there is nothing to do since, the features we are packaging are pre-built and do not have a build.properties
+ return new FileSet[0];
+ }
+ return super.generatePermissions(root, zip);
}
protected void generateGZipTarget(boolean assembling) {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginPathFinder.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginPathFinder.java
index e7f270b..1ea8373 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginPathFinder.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginPathFinder.java
@@ -100,7 +100,9 @@ public class PluginPathFinder {
for (int i = 0; i < contents.length; i++) {
if (contents[i].isFile()) {
if (contents[i].getName().endsWith(LINK)) {
- sites.add(new File(getSitePath(platformHome, contents[i], features)));
+ String path = getSitePath(platformHome, contents[i], features);
+ if (path != null)
+ sites.add(new File(path));
} else {
//bundle
results.add(contents[i]);
diff --git a/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
index fe0250e..5e140d7 100644
--- a/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %name
Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.pde.internal.core.PDECore
Bundle-Vendor: %provider-name
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
index 8bf48cc..40e5c4a 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
@@ -69,18 +69,34 @@ public class ExternalModelManager extends AbstractModelManager {
fModels = models;
}
- protected URL[] getPluginPaths() {
+ /**
+ * Returns the URLs of all external plug-ins referenced by PDE target platform preferences.
+ * <p>
+ * Note this method is public for testing purposes only.
+ * </p>
+ * @return URLs of all external plug-ins referenced by PDE target platform preferences.
+ */
+ public URL[] getPluginPaths() {
PDEPreferencesManager pref = PDECore.getDefault().getPreferencesManager();
- URL[] base = PluginPathFinder.getPluginPaths(pref.getString(ICoreConstants.PLATFORM_PATH));
+ boolean addPool = false;
+ String baseLocation = pref.getString(ICoreConstants.PLATFORM_PATH);
+ URL[] base = null;
+ if (AbstractTargetHandle.BUNDLE_POOL.isPrefixOf(new Path(baseLocation))) {
+ // if the base platform path is part of the bundle pool, use the bundle pool
+ // preference info to restore bundles selectively
+ addPool = true;
+ base = new URL[0];
+ } else {
+ base = PluginPathFinder.getPluginPaths(baseLocation);
+ }
String value = pref.getString(ICoreConstants.ADDITIONAL_LOCATIONS);
StringTokenizer tokenizer = new StringTokenizer(value, ","); //$NON-NLS-1$
- if (tokenizer.countTokens() == 0)
+ if (!addPool && tokenizer.countTokens() == 0)
return base;
List extraLocations = new ArrayList(tokenizer.countTokens());
- boolean addPool = false;
while (tokenizer.hasMoreTokens()) {
String location = tokenizer.nextToken();
if (AbstractTargetHandle.BUNDLE_POOL.isPrefixOf(new Path(location))) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
index 9125405..76dc85d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
@@ -1047,7 +1047,7 @@ public class FeatureExportOperation extends Job {
if (fInfo.exportSource && fInfo.exportSourceBundle) {
includes = doc.createElement("includes"); //$NON-NLS-1$
- includes.setAttribute("id", feature.getId() + " .source"); //$NON-NLS-1$ //$NON-NLS-2$
+ includes.setAttribute("id", feature.getId() + ".source"); //$NON-NLS-1$ //$NON-NLS-2$
includes.setAttribute("version", feature.getVersion()); //$NON-NLS-1$
root.appendChild(includes);
}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
index fcb4845..2441a66 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Kaloyan Raev - kaloyan.raev at sap.com - Bug 323246: IBundleProjectService.setBundleRoot() does not accept null argument
*******************************************************************************/
package org.eclipse.pde.internal.core.project;
@@ -171,7 +172,7 @@ public final class BundleProjectService implements IBundleProjectService {
* @throws CoreException if setting the root fails
*/
public void setBundleRoot(IProject project, IPath bundleRoot) throws CoreException {
- PDEProject.setBundleRoot(project, project.getFolder(bundleRoot));
+ PDEProject.setBundleRoot(project, (bundleRoot == null) ? null : project.getFolder(bundleRoot));
}
/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
index 97e6d76..7ea3bb4 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
@@ -414,6 +414,10 @@ public class IUBundleContainer extends AbstractBundleContainer {
slicer = new PermissiveSlicer(allMetadata, props, true, false, false, true, false);
}
IQueryable slice = slicer.slice(units, new SubProgressMonitor(subMonitor, 10));
+ if (slice == null) {
+ // The PermissiveSlicer may return null if an error occurs
+ return new IResolvedBundle[0];
+ }
IQueryResult queryResult = slice.query(QueryUtil.createIUAnyQuery(), new SubProgressMonitor(subMonitor, 10));
if (subMonitor.isCanceled() || queryResult.isEmpty()) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
index 07a7138..7967dc6 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
@@ -245,7 +245,7 @@ public class ProfileBundleContainer extends AbstractBundleContainer {
public boolean isContentEqual(AbstractBundleContainer container) {
if (container instanceof ProfileBundleContainer) {
ProfileBundleContainer pbc = (ProfileBundleContainer) container;
- return fHome.equals(pbc.fHome) && isNullOrEqual(fConfiguration, fConfiguration);
+ return fHome.equals(pbc.fHome) && isNullOrEqual(pbc.fConfiguration, fConfiguration);
}
return false;
}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
index b02f024..495a189 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
@@ -358,11 +358,16 @@ public class LoadTargetDefinitionJob extends WorkspaceJob {
Set includedIds = new HashSet();
if (!fTarget.isResolved()) {
+ // Even if there are errors in the target, don't interrupt the user with an error dialog
fTarget.resolve(subMon.newChild(20));
} else {
subMon.worked(20);
}
+ if (subMon.isCanceled()) {
+ return;
+ }
+
// collect all bundles, ignoring duplicates (symbolic name & version)
IResolvedBundle[] resolved = fTarget.getBundles();
List pooled = new ArrayList();
@@ -446,6 +451,11 @@ public class LoadTargetDefinitionJob extends WorkspaceJob {
NameVersionDescriptor nv = new NameVersionDescriptor(models[i].getPluginBase().getId(), models[i].getPluginBase().getVersion());
models[i].setEnabled(!missingDescriptions.contains(nv));
}
+
+ if (subMon.isCanceled()) {
+ return;
+ }
+
// save CHECKED_PLUGINS
if (urls.length == 0) {
pref.setValue(ICoreConstants.CHECKED_PLUGINS, ICoreConstants.VALUE_SAVED_NONE);
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
index bae5149..cf2ed23 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde.doc.user; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/build.xml b/eclipse/plugins/org.eclipse.pde.doc.user/build.xml
new file mode 100644
index 0000000..a1ff40b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/build.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!--
+ Copyright (c) 2005, 2009 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+
+<project name="org.eclipse.pde.doc.user" default="build.jars" basedir=".">
+
<path id="path_bootclasspath">
<fileset dir="${java.home}/lib">
<include name="*.jar" />
</fileset>
</path>
<property name="bootclasspath" refid="path_bootclasspath" />
+ <target name="init">
+ <property name="plugin" value="org.eclipse.pde.doc.user" />
+ <property name="version.suffix" value="3.2.0.200606011503" />
+ <property name="full.name" value="${plugin}_${version.suffix}" />
+ <property name="temp.folder" value="${basedir}/temp.folder" />
+ <property name="plugin.destination" value="${basedir}" />
+ <property name="build.result.folder" value="${basedir}" />
+ <condition property="p2.publish.parts" value="true">
+ <istrue value="${p2.gathering}" />
+ </condition>
+ </target>
+
+ <target name="build.update.jar" depends="init">
+ <delete dir="${temp.folder}" />
+ <mkdir dir="${temp.folder}" />
+ <antcall target="build.jars" />
+ <antcall target="gather.bin.parts">
+ <param name="destination.temp.folder" value="${temp.folder}/" />
+ </antcall>
+ <zip zipfile="${plugin.destination}/${full.name}.jar" basedir="${temp.folder}/${full.name}" filesonly="false" />
+ <delete dir="${temp.folder}" />
+ </target>
+
+ <target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+ <ant antfile="buildDoc.xml" />
+ <mkdir dir="${destination.temp.folder}/${full.name}" />
+ <copy todir="${destination.temp.folder}/${full.name}">
+ <fileset dir="${basedir}" includes="META-INF/,*.properties,*.xml,*.zip,*.html,*.htm,*.png,images/*.png,*.css,index/**,guide/**,concepts/**,tips/**,reference/**,tasks/**,whatsNew/**" excludes="build.properties,build.xml,buildDoc.xml" />
+ </copy>
+ <eclipse.versionReplacer path="${destination.temp.folder}/${full.name}" version="${version.suffix}" />
+ </target>
+
+ <target name="publish.bin.parts" depends="init" if="p2.publish.parts">
+ <antcall target="gather.bin.parts">
+ <param name="destination.temp.folder" value="${build.result.folder}"/>
+ </antcall>
+ <eclipse.gatherBundle
+ metadataRepository="${p2.build.repo}"
+ artifactRepository="${p2.build.repo}"
+ buildResultFolder="${build.result.folder}"
+ targetFolder="${build.result.folder}/${full.name}"
+ />
+ </target>
+
+ <target name="build.jars" depends="init">
+ </target>
+
+ <target name="gather.sources" depends="init" if="destination.temp.folder">
+ </target>
+
+ <target name="build.sources" depends="init">
+ </target>
+
+ <target name="gather.logs" depends="init" if="destination.temp.folder">
+ </target>
+
+ <target name="clean" depends="init">
+ <delete file="${plugin.destination}/${full.name}.jar" />
+ <delete file="${plugin.destination}/${full.name}.zip" />
+ <delete dir="${temp.folder}" />
+ </target>
+
+ <target name="refresh" depends="init" if="eclipse.running">
+ <eclipse.refreshLocal resource="${plugin}" depth="infinite" />
+ </target>
+
+ <target name="zip.plugin" depends="init">
+ <delete dir="${temp.folder}" />
+ <mkdir dir="${temp.folder}" />
+ <antcall target="build.jars" />
+ <antcall target="build.sources" />
+ <antcall target="gather.bin.parts">
+ <param name="destination.temp.folder" value="${temp.folder}/" />
+ </antcall>
+ <antcall target="gather.sources">
+ <param name="destination.temp.folder" value="${temp.folder}/" />
+ </antcall>
+ <delete>
+ <fileset dir="${temp.folder}" includes="**/*.bin.log" />
+ </delete>
+ <zip zipfile="${plugin.destination}/${full.name}.zip" basedir="${temp.folder}" filesonly="true" />
+ <delete dir="${temp.folder}" />
+ </target>
+
+</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt b/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
index bf4e83d..f6f0f8c 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
@@ -60,7 +60,7 @@
-doctitle "Eclipse PDE API Specification"
-header "<b>Eclipse PDE</b><br>Release 3.6"
-bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.</p></font>'
--link http://java.sun.com/j2se/1.4/docs/api
+-link http://java.sun.com/j2se/1.4.2/docs/api
-linkoffline ./../../../org.eclipse.platform.doc.isv/reference/api ../org.eclipse.platform.doc.isv/reference/api
-linkoffline ./../../../org.eclipse.jdt.doc.isv/reference/api ../org.eclipse.jdt.doc.isv/reference/api
-link http://bundles.osgi.org/javadoc/r4
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
index 3915797..14a416e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
@@ -19,8 +19,8 @@ classpath.</p>
<div style="text-align: left;">
<pre>
<b><font color="#0000ff"><apitooling.apideprecation_reportconversion
- xmlfiles=<font color="#008000">"..."</font>
- htmlfiles=<font color="#008000">"..."</font>
+ xmlfile=<font color="#008000">"..."</font>
+ htmlfile=<font color="#008000">"..."</font>
debug=<font color="#008000">"..."</font>
/></font></b>
</pre>
@@ -33,20 +33,22 @@ classpath.</p>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
- <td valign="top">xmlfiles</td>
- <td valign="top">This attribute specifies the location of the xml files to convert.
+ <td valign="top">xmlfile</td>
+ <td valign="top">This attribute specifies the location of the xml file to convert.
<br><br>
The location is specified using an absolute path.
</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
- <td valign="top">htmlfiles</td>
- <td valign="top">This attribute specifies the location of the html files to generate.
+ <td valign="top">htmlfile</td>
+ <td valign="top">This attribute specifies the location of the html file to generate.
+ <br>
+ If omitted, the html file name will be the given xml file name where the extension is replaced with html.
<br><br>
The location is specified using an absolute path.
</td>
- <td align="center" valign="top">Yes</td>
+ <td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">debug</td>
@@ -62,13 +64,11 @@ classpath.</p>
<pre>
<b><font color="#0000ff"><apitooling.apideprecation_reportconversion
- xmlfiles=<font color="#008000">"/eclipse/deprecation/XML"</font>
- htmlfiles=<font color="#008000">"/eclipse/deprecation/HTML"</font>
+ xmlfile=<font color="#008000">"/eclipse/deprecation/deprecation.xml"</font>
debug=<font color="#008000">"true"</font>
/></font></b>
</pre>
-<p>This will run the task creating <code>*.html</code> files inside the folder <code>/eclipse/deprecation/HTML</code> corresponding
-to the folder structure of the XML file location</p>
+<p>This will run the task creating the <code>deprecation.html</code> file inside the folder <code>/eclipse/deprecation</code>.</p>
<p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
index ebb05e8..9ea6117 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
@@ -443,7 +443,7 @@ for the 3.6 release of Eclipse, grouped into:</p>
<p>Set the property <tt>javacErrors.<library></tt> in your
build.properties. Similar to the <tt>javacWarnings.<library></tt>
property, specify the <a
- href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm">warnings</a>
+ href="../../org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm">warnings</a>
that should be reported as errors:</p>
<pre>
javacErrors.. = forbidden,discouraged,
diff --git a/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
index 678fb1c..851fab4 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %name
Bundle-SymbolicName: org.eclipse.pde.ui; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.pde.internal.ui.PDEPlugin
Bundle-Vendor: %provider-name
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
index 39b76a1..0597297 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
@@ -89,6 +89,9 @@ public abstract class AbstractPluginBlock {
private HashMap autoColumnCache = new HashMap();
private TreeEditor levelColumnEditor = null;
private TreeEditor autoColumnEditor = null;
+ private boolean fIsDisposed = false;
+
+ private PluginStatusDialog fDialog;
/**
* Label provider for the tree.
@@ -164,7 +167,8 @@ public abstract class AbstractPluginBlock {
} else if (source == fValidateButton) {
handleValidate();
}
- fTab.updateLaunchConfigurationDialog();
+ if (!fIsDisposed)
+ fTab.updateLaunchConfigurationDialog();
}
}
@@ -865,6 +869,7 @@ public abstract class AbstractPluginBlock {
public void dispose() {
PDEPlugin.getDefault().getLabelProvider().disconnect(this);
+ fIsDisposed = true;
}
protected boolean isEnabled() {
@@ -924,15 +929,26 @@ public abstract class AbstractPluginBlock {
} catch (CoreException e) {
PDEPlugin.log(e);
}
- if (fOperation.hasErrors()) {
- PluginStatusDialog dialog = new PluginStatusDialog(getShell(), SWT.APPLICATION_MODAL | SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
- dialog.setInput(fOperation.getInput());
- dialog.open();
- dialog = null;
- } else if (fOperation.isEmpty()) {
- MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, NLS.bind(PDEUIMessages.AbstractLauncherToolbar_noSelection, fTab.getName().toLowerCase(Locale.ENGLISH)));
+
+ if (fDialog == null) {
+ if (fOperation.hasErrors()) {
+ fDialog = new PluginStatusDialog(getShell(), SWT.MODELESS | SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
+ fDialog.setInput(fOperation.getInput());
+ fDialog.open();
+ fDialog = null;
+ } else if (fOperation.isEmpty()) {
+ MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, NLS.bind(PDEUIMessages.AbstractLauncherToolbar_noSelection, fTab.getName().toLowerCase(Locale.ENGLISH)));
+ } else {
+ MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, PDEUIMessages.AbstractLauncherToolbar_noProblems);
+ }
} else {
- MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, PDEUIMessages.AbstractLauncherToolbar_noProblems);
+ if (fOperation.getInput().size() > 0)
+ fDialog.refresh(fOperation.getInput());
+ else {
+ Map input = new HashMap(1);
+ input.put(PDEUIMessages.AbstractLauncherToolbar_noProblems, Status.OK_STATUS);
+ fDialog.refresh(input);
+ }
}
}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
index 026bd67..9b8809d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
@@ -185,6 +185,8 @@ public class FeatureBlock {
class ButtonSelectionListener extends SelectionAdapter {
+ private PluginStatusDialog fDialog;
+
public void widgetSelected(SelectionEvent e) {
Object source = e.getSource();
if (source == fValidateButton) {
@@ -208,8 +210,8 @@ public class FeatureBlock {
} else if (source instanceof TreeColumn) {
handleColumn((TreeColumn) source, 0);
}
-
- fTab.updateLaunchConfigurationDialog();
+ if (!fIsDisposed)
+ fTab.updateLaunchConfigurationDialog();
}
private void handleSelectFeatures() {
@@ -339,15 +341,25 @@ public class FeatureBlock {
} catch (CoreException e) {
PDEPlugin.log(e);
}
- if (fOperation.hasErrors()) {
- PluginStatusDialog dialog = new PluginStatusDialog(getShell(), SWT.APPLICATION_MODAL | SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
- dialog.setInput(fOperation.getInput());
- dialog.open();
- dialog = null;
- } else if (fOperation.isEmpty()) {
- MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, NLS.bind(PDEUIMessages.AbstractLauncherToolbar_noSelection, fTab.getName().toLowerCase(Locale.ENGLISH)));
+ if (fDialog == null) {
+ if (fOperation.hasErrors()) {
+ fDialog = new PluginStatusDialog(getShell(), SWT.MODELESS | SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
+ fDialog.setInput(fOperation.getInput());
+ fDialog.open();
+ fDialog = null;
+ } else if (fOperation.isEmpty()) {
+ MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, NLS.bind(PDEUIMessages.AbstractLauncherToolbar_noSelection, fTab.getName().toLowerCase(Locale.ENGLISH)));
+ } else {
+ MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, PDEUIMessages.AbstractLauncherToolbar_noProblems);
+ }
} else {
- MessageDialog.openInformation(getShell(), PDEUIMessages.PluginStatusDialog_pluginValidation, PDEUIMessages.AbstractLauncherToolbar_noProblems);
+ if (fOperation.getInput().size() > 0)
+ fDialog.refresh(fOperation.getInput());
+ else {
+ Map input = new HashMap(1);
+ input.put(PDEUIMessages.AbstractLauncherToolbar_noProblems, Status.OK_STATUS);
+ fDialog.refresh(input);
+ }
}
}
@@ -756,6 +768,7 @@ public class FeatureBlock {
private LaunchValidationOperation fOperation;
private ViewerFilter fSelectedOnlyFilter;
+ private boolean fIsDisposed = false;
/**
* Maps feature ID to the FeatureLaunchModel that represents the feature in the tree
@@ -809,6 +822,7 @@ public class FeatureBlock {
public void dispose() {
PDEPlugin.getDefault().getLabelProvider().disconnect(this);
+ fIsDisposed = true;
}
private void createCheckBoxTree(Composite parent) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
index ad0b049..701cdf8 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
@@ -81,6 +81,7 @@ public class TargetRepositorySearchHandler extends AbstractHandler implements IH
IUBundleContainer container = (IUBundleContainer) service.newIUContainer(units, repositories);
// Force the target into slicer mode as all requirements may not be available
container.setIncludeAllRequired(false, definition);
+ container.setIncludeAllEnvironments(true, definition);
IBundleContainer[] oldContainers = definition.getBundleContainers();
if (oldContainers == null) {
definition.setBundleContainers(new IBundleContainer[] {container});
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
index c5978e9..b8c244c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
@@ -186,18 +186,23 @@ public class PluginImportOperation extends WorkspaceJob {
HashMap workspacePluginMap = new HashMap();
for (int i = 0; i < workspacePlugins.length; i++) {
IPluginModelBase plugin = workspacePlugins[i];
- String symbolicName = plugin.getBundleDescription().getSymbolicName();
- ArrayList pluginsWithSameSymbolicName = (ArrayList) workspacePluginMap.get(symbolicName);
- if (pluginsWithSameSymbolicName == null) {
- pluginsWithSameSymbolicName = new ArrayList();
- workspacePluginMap.put(symbolicName, pluginsWithSameSymbolicName);
+ if (plugin.getBundleDescription() != null) {
+ String symbolicName = plugin.getBundleDescription().getSymbolicName();
+ ArrayList pluginsWithSameSymbolicName = (ArrayList) workspacePluginMap.get(symbolicName);
+ if (pluginsWithSameSymbolicName == null) {
+ pluginsWithSameSymbolicName = new ArrayList();
+ workspacePluginMap.put(symbolicName, pluginsWithSameSymbolicName);
+ }
+ pluginsWithSameSymbolicName.add(plugin);
}
- pluginsWithSameSymbolicName.add(plugin);
}
monitor.worked(1);
final ArrayList conflictingPlugins = new ArrayList();
for (int i = 0; i < fModels.length; i++) {
+ if (fModels[i].getBundleDescription() == null) {
+ continue;
+ }
String symbolicName = fModels[i].getBundleDescription().getSymbolicName();
ArrayList plugins = (ArrayList) workspacePluginMap.get(symbolicName);
if (plugins == null || plugins.size() == 0) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
index a7c9a95..1268559 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
@@ -51,7 +51,7 @@ public class PluginImportWizardExpressPage extends BaseImportWizardSecondPage {
for (int i = 0; i < projects.length; i++) {
if (WorkspaceModelManager.isPluginProject(projects[i]) && !WorkspaceModelManager.isBinaryProject(projects[i])) {
IPluginModelBase model = PluginRegistry.findModel(projects[i]);
- if (model != null)
+ if (model != null && model.getBundleDescription() != null)
result.add(model);
}
}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductFromConfigOperation.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductFromConfigOperation.java
index 04cb73d..b5eef07 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductFromConfigOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductFromConfigOperation.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,20 +11,20 @@
*******************************************************************************/
package org.eclipse.pde.internal.ui.wizards.product;
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
-import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper;
-
import java.util.*;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.*;
+import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.pde.core.plugin.TargetPlatform;
+import org.eclipse.pde.internal.core.ifeature.IEnvironment;
import org.eclipse.pde.internal.core.iproduct.*;
import org.eclipse.pde.internal.core.iproduct.IProduct;
+import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper;
import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.launching.IPDELauncherConstants;
/**
* This operation generates a product configuration filling in fields based on information
@@ -108,8 +108,23 @@ public class ProductFromConfigOperation extends BaseProductCreationOperation {
arguments = factory.createLauncherArguments();
if (vmargs != null)
arguments.setVMArguments(vmargs, IArgumentsInfo.L_ARGS_ALL);
- if (programArgs != null)
- arguments.setProgramArguments(programArgs, IArgumentsInfo.L_ARGS_ALL);
+ if (programArgs != null) {
+ String[] parsedArgs = DebugPlugin.parseArguments(programArgs);
+ List unwantedArgs = Arrays.asList(new String[] {'-' + IEnvironment.P_ARCH, '-' + IEnvironment.P_NL, '-' + IEnvironment.P_OS, '-' + IEnvironment.P_WS});
+ StringBuffer filteredArgs = new StringBuffer();
+ for (int i = 0; i < parsedArgs.length; i++) {
+ if (unwantedArgs.contains(parsedArgs[i].toLowerCase())) {
+ if (!parsedArgs[i + 1].startsWith("-")) { //$NON-NLS-1$
+ i++; // skip its value too
+ continue;
+ }
+ }
+ filteredArgs.append(parsedArgs[i] + ' ');
+ }
+ programArgs = filteredArgs.toString().trim();
+ if (programArgs.length() > 0)
+ arguments.setProgramArguments(programArgs, IArgumentsInfo.L_ARGS_ALL);
+ }
product.setLauncherArguments(arguments);
}
diff --git a/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
index 4ed2ac9..cb84fd3 100644
--- a/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.pde/cheatsheets/helloworld/helloworld-feature.xml b/eclipse/plugins/org.eclipse.pde/cheatsheets/helloworld/helloworld-feature.xml
index 106f99d..52380ac 100644
--- a/eclipse/plugins/org.eclipse.pde/cheatsheets/helloworld/helloworld-feature.xml
+++ b/eclipse/plugins/org.eclipse.pde/cheatsheets/helloworld/helloworld-feature.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
- Copyright (c) 2005, 2009 IBM Corporation and others.
+ Copyright (c) 2005, 2010 IBM Corporation and others.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
Contributors:
IBM Corporation - initial API and implementation
- -->
-->
<!-- Simple Cheat Sheet -->
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
index 9b8a2dc..bc654c5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.platform.doc.isv; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.help;bundle-version="[3.2.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_api_overview.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_api_overview.htm
index 31644b8..11f3c6a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_api_overview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_api_overview.htm
@@ -34,7 +34,7 @@ defines the API, which provides hooks for customizing the behaviour of the UI co
can be used in a plug-in's UI contributions. </p>
<p>Applications that simply want to provide their users a way to update or install additional software into the system
need only include the relevant UI bundles. No deep knowledge of the p2 API is required.
-<a href="org.eclipse.platform.doc.isv/guide/p2_ui.htm">Customizing the p2 UI</a>
+<a href="p2_ui.htm">Customizing the p2 UI</a>
describes this level of working with the p2 UI. The The <a href="../reference/api/org/eclipse/equinox/p2/ui/Policy.html">Policy</a> class defines
aspects of the UI that can be customized.
</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
index 23fe20a..7da94a1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
@@ -47,7 +47,7 @@ your own Eclipse-based applications and extensions.
<ul>
<li><a href="p2_metadata.html">Metadata management</a></li>
<li><a href="p2_director.html">Installation management</a></li>
-<li>Repository management</li>
+<li><a href="p2_repositorytasks.htm">Repository management</a></li>
</ul>
</p>
</BODY>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
index 2fd59c2..118b78e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.platform.doc.user; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.help;bundle-version="[3.2.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
index 9c6e463..91446c3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
@@ -47,7 +47,7 @@ Description</P>
<TH align="left">
<span style="font-weight: 400">The help system will show locally installed help contents as well as help
contents from the information centers specified in the table. If the same page exists both locally and
-on the remote information center the remote page will be shown.</span>
+on the remote information center the local page will be shown.</span>
</TH>
</TR>
<TR>
@@ -56,7 +56,7 @@ on the remote information center the remote page will be shown.</span>
<TH align="left">
<span style="font-weight: 400">The help system will show locally installed help contents as well as help
contents from the information centers specified in the table. If the same page exists both locally and
-on the remote information center the local page will be shown.</span>
+on the remote information center the remote page will be shown.</span>
</TH>
</TR>
<TR>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
index eaef0c3..ea98016 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
@@ -6,13 +6,14 @@
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+<META name="keywords" content="uninstall,uninstalling,uninstalling features, uninstall features">
<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Uninstalling software</title>
+<title>Uninstalling software (formerly uninstalling features)</title>
<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
</HEAD>
<BODY BGCOLOR="#ffffff">
-<H1>Uninstalling software</H1>
+<H1>Uninstalling software (aka uninstalling features)</H1>
<p>The <b>Uninstall</b> wizard allows you to review and uninstall items in your
configuration. This wizard is shown when you select items and press <b>Uninstall...</b> from the
<b>Installed Software</b> page. To uninstall software from your system:
diff --git a/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
index 52596a9..e4a880c 100644
--- a/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.platform; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: platform.jar
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.platform/plugin.properties b/eclipse/plugins/org.eclipse.platform/plugin.properties
index 02f15bd..2fb8715 100644
--- a/eclipse/plugins/org.eclipse.platform/plugin.properties
+++ b/eclipse/plugins/org.eclipse.platform/plugin.properties
@@ -14,7 +14,7 @@ providerName=Eclipse.org
productName=Eclipse Platform
productBlurb=Eclipse Platform\n\
\n\
-Version: 3.6.0\n\
+Version: 3.6.1\n\
Build id: {0}\n\
\n\
(c) Copyright Eclipse contributors and others 2000, 2010. All rights reserved.\n\
diff --git a/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
index dd9bb75..d289436 100644
--- a/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.sdk; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.sdk/plugin.properties b/eclipse/plugins/org.eclipse.sdk/plugin.properties
index 5351b40..b1d728d 100644
--- a/eclipse/plugins/org.eclipse.sdk/plugin.properties
+++ b/eclipse/plugins/org.eclipse.sdk/plugin.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ providerName=Eclipse.org
productName=Eclipse SDK
productBlurb=Eclipse SDK\n\
\n\
-Version: 3.6.0\n\
+Version: 3.6.1\n\
Build id: {0}\n\
\n\
(c) Copyright Eclipse contributors and others 2000, 2010. All rights reserved.\n\
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
index 2ec1aef..fa9f6c5 100644
--- a/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.carbon.macosx; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml b/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
index e7fdc5a..a66a838 100644
--- a/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
@@ -5,7 +5,7 @@
<property name="swt.os" value="macosx" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
index ca90d57..9f68f85 100644
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.cocoa.macosx.x86_64; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
index eb83172..131bd94 100644
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86_64" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
index afafc80..7186906 100644
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.cocoa.macosx; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
index 8bb7205..80d17ab 100644
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
@@ -5,7 +5,7 @@
<property name="swt.os" value="macosx" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF
index e356e4b..40df74e 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.ppc; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml
index d6a9f90..6ebb069 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="ppc" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/.project b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/.project
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/.project
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/.project
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
index bca6312..f1c5fc6 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.ppc64;singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about.html
similarity index 100%
copy from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about.html
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/IJG_README
similarity index 100%
copy from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/IJG_README
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/IJG_README
diff --git a/eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/about_cairo.html
similarity index 100%
copy from eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/about_cairo.html
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/about_cairo.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/lgpl-v21.txt
similarity index 100%
copy from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/lgpl-v21.txt
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/lgpl-v21.txt
diff --git a/eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/mpl-v11.txt
similarity index 100%
copy from eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/mpl-v11.txt
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/mpl-v11.txt
diff --git a/eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/pixman-licenses.txt
similarity index 100%
copy from eclipse/features/org.eclipse.equinox.executable/gtk_root/about_files/pixman-licenses.txt
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/pixman-licenses.txt
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.properties b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.properties
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.properties
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.properties
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml
new file mode 100644
index 0000000..de529eb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.swt.gtk.linux.ppc" default="build.jars" basedir=".">
+
+ <property name="swt.ws" value="gtk" />
+ <property name="swt.os" value="linux" />
+ <property name="swt.arch" value="ppc64" />
+
+ <!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
+ <property name="version.suffix" value="3.6.1" />
+
+ <import file="../org.eclipse.swt/buildFragment.xml"/>
+</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/fragment.properties b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/fragment.properties
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/fragment.properties
copy to eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/fragment.properties
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
index 53b1831..9b572a5 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.s390; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
index 9778bb1..2d4b881 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="s390" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
index 311eee3..6e2dc5f 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.s390x; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
index c1618fc..c23bc5b 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="s390x" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
index 1d0dac7..ac8670d 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.x86; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
index 65abf1d..f573fb5 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
index 777ae01..3cccacf 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.linux.x86_64; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
index e97f50e..68f1576 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86_64" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
index 98fdcd7..259df68 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.solaris.sparc; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
index b954b37..4b972b5 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="sparc" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
index 84ef488..8fcd272 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.gtk.solaris.x86; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
index 33b0033..75a7724 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF
index 387211a..8198677 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.motif.aix.ppc; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml
index dcf88c4..ae26425 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="ppc" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF
index 087c41d..ace323e 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.motif.hpux.ia64_32; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml
index 8290a9d..410fb67 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="ia64_32" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF
index 5c53aa7..9d4da10 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.motif.linux.x86; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml
index 6e8b8c8..520c1cd 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF
index 5effdf7..9f9dfba 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.motif.solaris.sparc; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml
index a71cc61..3b898c9 100644
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="sparc" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF
index c0f779d..58473c3 100644
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.photon.qnx.x86; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml
index f4824f1..22bb4f3 100644
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
index 670cf99..f45b41d 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.win32.wce_ppc.arm; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
index 122c535..d421acc 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="arm" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
index 108830e..5a086d6 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.win32.win32.x86; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
index 0143afb..9e83182 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
index 5fc41a2..4c9cd78 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
Bundle-Name: %fragmentName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt.win32.win32.x86_64; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: fragment
Export-Package:
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
index 9f57ac9..f81c425 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
@@ -6,7 +6,7 @@
<property name="swt.arch" value="x86_64" />
<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
- <property name="version.suffix" value="3.6.0" />
+ <property name="version.suffix" value="3.6.1" />
<import file="../org.eclipse.swt/buildFragment.xml"/>
</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
index 0ab7cc9..1fb0b60 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
@@ -1144,10 +1144,9 @@ public class Accessible {
if (attribute.isEqualToString(OS.NSAccessibilityEnabledAttribute)) return getEnabledAttribute(childID);
if (attribute.isEqualToString(OS.NSAccessibilityFocusedAttribute)) return getFocusedAttribute(childID);
if (attribute.isEqualToString(OS.NSAccessibilityParentAttribute)) return getParentAttribute(childID);
- if (attribute.isEqualToString(OS.NSAccessibilityChildrenAttribute)) return getChildrenAttribute(childID);
- /* SWT has no visible children API*/
- if (attribute.isEqualToString(OS.NSAccessibilityVisibleChildrenAttribute)) return getChildrenAttribute(childID);
- if (attribute.isEqualToString(OS.NSAccessibilityContentsAttribute)) return getChildrenAttribute(childID);
+ if (attribute.isEqualToString(OS.NSAccessibilityChildrenAttribute)) return getChildrenAttribute(childID, false);
+ if (attribute.isEqualToString(OS.NSAccessibilityVisibleChildrenAttribute)) return getChildrenAttribute(childID, true);
+ if (attribute.isEqualToString(OS.NSAccessibilityContentsAttribute)) return getChildrenAttribute(childID, false);
// FIXME: There's no specific API just for tabs, which won't include the buttons (if any.)
if (attribute.isEqualToString(OS.NSAccessibilityTabsAttribute)) return getTabsAttribute(childID);
if (attribute.isEqualToString(OS.NSAccessibilityWindowAttribute)) return getWindowAttribute(childID);
@@ -1993,7 +1992,7 @@ public class Accessible {
return returnValue;
}
- id getChildrenAttribute (int childID) {
+ id getChildrenAttribute (int childID, boolean visibleOnly) {
id returnValue = null;
if (childID == ACC.CHILDID_SELF) {
// Test for a table first.
@@ -2013,6 +2012,7 @@ public class Accessible {
listener.getChildCount(event);
}
int childCount = event.detail;
+ event.detail = (visibleOnly ? ACC.VISIBLE : 0);
if (childCount >= 0) {
for (int i = 0; i < accessibleControlListeners.size(); i++) {
AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
@@ -3338,6 +3338,14 @@ public class Accessible {
NSMutableArray returnArray = NSMutableArray.arrayWithCapacity(attributes.count());
returnArray.addObjectsFromArray(attributes);
+ if (getTitleAttribute(ACC.CHILDID_SELF) != null) {
+ if (!returnArray.containsObject(OS.NSAccessibilityTitleAttribute)) returnArray.addObject(OS.NSAccessibilityTitleAttribute);
+ }
+
+ if (getDescriptionAttribute(ACC.CHILDID_SELF) != null) {
+ if (!returnArray.containsObject(OS.NSAccessibilityDescriptionAttribute)) returnArray.addObject(OS.NSAccessibilityDescriptionAttribute);
+ }
+
// See if this object has a label or is a label for something else. If so, add that to the list.
if (relations[ACC.RELATION_LABEL_FOR] != null) {
if (!returnArray.containsObject(OS.NSAccessibilityServesAsTitleForUIElementsAttribute)) returnArray.addObject(OS.NSAccessibilityServesAsTitleForUIElementsAttribute);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
index 04a73d4..37d866a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
@@ -75,6 +75,7 @@ public class Accessible {
int [] tableChange; // type, rowStart, rowCount, columnStart, columnCount
Object [] textDeleted; // type, start, end, text
Object [] textInserted; // type, start, end, text
+ ToolItem item;
static {
String property = System.getProperty (PROPERTY_USEIA2);
@@ -92,6 +93,7 @@ public class Accessible {
* <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
* </ul>
*
+ * @see #dispose
* @see Control#getAccessible
*
* @since 3.6
@@ -127,6 +129,11 @@ public class Accessible {
AddRef();
}
+ Accessible(Accessible parent, int /*long*/ iaccessible_address) {
+ this(parent);
+ iaccessible = new IAccessible(iaccessible_address);
+ }
+
static Accessible checkNull (Accessible parent) {
if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
return parent;
@@ -332,7 +339,7 @@ public class Accessible {
// }
void createIAccessibleHyperlink() {
- objIAccessibleHyperlink = new COMObject(new int[] {2,0,0,/*IAA>>*/2,0,0,1,1,2,4,2,2,/*<<IAA*/2,2,1,1,1}) {
+ objIAccessibleHyperlink = new COMObject(new int[] {2,0,0,/*IAA>>*/1,1,2,4,2,2,/*<<IAA*/2,2,1,1,1}) {
public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
public int /*long*/ method2(int /*long*/[] args) {return Release();}
@@ -1885,20 +1892,72 @@ public class Accessible {
COM.MoveMemory(ppdispChild, new int /*long*/[] { getAddress() }, OS.PTR_SIZEOF);
return COM.S_OK;
}
+ final int childID = osToChildID(v.lVal);
int code = COM.S_FALSE;
+ Accessible osAccessible = null;
if (iaccessible != null) {
/* Get the default child from the OS. */
code = iaccessible.get_accChild(varChild, ppdispChild);
if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
+ if (code == COM.S_OK && control instanceof ToolBar) {
+ ToolBar toolBar = (ToolBar) control;
+ final ToolItem item = toolBar.getItem(childID);
+ if (item != null && (item.getStyle() & SWT.DROP_DOWN) != 0) {
+ int /*long*/[] addr = new int /*long*/[1];
+ COM.MoveMemory(addr, ppdispChild, OS.PTR_SIZEOF);
+ boolean found = false;
+ for (int i = 0; i < children.size(); i++) {
+ Accessible accChild = (Accessible)children.elementAt(i);
+ if (accChild.item == item) {
+ /*
+ * MSAA uses a new accessible for the child
+ * so we dispose the old and use the new.
+ */
+ accChild.dispose();
+ accChild.item = null;
+ found = true;
+ break;
+ }
+ }
+ osAccessible = new Accessible(this, addr[0]);
+ osAccessible.item = item;
+ if (!found) {
+ item.addListener(SWT.Dispose, new Listener() {
+ public void handleEvent(Event e) {
+ for (int i = 0; i < children.size(); i++) {
+ Accessible accChild = (Accessible)children.elementAt(i);
+ if (accChild.item == item) {
+ accChild.dispose();
+ }
+ }
+ }
+ });
+ }
+ osAccessible.addAccessibleListener(new AccessibleAdapter() {
+ public void getName(AccessibleEvent e) {
+ if (e.childID == ACC.CHILDID_SELF) {
+ AccessibleEvent event = new AccessibleEvent(Accessible.this);
+ event.childID = childID;
+ for (int i = 0; i < accessibleListeners.size(); i++) {
+ AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+ listener.getName(event);
+ }
+ e.result = event.result;
+ }
+ }
+ });
+ }
+ }
}
AccessibleControlEvent event = new AccessibleControlEvent(this);
- event.childID = osToChildID(v.lVal);
+ event.childID = childID;
for (int i = 0; i < accessibleControlListeners.size(); i++) {
AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
listener.getChild(event);
}
Accessible accessible = event.accessible;
+ if (accessible == null) accessible = osAccessible;
if (accessible != null) {
if (DEBUG) print(this + ".IAccessible::get_accChild(" + v.lVal + ") returning " + accessible.getAddress() + hresult(COM.S_OK));
accessible.AddRef();
@@ -2095,9 +2154,9 @@ public class Accessible {
return COM.S_FALSE;
}
if (childID == ACC.CHILDID_SELF) {
- if (DEBUG) print(this + ".IAccessible::get_accFocus() returning accessible " + getAddress() + hresult(COM.S_OK));
+ if (DEBUG) print(this + ".IAccessible::get_accFocus() returning CHILDID_SELF " + hresult(COM.S_OK));
AddRef();
- setPtrVARIANT(pvarChild, COM.VT_DISPATCH, getAddress());
+ setIntVARIANT(pvarChild, COM.VT_I4, COM.CHILDID_SELF);
return COM.S_OK;
}
if (DEBUG) print(this + ".IAccessible::get_accFocus() returning childID " + childIDToOs(childID) + hresult(COM.S_OK));
@@ -3270,7 +3329,7 @@ public class Accessible {
return COM.E_INVALIDARG;
}
accessible.AddRef();
- setPtrVARIANT(ppHyperlink, COM.VT_DISPATCH, accessible.getAddress());
+ COM.MoveMemory(ppHyperlink, new int /*long*/[] { accessible.getAddress() }, OS.PTR_SIZEOF);
return COM.S_OK;
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java
index 73266ea..aceaced 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java
@@ -610,13 +610,16 @@ char _findMnemonic (String string) {
* Return the Label immediately preceding the receiver in the z-order,
* or null if none.
*/
-Label getAssociatedLabel () {
+String getAssociatedLabel () {
Control[] siblings = getParent ().getChildren ();
for (int i = 0; i < siblings.length; i++) {
if (siblings [i] == this) {
- if (i > 0 && siblings [i-1] instanceof Label) {
- return (Label) siblings [i-1];
+ if (i > 0) {
+ Control sibling = siblings [i-1];
+ if (sibling instanceof Label) return ((Label) sibling).getText();
+ if (sibling instanceof CLabel) return ((CLabel) sibling).getText();
}
+ break;
}
}
return null;
@@ -937,22 +940,19 @@ void initAccessible() {
AccessibleAdapter accessibleAdapter = new AccessibleAdapter () {
public void getName (AccessibleEvent e) {
String name = null;
- Label label = getAssociatedLabel ();
- if (label != null) {
- name = stripMnemonic (label.getText());
+ String text = getAssociatedLabel ();
+ if (text != null) {
+ name = stripMnemonic (text);
}
e.result = name;
}
public void getKeyboardShortcut(AccessibleEvent e) {
String shortcut = null;
- Label label = getAssociatedLabel ();
- if (label != null) {
- String text = label.getText ();
- if (text != null) {
- char mnemonic = _findMnemonic (text);
- if (mnemonic != '\0') {
- shortcut = "Alt+"+mnemonic; //$NON-NLS-1$
- }
+ String text = getAssociatedLabel ();
+ if (text != null) {
+ char mnemonic = _findMnemonic (text);
+ if (mnemonic != '\0') {
+ shortcut = "Alt+"+mnemonic; //$NON-NLS-1$
}
}
e.result = shortcut;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
index 0bb24e7..c6915a2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
@@ -167,6 +167,7 @@ public class StyledText extends Canvas {
int lineSpacing;
int alignmentMargin;
int newOrientation = SWT.NONE;
+ int accCaretOffset;
//block selection
boolean blockSelection;
@@ -205,6 +206,7 @@ public class StyledText extends Canvas {
int pageWidth; // width of a printer page in pixels
int startPage; // first page to print
int endPage; // last page to print
+ int scope; // scope of print job
int startLine; // first (wrapped) line to print
int endLine; // last (wrapped) line to print
boolean singleLine; // widget single line mode
@@ -230,7 +232,8 @@ public class StyledText extends Canvas {
startPage = 1;
endPage = Integer.MAX_VALUE;
PrinterData data = printer.getPrinterData();
- if (data.scope == PrinterData.PAGE_RANGE) {
+ scope = data.scope;
+ if (scope == PrinterData.PAGE_RANGE) {
startPage = data.startPage;
endPage = data.endPage;
if (endPage < startPage) {
@@ -238,7 +241,7 @@ public class StyledText extends Canvas {
endPage = startPage;
startPage = temp;
}
- } else if (data.scope == PrinterData.SELECTION) {
+ } else if (scope == PrinterData.SELECTION) {
selection = styledText.getSelectionRange();
}
printerRenderer = new StyledTextRenderer(printer, null);
@@ -437,11 +440,10 @@ public class StyledText extends Canvas {
StyledTextContent content = printerRenderer.content;
startLine = 0;
endLine = singleLine ? 0 : content.getLineCount() - 1;
- PrinterData data = printer.getPrinterData();
- if (data.scope == PrinterData.PAGE_RANGE) {
+ if (scope == PrinterData.PAGE_RANGE) {
int pageSize = clientArea.height / lineHeight;//WRONG
startLine = (startPage - 1) * pageSize;
- } else if (data.scope == PrinterData.SELECTION) {
+ } else if (scope == PrinterData.SELECTION) {
startLine = content.getLineAtOffset(selection.x);
if (selection.y > 0) {
endLine = content.getLineAtOffset(selection.x + selection.y - 1);
@@ -2407,6 +2409,7 @@ void doBlockSelection(boolean sendEvent) {
if (sendEvent) {
sendSelectionEvent();
}
+ sendAccessibleTextCaretMoved();
}
/**
* Replaces the selection with the character or insert the character at the
@@ -3215,6 +3218,7 @@ void doSelection(int direction) {
internalRedrawRange(redrawStart, redrawEnd - redrawStart);
sendSelectionEvent();
}
+ sendAccessibleTextCaretMoved();
}
/**
* Moves the caret to the next character or to the beginning of the
@@ -6335,9 +6339,9 @@ void initializeAccessible() {
accessible.addAccessibleListener(new AccessibleAdapter() {
public void getName (AccessibleEvent e) {
String name = null;
- Label label = getAssociatedLabel ();
- if (label != null) {
- name = stripMnemonic (label.getText());
+ String text = getAssociatedLabel ();
+ if (text != null) {
+ name = stripMnemonic (text);
}
e.result = name;
}
@@ -6346,14 +6350,11 @@ void initializeAccessible() {
}
public void getKeyboardShortcut(AccessibleEvent e) {
String shortcut = null;
- Label label = getAssociatedLabel ();
- if (label != null) {
- String text = label.getText ();
- if (text != null) {
- char mnemonic = _findMnemonic (text);
- if (mnemonic != '\0') {
- shortcut = "Alt+"+mnemonic; //$NON-NLS-1$
- }
+ String text = getAssociatedLabel ();
+ if (text != null) {
+ char mnemonic = _findMnemonic (text);
+ if (mnemonic != '\0') {
+ shortcut = "Alt+"+mnemonic; //$NON-NLS-1$
}
}
e.result = shortcut;
@@ -6798,13 +6799,16 @@ void initializeAccessible() {
* Return the Label immediately preceding the receiver in the z-order,
* or null if none.
*/
-Label getAssociatedLabel () {
+String getAssociatedLabel () {
Control[] siblings = getParent ().getChildren ();
for (int i = 0; i < siblings.length; i++) {
if (siblings [i] == StyledText.this) {
- if (i > 0 && siblings [i-1] instanceof Label) {
- return (Label) siblings [i-1];
+ if (i > 0) {
+ Control sibling = siblings [i-1];
+ if (sibling instanceof Label) return ((Label) sibling).getText();
+ if (sibling instanceof CLabel) return ((CLabel) sibling).getText();
}
+ break;
}
}
return null;
@@ -7794,6 +7798,7 @@ void resetCache(int firstLine, int count) {
void resetSelection() {
selection.x = selection.y = caretOffset;
selectionAnchor = -1;
+ sendAccessibleTextCaretMoved();
}
public void scroll(int destX, int destY, int x, int y, int width, int height, boolean all) {
@@ -7928,6 +7933,12 @@ void scrollText(int srcY, int destY) {
super.redraw(leftMargin, clientAreaHeight - bottomMargin, scrollWidth, bottomMargin, false);
}
}
+void sendAccessibleTextCaretMoved() {
+ if (caretOffset != accCaretOffset) {
+ accCaretOffset = caretOffset;
+ getAccessible().textCaretMoved(caretOffset);
+ }
+}
void sendAccessibleTextChanged(int start, int newCharCount, int replaceCharCount) {
Accessible accessible = getAccessible();
if (replaceCharCount != 0) {
@@ -8434,7 +8445,6 @@ void setCaretOffset(int offset, int alignment) {
event.end = caretOffset;
notifyListeners(CaretMoved, event);
}
- getAccessible().textCaretMoved(caretOffset);
}
if (alignment != SWT.DEFAULT) {
caretAlignment = alignment;
@@ -9479,6 +9489,7 @@ void setSelection(int start, int length, boolean sendEvent, boolean doBlock) {
setCaretOffset(end, PREVIOUS_OFFSET_TRAILING);
}
internalRedrawRange(selection.x, selection.y - selection.x);
+ sendAccessibleTextCaretMoved();
}
}
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java
index f1f8ff4..7aa900b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java
@@ -110,6 +110,7 @@ public class DragSource extends Widget {
DragSourceEffect dragEffect;
static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$
+ static final String DRAG_STARTED = "org.eclipse.swt.internal.dragStarted"; //$NON-NLS-1$
static Callback DragSendDataProc;
static {
@@ -327,7 +328,9 @@ void drag(Event dragEvent) {
theEvent.what = (short)OS.osEvt;
theEvent.where_h = pt.h;
theEvent.where_v = pt.v;
+ control.setData(DRAG_STARTED, new Object());
int result = OS.TrackDrag(theDrag[0], theEvent, theRegion);
+ control.setData(DRAG_STARTED, null);
int operation = DND.DROP_NONE;
if (result == OS.noErr) {
int[] outAction = new int[1];
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java
index aee31ff..af52555 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java
@@ -279,10 +279,17 @@ static DropTarget FindDropTarget(int theWindow, int theDrag) {
OS.SetEventParameter (event[0], OS.kEventParamWindowMouseLocation, OS.typeHIPoint, CGPoint.sizeof, inPoint);
OS.HIViewGetViewForMouseEvent (theRoot [0], event [0], theControl);
OS.ReleaseEvent(event[0]);
- if (!OS.IsControlEnabled(theControl[0])) return null;
- Widget widget = display.findWidget(theControl[0]);
- if (widget == null) return null;
- return (DropTarget)widget.getData(DND.DROP_TARGET_KEY);
+ if (!OS.IsControlEnabled(theControl[0])) return null;
+ DropTarget dropTarget = null;
+ do {
+ Widget widget = display.findWidget(theControl[0]);
+ if (widget != null) {
+ dropTarget = (DropTarget) widget.getData(DND.DROP_TARGET_KEY);
+ if (dropTarget != null) break;
+ }
+ OS.GetSuperControl (theControl [0], theControl);
+ } while (theControl [0] != 0);
+ return dropTarget;
}
/**
* Adds the listener to the collection of listeners who will
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java
index 6ad9d48..81414b1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java
@@ -36,10 +36,10 @@ import org.eclipse.swt.internal.carbon.OS;
public class TextTransfer extends ByteArrayTransfer {
static TextTransfer _instance = new TextTransfer();
- static final String UT16 = "ut16"; //$NON-NLS-1$
- static final String UTF8 = "utf8"; //$NON-NLS-1$
- static final int UT16ID = OS.kScrapFlavorTypeUTF16External;
- static final int UTF8ID = ('u'<<24) + ('t'<<16) + ('f'<<8) + '8';
+ static final String UTXT = "utxt"; //$NON-NLS-1$
+ static final String TEXT = "TEXT"; //$NON-NLS-1$
+ static final int UTXTID = OS.kScrapFlavorTypeUnicode;
+ static final int TEXTID = OS.kScrapFlavorTypeText;
TextTransfer() {}
@@ -72,9 +72,9 @@ public void javaToNative (Object object, TransferData transferData) {
transferData.result = -1;
switch (transferData.type) {
- case UTF8ID:
- case UT16ID: {
- int encoding = transferData.type == UTF8ID ? OS.kCFStringEncodingUTF8 : OS.kCFStringEncodingUnicode;
+ case TEXTID:
+ case UTXTID: {
+ int encoding = transferData.type == TEXTID ? OS.CFStringGetSystemEncoding(): OS.kCFStringEncodingUnicode;
int cfstring = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, chars, chars.length);
if (cfstring == 0) return;
byte[] buffer = null;
@@ -82,10 +82,10 @@ public void javaToNative (Object object, TransferData transferData) {
CFRange range = new CFRange();
range.length = chars.length;
int[] size = new int[1];
- int numChars = OS.CFStringGetBytes(cfstring, range, encoding, (byte)'?', true, null, 0, size);
+ int numChars = OS.CFStringGetBytes(cfstring, range, encoding, (byte)'?', false, null, 0, size);
if (numChars == 0) return;
buffer = new byte[size[0]];
- numChars = OS.CFStringGetBytes(cfstring, range, encoding, (byte)'?', true, buffer, size [0], size);
+ numChars = OS.CFStringGetBytes(cfstring, range, encoding, (byte)'?', false, buffer, size [0], size);
if (numChars == 0) return;
} finally {
OS.CFRelease(cfstring);
@@ -112,10 +112,10 @@ public Object nativeToJava(TransferData transferData){
if (transferData.data.length == 0 || transferData.data[0].length == 0) return null;
byte[] buffer = transferData.data[0];
switch (transferData.type) {
- case UTF8ID:
- case UT16ID: {
- int encoding = transferData.type == UTF8ID ? OS.kCFStringEncodingUTF8 : OS.kCFStringEncodingUnicode;
- int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, true);
+ case TEXTID:
+ case UTXTID: {
+ int encoding = transferData.type == TEXTID ? OS.CFStringGetSystemEncoding() : OS.kCFStringEncodingUnicode;
+ int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
if (cfstring == 0) return null;
try {
int length = OS.CFStringGetLength(cfstring);
@@ -134,11 +134,11 @@ public Object nativeToJava(TransferData transferData){
}
protected int[] getTypeIds() {
- return new int[] {UT16ID, UTF8ID};
+ return new int[] {UTXTID, TEXTID};
}
protected String[] getTypeNames() {
- return new String[] {UT16, UTF8};
+ return new String[] {UTXT, TEXT};
}
boolean checkText(Object object) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
index 83933ff..9b32d7b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
@@ -41,6 +41,10 @@ static Browser findBrowser (int handle) {
return null;
}
+static String getLibraryName () {
+ return "libxpcom.dylib"; //$NON-NLS-1$
+}
+
static char[] mbcsToWcs (String codePage, byte [] buffer) {
int encoding = OS.CFStringGetSystemEncoding ();
int cfstring = OS.CFStringCreateWithBytes (OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
@@ -202,10 +206,6 @@ String getJSLibraryName () {
return "libmozjs.dylib"; //$NON-NLS-1$
}
-String getLibraryName () {
- return "libxpcom.dylib"; //$NON-NLS-1$
-}
-
String getProfilePath () {
String baseDir = System.getProperty ("user.home"); //$NON-NLS-1$
return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
index 3f1848c..40ef94f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
@@ -32,6 +32,10 @@ static Browser findBrowser (int /*long*/ handle) {
return (Browser)display.findWidget (handle);
}
+static String getLibraryName () {
+ return "libxpcom.dylib"; //$NON-NLS-1$
+}
+
static char[] mbcsToWcs (String codePage, byte [] buffer) {
// int encoding = OS.CFStringGetSystemEncoding ();
// int cfstring = OS.CFStringCreateWithBytes (OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
@@ -101,10 +105,6 @@ String getJSLibraryName () {
return "libmozjs.dylib"; //$NON-NLS-1$
}
-String getLibraryName () {
- return "libxpcom.dylib"; //$NON-NLS-1$
-}
-
String getProfilePath () {
String baseDir = System.getProperty ("user.home"); //$NON-NLS-1$
return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp
index c27048e..32741cf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp
@@ -85,4 +85,46 @@ fail:
}
#endif
+#ifndef NO__1NS_1Free
+JNIEXPORT jint JNICALL XPCOM_NATIVE(_1NS_1Free)
+ (JNIEnv *env, jclass that, jbyteArray mozillaPath, jintLong arg0)
+{
+ jbyte *lpmozillaPath=NULL;
+ jint rc = 0;
+ XPCOM_NATIVE_ENTER(env, that, _1NS_1Free_FUNC);
+ if (mozillaPath) if ((lpmozillaPath = env->GetByteArrayElements(mozillaPath, NULL)) == NULL) goto fail;
+/*
+ NS_Free((void*)arg0);
+*/
+ {
+
+#ifdef _WIN32
+ LOAD_FUNCTION(fp, NS_Free)
+ if (fp) {
+ ((jint (*)(void *))fp)((void *)arg0);
+ rc = 1;
+ }
+#else
+#define CALLING_CONVENTION
+ static int initialized = 0;
+ static void *fp = NULL;
+ if (!initialized) {
+ void* handle = dlopen((const char *)lpmozillaPath, RTLD_LAZY);
+ if (handle) {
+ fp = dlsym(handle, "NS_Free");
+ }
+ initialized = 1;
+ }
+ if (fp) {
+ ((jint (CALLING_CONVENTION*)(void *))fp)((void *)arg0);
+ rc = 1;
+ }
+#endif /* _WIN32 */
+ }
+fail:
+ if (mozillaPath && lpmozillaPath) env->ReleaseByteArrayElements(mozillaPath, lpmozillaPath, 0);
+ XPCOM_NATIVE_EXIT(env, that, _1NS_1Free_FUNC);
+ return rc;
+}
+#endif
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
index c11fe30..21bc338 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
@@ -12,6 +12,7 @@
#ifdef _WIN32
#include <windows.h>
#define JS_EvaluateUCScriptForPrincipals_LIB "js3250.dll"
+#define NS_Free_LIB "xpcom.dll"
#define XP_WIN
#else
#include <dlfcn.h>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.cpp
index f97f603..f0ac6ad 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.cpp
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.cpp
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -14,8 +14,8 @@
#ifdef NATIVE_STATS
-int XPCOM_nativeFunctionCount = 225;
-int XPCOM_nativeFunctionCallCount[225];
+int XPCOM_nativeFunctionCount = 226;
+int XPCOM_nativeFunctionCallCount[226];
char * XPCOM_nativeFunctionNames[] = {
#ifndef JNI64
"_1Call__I",
@@ -33,6 +33,7 @@ char * XPCOM_nativeFunctionNames[] = {
"_1Call__JJJ_3BII_3I",
#endif
"_1JS_1EvaluateUCScriptForPrincipals",
+ "_1NS_1Free",
"_1NS_1GetComponentManager",
"_1NS_1GetServiceManager",
"_1NS_1InitXPCOM2",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.h
index 4bb0240..eef0e1b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.h
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_stats.h
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ typedef enum {
_1Call__JJJ_3BII_3I_FUNC,
#endif
_1JS_1EvaluateUCScriptForPrincipals_FUNC,
+ _1NS_1Free_FUNC,
_1NS_1GetComponentManager_FUNC,
_1NS_1GetServiceManager_FUNC,
_1NS_1InitXPCOM2_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
index e02e7f2..30d6b71 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
@@ -65,6 +65,8 @@ class Mozilla extends WebBrowser {
static boolean Initialized, IsPre_1_8, IsPre_1_9, PerformedVersionCheck, XPCOMWasGlued, XPCOMInitWasGlued;
static String oldProxyHostFTP, oldProxyHostHTTP, oldProxyHostSSL;
static int oldProxyPortFTP = -1, oldProxyPortHTTP = -1, oldProxyPortSSL = -1, oldProxyType = -1;
+ static byte[] pathBytes_JSEvaluateUCScriptForPrincipals;
+ static byte[] pathBytes_NSFree;
/* XULRunner detect constants */
static final String GRERANGE_LOWER = "1.8.1.2"; //$NON-NLS-1$
@@ -438,7 +440,24 @@ class Mozilla extends WebBrowser {
int length = C.strlen (cookieString);
bytes = new byte[length];
XPCOM.memmove (bytes, cookieString, length);
- C.free (cookieString);
+
+ /*
+ * NS_Free was introduced in mozilla 1.8, prior to this the standard free() call
+ * was to be used. Try to free the cookie string with NS_Free first, and if it fails
+ * then assume that an older mozilla is being used, and use C's free() instead.
+ */
+ if (pathBytes_NSFree == null) {
+ String mozillaPath = getMozillaPath () + MozillaDelegate.getLibraryName () + '\0';
+ try {
+ pathBytes_NSFree = mozillaPath.getBytes ("UTF-8"); //$NON-NLS-1$
+ } catch (UnsupportedEncodingException e) {
+ pathBytes_NSFree = mozillaPath.getBytes ();
+ }
+ }
+ if (!XPCOM.NS_Free (pathBytes_NSFree, cookieString)) {
+ C.free (cookieString);
+ }
+
String allCookies = new String (MozillaDelegate.mbcsToWcs (null, bytes));
StringTokenizer tokenizer = new StringTokenizer (allCookies, ";"); //$NON-NLS-1$
while (tokenizer.hasMoreTokens ()) {
@@ -560,7 +579,7 @@ public boolean create (Composite parent, int style) {
*/
}
} else {
- mozillaPath += SEPARATOR_OS + delegate.getLibraryName ();
+ mozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
isXULRunner = true;
}
@@ -600,7 +619,7 @@ public boolean create (Composite parent, int style) {
if (mozillaPath.indexOf("xulrunner") == -1) { //$NON-NLS-1$
isXULRunner = false;
} else {
- mozillaPath += SEPARATOR_OS + delegate.getLibraryName ();
+ mozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
rc = XPCOMInit.XPCOMGlueStartup (path);
if (rc != XPCOM.NS_OK) {
@@ -1226,12 +1245,13 @@ public boolean execute (String script) {
int /*long*/ principals = result[0];
result[0] = 0;
principal.Release ();
- String mozillaPath = LocationProvider.mozillaPath + delegate.getJSLibraryName () + '\0';
- byte[] pathBytes = null;
- try {
- pathBytes = mozillaPath.getBytes ("UTF-8"); //$NON-NLS-1$
- } catch (UnsupportedEncodingException e) {
- pathBytes = mozillaPath.getBytes ();
+ if (pathBytes_JSEvaluateUCScriptForPrincipals == null) {
+ String mozillaPath = getMozillaPath () + delegate.getJSLibraryName () + '\0';
+ try {
+ pathBytes_JSEvaluateUCScriptForPrincipals = mozillaPath.getBytes ("UTF-8"); //$NON-NLS-1$
+ } catch (UnsupportedEncodingException e) {
+ pathBytes_JSEvaluateUCScriptForPrincipals = mozillaPath.getBytes ();
+ }
}
aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true);
@@ -1244,7 +1264,7 @@ public boolean execute (String script) {
result[0] = 0;
rc = stack.Push (nativeContext);
if (rc != XPCOM.NS_OK) error (rc);
- boolean success = XPCOM.JS_EvaluateUCScriptForPrincipals (pathBytes, nativeContext, globalJSObject, principals, scriptChars, length, urlbytes, 0, result) != 0;
+ boolean success = XPCOM.JS_EvaluateUCScriptForPrincipals (pathBytes_JSEvaluateUCScriptForPrincipals, nativeContext, globalJSObject, principals, scriptChars, length, urlbytes, 0, result) != 0;
result[0] = 0;
rc = stack.Pop (result);
if (rc != XPCOM.NS_OK) error (rc);
@@ -1345,6 +1365,53 @@ public String getBrowserType () {
return "mozilla"; //$NON-NLS-1$
}
+static String getMozillaPath () {
+ if (LocationProvider != null) return LocationProvider.mozillaPath;
+ if (!Initialized) return "";
+
+ int /*long*/[] result = new int /*long*/[1];
+ int rc = XPCOM.NS_GetServiceManager (result);
+ if (rc != XPCOM.NS_OK) error (rc);
+ if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+ nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+ result[0] = 0;
+ byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DIRECTORYSERVICE_CONTRACTID, true);
+ rc = serviceManager.GetServiceByContractID (buffer, nsIDirectoryService.NS_IDIRECTORYSERVICE_IID, result);
+ if (rc != XPCOM.NS_OK) error (rc);
+ if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+ serviceManager.Release();
+
+ nsIDirectoryService directoryService = new nsIDirectoryService (result[0]);
+ result[0] = 0;
+ rc = directoryService.QueryInterface (nsIProperties.NS_IPROPERTIES_IID, result);
+ if (rc != XPCOM.NS_OK) error (rc);
+ if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+ directoryService.Release ();
+
+ nsIProperties properties = new nsIProperties (result[0]);
+ result[0] = 0;
+ buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_GRE_DIR, true);
+ rc = properties.Get (buffer, nsIFile.NS_IFILE_IID, result);
+ if (rc != XPCOM.NS_OK) error (rc);
+ if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+ properties.Release ();
+
+ nsIFile mozillaDir = new nsIFile (result[0]);
+ result[0] = 0;
+ int /*long*/ path = XPCOM.nsEmbedCString_new ();
+ rc = mozillaDir.GetNativePath (path);
+ if (rc != XPCOM.NS_OK) error (rc);
+ int length = XPCOM.nsEmbedCString_Length (path);
+ int /*long*/ ptr = XPCOM.nsEmbedCString_get (path);
+ buffer = new byte[length];
+ XPCOM.memmove (buffer, ptr, length);
+ XPCOM.nsEmbedCString_delete (path);
+ mozillaDir.Release ();
+
+ return new String (MozillaDelegate.mbcsToWcs (null, buffer)) + SEPARATOR_OS;
+}
+
int getNextFunctionIndex () {
return NextJSFunctionIndex++;
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java
index 23d3a64..79be3c2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java
@@ -166,7 +166,16 @@ public static final int JS_EvaluateUCScriptForPrincipals(byte[] mozillaPath, int
lock.unlock();
}
}
-
+/** @method flags=no_gen */
+public static final native boolean _NS_Free(byte[] mozillaPath, int /*long*/ aPtr);
+public static final boolean NS_Free(byte[] mozillaPath, int /*long*/ aPtr) {
+ lock.lock();
+ try {
+ return _NS_Free(mozillaPath, aPtr);
+ } finally {
+ lock.unlock();
+ }
+}
/** @param result cast=(nsIComponentManager**) */
public static final native int _NS_GetComponentManager(int /*long*/[] result);
public static final int NS_GetComponentManager(int /*long*/[] result) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
index 2b5f92e..e2dda62 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
@@ -68,6 +68,10 @@ static Browser findBrowser (int /*long*/ handle) {
return (Browser)display.findWidget (parent);
}
+static String getLibraryName () {
+ return "libxpcom.so"; //$NON-NLS-1$
+}
+
static char[] mbcsToWcs (String codePage, byte [] buffer) {
return Converter.mbcsToWcs (codePage, buffer);
}
@@ -104,10 +108,6 @@ String getJSLibraryName () {
return "libmozjs.so"; //$NON-NLS-1$
}
-String getLibraryName () {
- return "libxpcom.so"; //$NON-NLS-1$
-}
-
String getProfilePath () {
String baseDir = System.getProperty ("user.home"); //$NON-NLS-1$
return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
index 33a3a91..3a6c5bd 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
@@ -77,6 +77,10 @@ static Browser findBrowser (Control control, int gtkHandle) {
return null;
}
+static String getLibraryName () {
+ return "libxpcom.so"; //$NON-NLS-1$
+}
+
static char[] mbcsToWcs (String codePage, byte [] buffer) {
return Converter.mbcsToWcs (codePage, buffer);
}
@@ -116,10 +120,6 @@ String getJSLibraryName () {
return "libmozjs.so"; //$NON-NLS-1$
}
-String getLibraryName () {
- return "libxpcom.so"; //$NON-NLS-1$
-}
-
String getProfilePath () {
String baseDir = System.getProperty ("user.home"); //$NON-NLS-1$
return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
index 8317a40..f7bb342 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
@@ -31,6 +31,10 @@ static Browser findBrowser (int /*long*/ handle) {
return (Browser)display.findWidget (handle);
}
+static String getLibraryName () {
+ return "xpcom.dll"; //$NON-NLS-1$
+}
+
static char[] mbcsToWcs (String codePage, byte[] buffer) {
char[] chars = new char[buffer.length];
int charCount = OS.MultiByteToWideChar (OS.CP_ACP, OS.MB_PRECOMPOSED, buffer, buffer.length, chars, chars.length);
@@ -90,10 +94,6 @@ String getJSLibraryName () {
return "js3250.dll"; //$NON-NLS-1$
}
-String getLibraryName () {
- return "xpcom.dll"; //$NON-NLS-1$
-}
-
String getProfilePath () {
String baseDir;
/* Use the character encoding for the default locale */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
index dd6c2e2..08d6923 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
@@ -7665,6 +7665,18 @@ fail:
}
#endif
+#ifndef NO_HIGrowBoxViewSetTransparent
+JNIEXPORT jint JNICALL OS_NATIVE(HIGrowBoxViewSetTransparent)
+ (JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, HIGrowBoxViewSetTransparent_FUNC);
+ rc = (jint)HIGrowBoxViewSetTransparent((HIViewRef)arg0, (Boolean)arg1);
+ OS_NATIVE_EXIT(env, that, HIGrowBoxViewSetTransparent_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO_HIObjectCopyClassID
JNIEXPORT jint JNICALL OS_NATIVE(HIObjectCopyClassID)
(JNIEnv *env, jclass that, jint arg0)
@@ -10041,6 +10053,18 @@ JNIEXPORT jint JNICALL OS_NATIVE(NavDialogGetUserAction)
}
#endif
+#ifndef NO_NavDialogGetWindow
+JNIEXPORT jint JNICALL OS_NATIVE(NavDialogGetWindow)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, NavDialogGetWindow_FUNC);
+ rc = (jint)NavDialogGetWindow((NavDialogRef)arg0);
+ OS_NATIVE_EXIT(env, that, NavDialogGetWindow_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO_NavDialogRun
JNIEXPORT jint JNICALL OS_NATIVE(NavDialogRun)
(JNIEnv *env, jclass that, jint arg0)
@@ -13903,6 +13927,18 @@ JNIEXPORT jint JNICALL OS_NATIVE(kHIViewWindowContentID)
}
#endif
+#ifndef NO_kHIViewWindowGrowBoxID
+JNIEXPORT jint JNICALL OS_NATIVE(kHIViewWindowGrowBoxID)
+ (JNIEnv *env, jclass that)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, kHIViewWindowGrowBoxID_FUNC);
+ rc = (jint)&kHIViewWindowGrowBoxID;
+ OS_NATIVE_EXIT(env, that, kHIViewWindowGrowBoxID_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO_kLSItemContentType
JNIEXPORT jint JNICALL OS_NATIVE(kLSItemContentType)
(JNIEnv *env, jclass that)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
index be92b38..3bc62d6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
@@ -14,8 +14,8 @@
#ifdef NATIVE_STATS
-int OS_nativeFunctionCount = 1010;
-int OS_nativeFunctionCallCount[1010];
+int OS_nativeFunctionCount = 1013;
+int OS_nativeFunctionCallCount[1013];
char * OS_nativeFunctionNames[] = {
"AECoerceDesc",
"AECountItems",
@@ -555,6 +555,7 @@ char * OS_nativeFunctionNames[] = {
"HIComboBoxSetListVisible",
"HICopyAccessibilityRoleDescription",
"HICreateTransformedCGImage",
+ "HIGrowBoxViewSetTransparent",
"HIObjectCopyClassID",
"HIObjectCreate",
"HIObjectRegisterSubclass",
@@ -713,6 +714,7 @@ char * OS_nativeFunctionNames[] = {
"NavDialogGetReply",
"NavDialogGetSaveFileName",
"NavDialogGetUserAction",
+ "NavDialogGetWindow",
"NavDialogRun",
"NavDialogSetFilterTypeIdentifiers",
"NavDialogSetSaveFileName",
@@ -1001,6 +1003,7 @@ char * OS_nativeFunctionNames[] = {
"kFontPanelAttributeValuesKey",
"kFontPanelAttributesKey",
"kHIViewWindowContentID",
+ "kHIViewWindowGrowBoxID",
"kLSItemContentType",
"kPMDocumentFormatPDF",
"kPMGraphicsContextCoreGraphics",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
index 338e659..8bc2379 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
@@ -563,6 +563,7 @@ typedef enum {
HIComboBoxSetListVisible_FUNC,
HICopyAccessibilityRoleDescription_FUNC,
HICreateTransformedCGImage_FUNC,
+ HIGrowBoxViewSetTransparent_FUNC,
HIObjectCopyClassID_FUNC,
HIObjectCreate_FUNC,
HIObjectRegisterSubclass_FUNC,
@@ -721,6 +722,7 @@ typedef enum {
NavDialogGetReply_FUNC,
NavDialogGetSaveFileName_FUNC,
NavDialogGetUserAction_FUNC,
+ NavDialogGetWindow_FUNC,
NavDialogRun_FUNC,
NavDialogSetFilterTypeIdentifiers_FUNC,
NavDialogSetSaveFileName_FUNC,
@@ -1009,6 +1011,7 @@ typedef enum {
kFontPanelAttributeValuesKey_FUNC,
kFontPanelAttributesKey_FUNC,
kHIViewWindowContentID_FUNC,
+ kHIViewWindowGrowBoxID_FUNC,
kLSItemContentType_FUNC,
kPMDocumentFormatPDF_FUNC,
kPMGraphicsContextCoreGraphics_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
index d48cd8a..26624cb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
@@ -373,6 +373,7 @@ public class OS extends C {
public static final int kDragTrackingLeaveWindow = 4;
public static final int kDragTrackingLeaveHandler = 5;
public static final int kEventAppleEvent = 1;
+ public static final int kEventAppDeactivated = 2;
public static final int kEventAppAvailableWindowBoundsChanged = 110;
public static final int kEventAttributeUserEvent = 1 << 0;
public static final int kEventClassAppleEvent = ('e'<<24) + ('p'<<16) + ('p'<<8) + 'c';
@@ -779,7 +780,7 @@ public class OS extends C {
public static final int kPMShowPageAttributesPDE = 1 << 8;
public static final int kQDUseCGTextMetrics = (1 << 2);
public static final int kQDUseCGTextRendering = (1 << 1);
- public static final int kScrapFlavorTypeUTF16External = ('u'<<24) + ('t'<<16) + ('1'<<8) + '6';
+ public static final int kScrapFlavorTypeUnicode = ('u'<<24) + ('t'<<16) + ('x'<<8) + 't';
public static final int kScrapFlavorTypeText = ('T'<<24) + ('E'<<16) + ('X'<<8) + 'T';
public static final boolean kScrollBarsSyncAlwaysActive = true;
public static final boolean kScrollBarsSyncWithFocus = false;
@@ -966,7 +967,8 @@ public class OS extends C {
public static final int kWindowCollapseBoxAttribute = (1 << 3);
public static final int kWindowCompositingAttribute = (1 << 19);
public static final int kWindowContentRgn = 33;
- public static final int kWindowGroupAttrHideOnCollapse = 16;
+ public static final int kWindowGroupAttrHideOnCollapse = (1 << 4);
+ public static final int kWindowGroupAttrSelectAsLayer = (1 << 0);
public static final int kWindowHorizontalZoomAttribute = 1 << 1;
public static final int kWindowVerticalZoomAttribute = 1 << 2;
public static final int kWindowFullZoomAttribute = (OS.kWindowVerticalZoomAttribute | OS.kWindowHorizontalZoomAttribute);
@@ -1097,6 +1099,8 @@ public static final native int kLSItemContentType();
public static final native int kUTTagClassFilenameExtension();
/** @method flags=const address */
public static final native int kHIViewWindowContentID();
+/** @method flags=const address */
+public static final native int kHIViewWindowGrowBoxID();
/** @method flags=const */
public static final native int kPMDocumentFormatPDF();
/** @method flags=const */
@@ -3726,6 +3730,11 @@ public static final native int HIViewGetSuperview(int inView);
* @param outView cast=(HIViewRef *)
*/
public static final native int HIViewGetViewForMouseEvent(int inView, int inEvent, int[] outView);
+/**
+ * @param inGrowBoxView cast=(HIViewRef)
+ * @param inTransparent cast=(Boolean)
+ */
+public static final native int HIGrowBoxViewSetTransparent(int inGrowBoxView, boolean inTransparent);
/** @param inView cast=(HIViewRef) */
public static final native boolean HIViewIsDrawingEnabled (int inView);
/** @param inView cast=(HIViewRef) */
@@ -4080,6 +4089,8 @@ public static final native void NavDialogDispose(int dialogHandle);
public static final native int NavDialogGetSaveFileName(int dialogHandle);
/** @param dialogHandle cast=(NavDialogRef) */
public static final native int NavDialogGetUserAction(int dialogHandle);
+/** @param dialog cast=(NavDialogRef) */
+public static final native int NavDialogGetWindow(int dialog);
/** @param dialogHandle cast=(NavDialogRef) */
public static final native int NavDialogRun(int dialogHandle);
/**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
index 7a2cd69..7520cd7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
@@ -44,9 +44,9 @@ XULRUNNERCFLAGS = -c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS)
-Wno-non-virtual-dtor -include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include
XULRUNNERLFLAGS = $(LFLAGS)
-all: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB) $(XULRUNNER_LIB)
+all: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB)
-all_x86_64: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB) $(XULRUNNER_LIB)
+all_x86_64: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB)
.c.o:
cc $(CFLAGS) $*.c
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
index 007d326..8d93784 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
@@ -3460,6 +3460,10 @@
<arg swt_gen="true"></arg>
<retval swt_gen="true"></retval>
</method>
+ <method selector="setUsesFontPanel:" swt_gen="true">
+ <arg swt_gen="true"></arg>
+ <retval swt_gen="true"></retval>
+ </method>
<method selector="shouldChangeTextInRange:replacementString:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
<arg swt_gen="true"></arg>
<arg swt_gen="true"></arg>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
index 77d01bd..bf6c1ef 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -85,6 +85,10 @@ public void setSelectedTextAttributes(NSDictionary attributeDictionary) {
OS.objc_msgSend(this.id, OS.sel_setSelectedTextAttributes_, attributeDictionary != null ? attributeDictionary.id : 0);
}
+public void setUsesFontPanel(boolean flag) {
+ OS.objc_msgSend(this.id, OS.sel_setUsesFontPanel_, flag);
+}
+
public boolean shouldChangeTextInRange(NSRange affectedCharRange, NSString replacementString) {
return OS.objc_msgSend_bool(this.id, OS.sel_shouldChangeTextInRange_replacementString_, affectedCharRange, replacementString != null ? replacementString.id : 0);
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
index de69735..336b760 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
@@ -1787,6 +1787,7 @@ public static final int /*long*/ sel_setUIDelegate_ = sel_registerName("setUIDel
public static final int /*long*/ sel_setURL_ = sel_registerName("setURL:");
public static final int /*long*/ sel_setUpPrintOperationDefaultValues = sel_registerName("setUpPrintOperationDefaultValues");
public static final int /*long*/ sel_setUsesAlternatingRowBackgroundColors_ = sel_registerName("setUsesAlternatingRowBackgroundColors:");
+public static final int /*long*/ sel_setUsesFontPanel_ = sel_registerName("setUsesFontPanel:");
public static final int /*long*/ sel_setUsesScreenFonts_ = sel_registerName("setUsesScreenFonts:");
public static final int /*long*/ sel_setUsesThreadedAnimation_ = sel_registerName("setUsesThreadedAnimation:");
public static final int /*long*/ sel_setValue_forHTTPHeaderField_ = sel_registerName("setValue:forHTTPHeaderField:");
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java
index 8c1556a..028e659 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java
@@ -22,7 +22,7 @@ public class Library {
/**
* SWT Minor version number (must be in the range 0..999)
*/
- static int MINOR_VERSION = 650;
+ static int MINOR_VERSION = 655;
/**
* SWT revision number (must be >= 0)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java
index a66c81e..b1586d6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java
@@ -24,7 +24,7 @@ public class Library {
/**
* SWT Minor version number (must be in the range 0..999)
*/
- static int MINOR_VERSION = 650;
+ static int MINOR_VERSION = 655;
/**
* SWT revision number (must be >= 0)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
index 9363bf1..90076c4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
@@ -1893,26 +1893,26 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(_1XGetSelectionOwner)
#ifndef NO__1XGetWindowProperty
JNIEXPORT jintLong JNICALL OS_NATIVE(_1XGetWindowProperty)
- (JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jlong arg3, jlong arg4, jboolean arg5, jintLong arg6, jintLongArray arg7, jintLongArray arg8, jlongArray arg9, jlongArray arg10, jintLongArray arg11)
+ (JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jint arg3, jint arg4, jboolean arg5, jintLong arg6, jintLongArray arg7, jintArray arg8, jintArray arg9, jintArray arg10, jintLongArray arg11)
{
jintLong *lparg7=NULL;
- jintLong *lparg8=NULL;
- jlong *lparg9=NULL;
- jlong *lparg10=NULL;
+ jint *lparg8=NULL;
+ jint *lparg9=NULL;
+ jint *lparg10=NULL;
jintLong *lparg11=NULL;
jintLong rc = 0;
OS_NATIVE_ENTER(env, that, _1XGetWindowProperty_FUNC);
if (arg7) if ((lparg7 = (*env)->GetIntLongArrayElements(env, arg7, NULL)) == NULL) goto fail;
- if (arg8) if ((lparg8 = (*env)->GetIntLongArrayElements(env, arg8, NULL)) == NULL) goto fail;
- if (arg9) if ((lparg9 = (*env)->GetLongArrayElements(env, arg9, NULL)) == NULL) goto fail;
- if (arg10) if ((lparg10 = (*env)->GetLongArrayElements(env, arg10, NULL)) == NULL) goto fail;
+ if (arg8) if ((lparg8 = (*env)->GetIntArrayElements(env, arg8, NULL)) == NULL) goto fail;
+ if (arg9) if ((lparg9 = (*env)->GetIntArrayElements(env, arg9, NULL)) == NULL) goto fail;
+ if (arg10) if ((lparg10 = (*env)->GetIntArrayElements(env, arg10, NULL)) == NULL) goto fail;
if (arg11) if ((lparg11 = (*env)->GetIntLongArrayElements(env, arg11, NULL)) == NULL) goto fail;
rc = (jintLong)XGetWindowProperty((Display *)arg0, (Window)arg1, (Atom)arg2, arg3, arg4, arg5, (Atom)arg6, (Atom*)lparg7, (int *)lparg8, (unsigned long *)lparg9, (unsigned long *)lparg10, (unsigned char **)lparg11);
fail:
if (arg11 && lparg11) (*env)->ReleaseIntLongArrayElements(env, arg11, lparg11, 0);
- if (arg10 && lparg10) (*env)->ReleaseLongArrayElements(env, arg10, lparg10, 0);
- if (arg9 && lparg9) (*env)->ReleaseLongArrayElements(env, arg9, lparg9, 0);
- if (arg8 && lparg8) (*env)->ReleaseIntLongArrayElements(env, arg8, lparg8, 0);
+ if (arg10 && lparg10) (*env)->ReleaseIntArrayElements(env, arg10, lparg10, 0);
+ if (arg9 && lparg9) (*env)->ReleaseIntArrayElements(env, arg9, lparg9, 0);
+ if (arg8 && lparg8) (*env)->ReleaseIntArrayElements(env, arg8, lparg8, 0);
if (arg7 && lparg7) (*env)->ReleaseIntLongArrayElements(env, arg7, lparg7, 0);
OS_NATIVE_EXIT(env, that, _1XGetWindowProperty_FUNC);
return rc;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c
index 216645e..5d757b0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c
@@ -35,6 +35,25 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(GDK_1WINDOWING_1X11)
}
#endif
+#ifndef NO_pangoLayoutNewProc_1CALLBACK
+static jintLong superPangoLayoutNewProc;
+static PangoLayout * pangoLayoutNewProc (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
+ PangoLayout* layout = ((PangoLayout * (*)(GType, guint, GObjectConstructParam *))superPangoLayoutNewProc)(type, n_construct_properties, construct_properties);
+ pango_layout_set_auto_dir (layout, 0);
+ return layout;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(pangoLayoutNewProc_1CALLBACK)
+ (JNIEnv *env, jclass that, jintLong arg0)
+{
+ jintLong rc = 0;
+ OS_NATIVE_ENTER(env, that, pangoLayoutNewProc_1CALLBACK_FUNC);
+ superPangoLayoutNewProc = arg0;
+ rc = (jintLong)pangoLayoutNewProc;
+ OS_NATIVE_EXIT(env, that, pangoLayoutNewProc_1CALLBACK_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO__1gtk_1file_1chooser_1dialog_1new
JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1file_1chooser_1dialog_1new)
(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jint arg2, jintLong arg3, jint arg4, jintLong arg5, jint arg6, jintLong arg7)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
index 6247415..7f522de 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
@@ -18,8 +18,8 @@
#ifdef NATIVE_STATS
-int OS_nativeFunctionCount = 1365;
-int OS_nativeFunctionCallCount[1365];
+int OS_nativeFunctionCount = 1366;
+int OS_nativeFunctionCallCount[1366];
char * OS_nativeFunctionNames[] = {
#ifndef JNI64
"Call__IIII",
@@ -1753,6 +1753,7 @@ char * OS_nativeFunctionNames[] = {
#else
"memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2JJ",
#endif
+ "pangoLayoutNewProc_1CALLBACK",
"realpath",
};
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
index ed45486..aa4c4d3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
@@ -1761,5 +1761,6 @@ typedef enum {
#else
memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2JJ_FUNC,
#endif
+ pangoLayoutNewProc_1CALLBACK_FUNC,
realpath_FUNC,
} OS_FUNCS;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index c9dd340..7bdd8a6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -885,9 +885,8 @@ public static final int /*long*/ XGetSelectionOwner(int /*long*/ display, int /*
* @param bytes_after_return cast=(unsigned long *)
* @param prop_return cast=(unsigned char **)
*/
-public static final native int /*long*/ _XGetWindowProperty(int /*long*/ display, int /*long*/ window, int /*long*/ property, long offset, long length, boolean delete, int /*long*/ req_type, int /*long*/ [] actual_type_return, int /*long*/ [] actual_format_return , long[] nitems_return, long[] bytes_after_return, int /*long*/ [] prop_return);
-public static final int /*long*/ XGetWindowProperty(
- int /*long*/ display, int /*long*/ window, int /*long*/ property, long offset, long length, boolean delete, int /*long*/ req_type, int /*long*/ [] actual_type_return, int /*long*/ [] actual_format_return, long[] nitems_return, long[] bytes_after_return, int /*long*/ [] prop_return) {
+public static final native int /*long*/ _XGetWindowProperty(int /*long*/ display, int /*long*/ window, int /*long*/ property, int offset, int length, boolean delete, int /*long*/ req_type, int /*long*/ [] actual_type_return, int [] actual_format_return , int[] nitems_return, int[] bytes_after_return, int /*long*/ [] prop_return);
+public static final int /*long*/ XGetWindowProperty(int /*long*/ display, int /*long*/ window, int /*long*/ property, int offset, int length, boolean delete, int /*long*/ req_type, int /*long*/ [] actual_type_return, int [] actual_format_return, int[] nitems_return, int[] bytes_after_return, int /*long*/ [] prop_return) {
lock.lock();
try {
return _XGetWindowProperty(display, window, property, offset, length, delete, req_type, actual_type_return, actual_format_return , nitems_return, bytes_after_return, prop_return);
@@ -1391,6 +1390,12 @@ public static final int /*long*/ XRenderFindVisualFormat(int /*long*/ display, i
}
}
+/** Custom callbacks */
+
+/** @method flags=no_gen */
+public static final native int /*long*/ pangoLayoutNewProc_CALLBACK(int /*long*/ func);
+
+
/** Natives */
public static final native int Call (int /*long*/ func, int /*long*/ arg0, int arg1, int arg2);
public static final native long Call (int /*long*/ func, int /*long*/ arg0, int arg1, long arg2);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak
index 3de935a..57a50f8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak
@@ -39,7 +39,7 @@ CDE_LIBS = -G -L$(CDE_HOME)/lib -L$(CDE_HOME)/lib/hpux32 -lDtSvc
AWT_PREFIX = swt-awt
AWT_LIB = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
AWT_OBJS = swt_awt.o
-AWT_LIBS = -G -L/usr/lib -lX11 -lc -L$(AWT_HOME) -ljawt
+AWT_LIBS = -G -L/usr/lib -lX11 -lc -L$(AWT_HOME) -L$(AWT_HOME)/server -ljawt
# Uncomment for Native Stats tool
#NATIVE_STATS = -DNATIVE_STATS
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java
index 5a7ded0..f785acb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java
@@ -120,7 +120,7 @@ public class OS extends C {
}
/* Make the process DPI aware for Windows Vista */
- if (OS.WIN32_VERSION >= OS.VERSION (6, 0)) OS.SetProcessDPIAware ();
+ if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) OS.SetProcessDPIAware ();
/* Get the DBCS flag */
boolean dbcsEnabled = OS.GetSystemMetrics (SM_DBCSENABLED) != 0;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
index 1d3f806..1244c84 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
@@ -571,7 +571,7 @@ void addEventHandlers (boolean top) {
execute (buffer.toString ());
buffer = new StringBuffer ("window.SWTmousehandler = function SWTmousehandler(e) {"); //$NON-NLS-1$
- buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.screenX, e.screenY, e.detail, e.button, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey, e.relatedTarget != null);} catch (e) {}};"); //$NON-NLS-1$
+ buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.screenX, e.screenY, e.detail, e.button + 1, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey, e.relatedTarget != null);} catch (e) {}};"); //$NON-NLS-1$
buffer.append ("document.addEventListener('mousedown', SWTmousehandler, true);"); //$NON-NLS-1$
buffer.append ("document.addEventListener('mouseup', SWTmousehandler, true);"); //$NON-NLS-1$
buffer.append ("document.addEventListener('mousemove', SWTmousehandler, true);"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
index cf64bd5..d9a430c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
@@ -155,10 +155,10 @@ int callPaintEventHandler (int control, int damageRgn, int visibleRgn, int theEv
int [] context = null;
if ((style & SWT.ARROW) != 0) {
boolean invert = false;
- if (OS.VERSION < 0x1050) {
- invert = (style & SWT.UP) != 0;
- } else {
+ if (OS.VERSION == 0x1050) {
invert = (style & SWT.UP) != 0 || (style & SWT.LEFT) != 0;
+ } else {
+ invert = (style & SWT.UP) != 0;
}
if (invert) {
context = new int [1];
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java
index c5d5c65..88f6c4d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java
@@ -595,6 +595,13 @@ int kEventMouseDown (int nextHandler, int theEvent, int userData) {
int bits = SWT.ON_TOP | SWT.NO_FOCUS;
if ((shell.style & bits) == bits) return OS.noErr;
}
+ if ((style & SWT.NO_FOCUS) == 0 && hooksKeys ()) {
+ short [] button = new short [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamMouseButton, OS.typeMouseButton, null, 2, null, button);
+ if (button [0] == 1) {
+ if (getChildrenCount() == 0) setFocus ();
+ }
+ }
}
return result;
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
index c06d8de..09b794a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
@@ -79,6 +79,7 @@ public abstract class Control extends Widget implements Drawable {
Accessible accessible;
static final String RESET_VISIBLE_REGION = "org.eclipse.swt.internal.resetVisibleRegion"; //$NON-NLS-1$
+ static final String DRAG_STARTED = "org.eclipse.swt.internal.dragStarted"; //$NON-NLS-1$
Control () {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java
index 4a4b280..6ffb960 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java
@@ -35,6 +35,7 @@ import org.eclipse.swt.*;
* @noextend This class is not intended to be subclassed by clients.
*/
public class DirectoryDialog extends Dialog {
+ int dialog;
String message = "", filterPath = "";
/**
@@ -163,9 +164,11 @@ public String open () {
}
}
Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+ dialog = outDialog[0];
display.setModalDialog(this);
OS.NavDialogRun (outDialog [0]);
display.setModalDialog(null);
+ dialog = 0;
if (OS.NavDialogGetUserAction (outDialog [0]) == OS.kNavUserActionChoose) {
NavReplyRecord record = new NavReplyRecord ();
OS.NavDialogGetReply (outDialog [0], record);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java
index 552e27f..6a92ef5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java
@@ -401,6 +401,14 @@ int appleEventProc (int nextHandler, int theEvent, int userData) {
switch (eventClass) {
case OS.kEventClassApplication:
switch (eventKind) {
+ case OS.kEventAppDeactivated: {
+ Shell [] shells = getShells ();
+ for (int i = 0; i < shells.length; i++) {
+ Shell shell = shells [i];
+ if (shell.active && !shell.isDisposed ()) shell.kEventWindowDeactivated ();
+ }
+ break;
+ }
case OS.kEventAppAvailableWindowBoundsChanged: {
/* Reset the dock image in case the dock has been restarted */
if (dockImage != 0) {
@@ -2297,6 +2305,7 @@ void initializeCallbacks () {
};
OS.InstallEventHandler (appTarget, mouseProc, mask2.length / 2, mask2, 0, null);
int [] mask3 = new int[] {
+ OS.kEventClassApplication, OS.kEventAppDeactivated,
OS.kEventClassApplication, OS.kEventAppAvailableWindowBoundsChanged,
OS.kEventClassAppleEvent, OS.kEventAppleEvent,
};
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java
index 9dfd562..b3d4ee6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java
@@ -37,6 +37,7 @@ import org.eclipse.swt.internal.carbon.*;
* @noextend This class is not intended to be subclassed by clients.
*/
public class FileDialog extends Dialog {
+ int dialog;
String [] filterNames = new String [0];
String [] filterExtensions = new String [0];
String [] fileNames = new String[0];
@@ -362,9 +363,11 @@ public String open () {
OS.NavCustomControl (outDialog [0], OS.kNavCtlSelectCustomType, spec);
}
Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+ dialog = outDialog[0];
display.setModalDialog(this);
OS.NavDialogRun (outDialog [0]);
display.setModalDialog(null);
+ dialog = 0;
int action = OS.NavDialogGetUserAction (outDialog [0]);
switch (action) {
case OS.kNavUserActionOpen:
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java
index 6653f8c..49bff9f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java
@@ -590,20 +590,16 @@ void createHandle () {
if (handle == 0) error (SWT.ERROR_NO_HANDLES);
if (OS.IsWindowVisible (shellHandle)) state &= ~HIDDEN;
}
+ if ((style & SWT.RESIZE) != 0) {
+ int [] growBox = new int [1];
+ OS.HIViewFindByID (OS.HIViewGetRoot (shellHandle), OS.kHIViewWindowGrowBoxID(), growBox);
+ if (growBox[0] != 0) OS.HIGrowBoxViewSetTransparent(growBox[0], true);
+ }
int [] outGroup = new int [1];
- OS.CreateWindowGroup (OS.kWindowGroupAttrHideOnCollapse, outGroup);
+ OS.CreateWindowGroup (OS.kWindowGroupAttrHideOnCollapse | OS.kWindowGroupAttrSelectAsLayer, outGroup);
if (outGroup [0] == 0) error (SWT.ERROR_NO_HANDLES);
windowGroup = outGroup [0];
- int parentGroup;
- if ((style & SWT.ON_TOP) != 0) {
- parentGroup = OS.GetWindowGroupOfClass (OS.kFloatingWindowClass);
- } else {
- if (parent != null) {
- parentGroup = parent.getShell ().windowGroup;
- } else {
- parentGroup = OS.GetWindowGroupOfClass (OS.kDocumentWindowClass);
- }
- }
+ int parentGroup = getParentGroup ();
OS.SetWindowGroup (shellHandle, parentGroup);
OS.SetWindowGroupParent (windowGroup, parentGroup);
OS.SetWindowGroupOwner (windowGroup, shellHandle);
@@ -636,6 +632,7 @@ void deregister () {
}
void destroyWidget () {
+ setWindowModal (display.getModalDialog (), false, true);
int theWindow = shellHandle;
/*
* Bug in the Macintosh. Under certain circumstances, yet to
@@ -905,6 +902,17 @@ public boolean getModified () {
return OS.IsWindowModified (shellHandle);
}
+int getParentGroup () {
+ if ((style & SWT.ON_TOP) != 0) {
+ return OS.GetWindowGroupOfClass (OS.kUtilityWindowClass);
+ } else {
+ if (parent != null) {
+ return parent.getShell ().windowGroup;
+ } else {
+ return OS.GetWindowGroupOfClass (OS.kDocumentWindowClass);
+ }
+ }
+}
float [] getParentBackground () {
return null;
@@ -1063,6 +1071,11 @@ int kEventWindowActivated (int nextHandler, int theEvent, int userData) {
OS.GetWindowActivationScope (shellHandle, outScope);
if (outScope [0] == OS.kWindowActivationScopeNone) return result;
if (!active) {
+ Shell[] shells = display.getShells ();
+ for (int i = 0; i < shells.length; i++) {
+ Shell shell = shells [i];
+ if (shell.active && !shell.isDisposed ()) shell.kEventWindowDeactivated ();
+ }
active = true;
deferDispose = true;
Display display = this.display;
@@ -1148,15 +1161,20 @@ int kEventWindowCollapsing (int nextHandler, int theEvent, int userData) {
int kEventWindowDeactivated (int nextHandler, int theEvent, int userData) {
int result = super.kEventWindowDeactivated (nextHandler, theEvent, userData);
if (result == OS.noErr) return result;
+ kEventWindowDeactivated ();
+ return result;
+}
+
+void kEventWindowDeactivated () {
if (active) {
active = false;
deferDispose = true;
Display display = this.display;
display.activeShell = this;
sendEvent (SWT.Deactivate);
- if (isDisposed ()) return result;
+ if (isDisposed ()) return;
setActiveControl (null);
- if (isDisposed ()) return result;
+ if (isDisposed ()) return;
display.activeShell = null;
saveFocus ();
if (savedFocus != null) {
@@ -1174,7 +1192,6 @@ int kEventWindowDeactivated (int nextHandler, int theEvent, int userData) {
display.setMenuBar (null);
deferDispose = false;
}
- return result;
}
int kEventWindowDrawContent (int nextHandler, int theEvent, int userData) {
@@ -1677,6 +1694,11 @@ public void setFullScreen (boolean fullScreen) {
}
OS.ChangeWindowAttributes (shellHandle, attributes, OS.kWindowNoTitleBarAttribute);
OS.SetSystemUIMode (OS.kUIModeNormal, 0);
+ if ((style & SWT.RESIZE) != 0) {
+ int [] growBox = new int [1];
+ OS.HIViewFindByID (OS.HIViewGetRoot (shellHandle), OS.kHIViewWindowGrowBoxID(), growBox);
+ if (growBox[0] != 0) OS.HIGrowBoxViewSetTransparent(growBox[0], true);
+ }
if (maximized) {
setMaximized (true);
} else {
@@ -1904,6 +1926,33 @@ public void setVisible (boolean visible) {
setWindowVisible (visible);
}
+void setWindowModal (Dialog dialog, boolean modal, boolean destroy) {
+ if (dialog == null) return;
+ if ((style & (SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL | SWT.PRIMARY_MODAL)) == 0) return;
+ if (isDisposed()) return;
+ /*
+ * Bug in Carbon. For some reason, when a modal shell is opened while a file dialog is showing, neither
+ * window can be dismissed. The fix is to temporarily change the modality of the file dialog and put the
+ * modal shell in the same group of the file dialog.
+ */
+ int dialogHandle = 0;
+ if (dialog instanceof FileDialog) dialogHandle = ((FileDialog)dialog).dialog;
+ if (dialog instanceof DirectoryDialog) dialogHandle = ((DirectoryDialog)dialog).dialog;
+ if (dialogHandle == 0) return;
+ if (modal) {
+ OS.SetWindowModality (OS.NavDialogGetWindow (dialogHandle), OS.kWindowModalityNone, 0);
+ int windowClass = (style & SWT.TITLE) != 0 ? OS.kMovableModalWindowClass : OS.kModalWindowClass;
+ OS.SetWindowGroup (shellHandle, OS.GetWindowGroupOfClass (windowClass));
+ OS.SelectWindow (shellHandle);
+ } else {
+ if (!destroy) {
+ int parentGroup = getParentGroup ();
+ OS.SetWindowGroup (shellHandle, parentGroup);
+ }
+ OS.SetWindowModality (OS.NavDialogGetWindow (dialogHandle), OS.kWindowModalityAppModal, 0);
+ }
+}
+
void setWindowVisible (boolean visible) {
if (OS.IsWindowVisible (shellHandle) == visible) return;
if (visible) {
@@ -1923,6 +1972,7 @@ void setWindowVisible (boolean visible) {
OS.SetWindowModality (shellHandle, inModalKind, inUnavailableWindow);
if (inUnavailableWindow != 0) OS.CollapseWindow (inUnavailableWindow, false);
}
+ setWindowModal(display.getModalDialog(), true, false);
int topHandle = topHandle ();
OS.SetControlVisibility (topHandle, true, false);
int [] scope = new int [1];
@@ -1975,6 +2025,7 @@ void setWindowVisible (boolean visible) {
}
}
} else {
+ setWindowModal(display.getModalDialog(), false, false);
/*
* Bug in the Macintosh. Under certain circumstances, yet to
* be determined, calling HideWindow() and then DisposeWindow()
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java
index ee0f9b5..d4b5832 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java
@@ -2153,6 +2153,25 @@ int itemNotificationProc (int browser, int id, int message) {
}
return OS.noErr;
}
+
+ /*
+ * The items in the databrowser lose their selection when we
+ * drag them (when we call OS.TrackDrag() in DragSource.drag()).
+ * We get kDataBrowserItemDeselected notification message
+ * for each of the items. The workaround is to select the
+ * deselected items in this case. DRAG_STARTED is set/unset
+ * before/after the call to OS.TrackDrag().
+ *
+ * This doesn't happen for Table with SWT.SINGLE style because
+ * we have set the OS.kDataBrowserNeverEmptySelectionSet flag.
+ */
+ if (message == OS.kDataBrowserItemDeselected && (style & SWT.MULTI) != 0 && getData(DRAG_STARTED) != null) {
+ ignoreSelect = true;
+ OS.SetDataBrowserSelectedItems (handle, 1, new int[] {id}, OS.kDataBrowserItemsAdd);
+ ignoreSelect = false;
+ return OS.noErr;
+ }
+
int index = getIndex (id);
if (!(0 <= index && index < items.length)) return OS.noErr;
switch (message) {
@@ -2189,6 +2208,8 @@ int itemNotificationProc (int browser, int id, int message) {
selected = true;
} else {
selected = first [0] == last [0];
+ index = getIndex (last [0]);
+ if (0 <= index && index < items.length) item = _getItem (index);
}
}
} else {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java
index 4ea541e..b499f4e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java
@@ -2312,6 +2312,25 @@ int itemNotificationProc (int browser, int id, int message) {
}
return OS.noErr;
}
+
+ /*
+ * The items in the databrowser lose their selection when we
+ * drag them (when we call OS.TrackDrag() in DragSource.drag()).
+ * We get kDataBrowserItemDeselected notification message
+ * for each of the items. The workaround is to select the
+ * deselected items in this case. DRAG_STARTED is set/unset
+ * before/after the call to OS.TrackDrag().
+ *
+ * This doesn't happen for Tree with SWT.SINGLE style because
+ * we have set the OS.kDataBrowserNeverEmptySelectionSet flag.
+ */
+ if (message == OS.kDataBrowserItemDeselected && (style & SWT.MULTI) != 0 && getData(DRAG_STARTED) != null) {
+ ignoreSelect = true;
+ OS.SetDataBrowserSelectedItems (handle, 1, new int[] {id}, OS.kDataBrowserItemsAdd);
+ ignoreSelect = false;
+ return OS.noErr;
+ }
+
switch (message) {
case OS.kDataBrowserItemSelected:
savedAnchor = 0;
@@ -2329,6 +2348,7 @@ int itemNotificationProc (int browser, int id, int message) {
case OS.kDataBrowserItemDeselected: {
wasSelected = true;
if (ignoreSelect) break;
+ int selectedId = id;
int [] first = new int [1], last = new int [1];
OS.GetDataBrowserSelectionAnchor (handle, first, last);
boolean selected = false;
@@ -2345,6 +2365,7 @@ int itemNotificationProc (int browser, int id, int message) {
selected = true;
} else {
selected = first [0] == last [0];
+ if (last [0] != 0) selectedId = last [0];
}
}
} else {
@@ -2354,7 +2375,7 @@ int itemNotificationProc (int browser, int id, int message) {
anchorFirst = first [0];
anchorLast = last [0];
Event event = new Event ();
- event.item = _getItem (id, true);
+ event.item = _getItem (selectedId, true);
sendSelectionEvent (SWT.Selection, event, false);
}
break;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java
index 631dfb3..f44ac49 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java
@@ -405,19 +405,28 @@ void copyToClipboard (char [] chars) {
int cfstring = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, chars, chars.length);
if (cfstring == 0) return;
byte[] buffer = null;
+
+ // Put a Unicode string and a string in the current encoding on the clipboard.
try {
CFRange range = new CFRange();
range.length = chars.length;
int[] size = new int[1];
- int numChars = OS.CFStringGetBytes(cfstring, range, OS.kCFStringEncodingUnicode, (byte)'?', true, null, 0, size);
+ int numChars = OS.CFStringGetBytes(cfstring, range, OS.kCFStringEncodingUnicode, (byte)'?', false, null, 0, size);
+ if (numChars == 0) return;
+ buffer = new byte[size[0]];
+ numChars = OS.CFStringGetBytes(cfstring, range, OS.kCFStringEncodingUnicode, (byte)'?', false, buffer, size [0], size);
+ if (numChars == 0) return;
+ OS.PutScrapFlavor (scrap [0], OS.kScrapFlavorTypeUnicode, 0, buffer.length, buffer);
+
+ numChars = OS.CFStringGetBytes(cfstring, range, OS.CFStringGetSystemEncoding(), (byte)'?', false, null, 0, size);
if (numChars == 0) return;
buffer = new byte[size[0]];
- numChars = OS.CFStringGetBytes(cfstring, range, OS.kCFStringEncodingUnicode, (byte)'?', true, buffer, size [0], size);
+ numChars = OS.CFStringGetBytes(cfstring, range, OS.CFStringGetSystemEncoding(), (byte)'?', false, buffer, size [0], size);
if (numChars == 0) return;
+ OS.PutScrapFlavor (scrap [0], OS.kScrapFlavorTypeText, 0, buffer.length, buffer);
} finally {
OS.CFRelease(cfstring);
}
- OS.PutScrapFlavor (scrap [0], OS.kScrapFlavorTypeUTF16External, 0, buffer.length, buffer);
}
int createCIcon (Image image) {
@@ -724,12 +733,12 @@ String getClipboardText () {
int [] scrap = new int [1];
OS.GetCurrentScrap (scrap);
int [] size = new int [1];
- if (OS.GetScrapFlavorSize (scrap [0], OS.kScrapFlavorTypeUTF16External, size) == OS.noErr) {
+ if (OS.GetScrapFlavorSize (scrap [0], OS.kScrapFlavorTypeUnicode, size) == OS.noErr) {
if (size [0] != 0) {
byte [] buffer = new byte [size [0]];
- if (OS.GetScrapFlavorData (scrap [0], OS.kScrapFlavorTypeUTF16External, size, buffer) == OS.noErr) {
+ if (OS.GetScrapFlavorData (scrap [0], OS.kScrapFlavorTypeUnicode, size, buffer) == OS.noErr) {
int encoding = OS.kCFStringEncodingUnicode;
- int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, true);
+ int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
if (cfstring != 0) {
int length = OS.CFStringGetLength(cfstring);
if (length != 0) {
@@ -748,7 +757,7 @@ String getClipboardText () {
byte [] buffer = new byte [size [0]];
if (OS.GetScrapFlavorData (scrap [0], OS.kScrapFlavorTypeText, size, buffer) == OS.noErr) {
int encoding = OS.CFStringGetSystemEncoding();
- int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, true);
+ int cfstring = OS.CFStringCreateWithBytes(OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
if (cfstring != 0) {
int length = OS.CFStringGetLength(cfstring);
if (length != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
index a6f8114..cd1f019 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
@@ -136,7 +136,7 @@ int /*long*/ accessibleHandle() {
}
int /*long*/ accessibilityActionDescription(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
NSString actionName = new NSString(arg0);
id returnValue = accessible.internal_accessibilityActionDescription(actionName, ACC.CHILDID_SELF);
if (returnValue != null) return returnValue.id;
@@ -145,7 +145,7 @@ int /*long*/ accessibilityActionDescription(int /*long*/ id, int /*long*/ sel, i
}
int /*long*/ accessibilityActionNames(int /*long*/ id, int /*long*/ sel) {
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
NSArray returnValue = accessible.internal_accessibilityActionNames(ACC.CHILDID_SELF);
if (returnValue != null) return returnValue.id;
}
@@ -157,7 +157,7 @@ int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
int /*long*/ returnValue = 0;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
// See if the accessible is defining the attribute set for the control.
id value = accessible.internal_accessibilityAttributeNames(ACC.CHILDID_SELF);
returnValue = (value != null ? value.id : 0);
@@ -175,9 +175,19 @@ int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
return returnValue;
}
+/**
+ * @param id NSView/NSCell that makes up this control. Could be the view itself.
+ * @return true if id is something whose accessible properties can be augmented
+ * or overridden by the SWT Accessible. false if the Cocoa defaults for the control should
+ * be used.
+ */
+boolean handleIsAccessible(int /*long*/ id) {
+ return id == accessibleHandle();
+}
+
int /*long*/ accessibilityParameterizedAttributeNames(int /*long*/ id, int /*long*/ sel) {
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
NSArray returnValue = accessible.internal_accessibilityParameterizedAttributeNames(ACC.CHILDID_SELF);
if (returnValue != null) return returnValue.id;
}
@@ -186,7 +196,7 @@ int /*long*/ accessibilityParameterizedAttributeNames(int /*long*/ id, int /*lon
}
void accessibilityPerformAction(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
NSString action = new NSString(arg0);
if (accessible.internal_accessibilityPerformAction(action, ACC.CHILDID_SELF)) return;
}
@@ -196,7 +206,7 @@ void accessibilityPerformAction(int /*long*/ id, int /*long*/ sel, int /*long*/
int /*long*/ accessibilityFocusedUIElement(int /*long*/ id, int /*long*/ sel) {
id returnValue = null;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
returnValue = accessible.internal_accessibilityFocusedUIElement(ACC.CHILDID_SELF);
}
@@ -211,7 +221,7 @@ int /*long*/ accessibilityFocusedUIElement(int /*long*/ id, int /*long*/ sel) {
int /*long*/ accessibilityHitTest(int /*long*/ id, int /*long*/ sel, NSPoint point) {
id returnValue = null;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
returnValue = accessible.internal_accessibilityHitTest(point, ACC.CHILDID_SELF);
}
@@ -228,7 +238,7 @@ int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int
int /*long*/ returnValue = 0;
id returnObject = null;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
returnObject = accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF);
}
@@ -236,6 +246,15 @@ int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int
// superclass handle it.
if (returnObject == null) {
returnValue = super.accessibilityAttributeValue(id, sel, arg0);
+
+ // Feature in Cocoa: SWT doesn't use setToolTip for tooltip support, so if the
+ // help attribute was requested return toolTipText.
+ if (returnObject == null) {
+ if (attribute.isEqualToString(OS.NSAccessibilityHelpAttribute)) {
+ if (toolTipText != null) returnValue = NSString.stringWith(toolTipText).id;
+ }
+ }
+
} else {
returnValue = returnObject.id;
}
@@ -248,7 +267,7 @@ int /*long*/ accessibilityAttributeValue_forParameter(int /*long*/ id, int /*lon
id returnValue = null;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
id parameter = new id(arg1);
returnValue = accessible.internal_accessibilityAttributeValue_forParameter(attribute, parameter, ACC.CHILDID_SELF);
}
@@ -263,7 +282,7 @@ int /*long*/ accessibilityAttributeValue_forParameter(int /*long*/ id, int /*lon
boolean accessibilityIsAttributeSettable(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
boolean returnValue = false;
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
NSString attribute = new NSString (arg0);
returnValue = accessible.internal_accessibilityIsAttributeSettable(attribute, ACC.CHILDID_SELF);
}
@@ -274,7 +293,7 @@ boolean accessibilityIsAttributeSettable(int /*long*/ id, int /*long*/ sel, int
}
void accessibilitySetValue_forAttribute(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
- if (id == accessibleHandle() && accessible != null) {
+ if (handleIsAccessible(id) && accessible != null) {
id value = new id(arg0);
NSString attribute = new NSString(arg1);
accessible.internal_accessibilitySetValue_forAttribute(value, attribute, ACC.CHILDID_SELF);
@@ -1248,7 +1267,6 @@ void flagsChanged (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
if (mask != 0) {
s.keyInputHappened = true;
int type = (mask & modifiers) != 0 ? SWT.KeyDown : SWT.KeyUp;
- if (type == SWT.KeyDown) s.keyInputHappened = true;
Event event = new Event();
event.keyCode = keyCode;
setLocationMask(event, nsEvent);
@@ -1792,7 +1810,7 @@ boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
if (nsEvent != null) {
int /*long*/ type = nsEvent.type ();
- if ((!s.keyInputHappened && type == OS.NSKeyDown) || type == OS.NSSystemDefined) {
+ if (type == OS.NSKeyDown || type == OS.NSSystemDefined) {
NSString str = new NSString (string);
if (str.isKindOfClass (OS.class_NSAttributedString)) {
str = new NSAttributedString (string).string ();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
index e64d3b1..8cb80d9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
@@ -42,7 +42,7 @@ public class List extends Scrollable {
NSTableColumn column;
String [] items;
int itemCount;
- boolean ignoreSelect;
+ boolean ignoreSelect, didSelect;
static int NEXT_ID;
@@ -120,11 +120,7 @@ public void add (String string) {
items = newItems;
}
items [itemCount++] = string;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
setScrollWidth(string);
}
@@ -162,11 +158,7 @@ public void add (String string, int index) {
}
System.arraycopy (items, index, items, index + 1, itemCount++ - index);
items [index] = string;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (index != itemCount) fixSelection (index, true);
setScrollWidth(string);
}
@@ -756,6 +748,24 @@ int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEve
return super.menuForEvent(id, sel, theEvent);
}
+void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+ ignoreSelect = false;
+ NSTableView widget = (NSTableView)view;
+ NSEvent nsEvent = new NSEvent(theEvent);
+ NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
+ int row = (int)/*64*/widget.rowAtPoint(pt);
+ if (row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0) {
+ if (widget.isRowSelected(row) && widget.selectedRowIndexes().count() == 1) {
+ if (0 <= row && row < itemCount) {
+ sendSelection();
+ }
+ }
+ }
+ didSelect = false;
+ super.mouseDownSuper(id, sel, theEvent);
+ didSelect = false;
+}
+
int /*long*/ numberOfRowsInTableView(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView) {
return itemCount;
}
@@ -795,11 +805,7 @@ void remove (int index, boolean fixScroll) {
if (index != itemCount - 1) fixSelection (index, false);
System.arraycopy (items, index + 1, items, index, --itemCount - index);
items [itemCount] = null;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (fixScroll) setScrollWidth();
}
@@ -904,11 +910,7 @@ public void removeAll () {
checkWidget();
items = new String [4];
itemCount = 0;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
setScrollWidth();
}
@@ -1101,6 +1103,11 @@ boolean sendKeyEvent (NSEvent nsEvent, int type) {
return result;
}
+void sendSelection () {
+ if (ignoreSelect) return;
+ sendSelectionEvent(SWT.Selection);
+}
+
void setBackgroundColor(NSColor nsColor) {
((NSTableView) view).setBackgroundColor (nsColor);
}
@@ -1412,8 +1419,13 @@ public void showSelection () {
}
void tableViewSelectionDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
- if (ignoreSelect) return;
- sendSelectionEvent (SWT.Selection);
+ if (didSelect) return;
+ sendSelection();
+}
+
+void tableViewSelectionIsChanging (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+ didSelect = true;
+ sendSelection();
}
boolean tableView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
@@ -1427,4 +1439,14 @@ int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long
return attribStr.id;
}
+void updateRowCount() {
+ NSTableView widget = (NSTableView)view;
+ setRedraw(false);
+ ignoreSelect = true;
+ widget.noteNumberOfRowsChanged ();
+ ignoreSelect = false;
+ widget.tile();
+ setRedraw(true);
+}
+
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
index 7dc68a9..dc967e6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
@@ -1967,8 +1967,25 @@ void windowSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
display.checkEnterExit (trimControl, nsEvent, false);
if (trimControl != null) trimControl.sendMouseEvent (nsEvent, type, false);
}
+
+ // Tooltip updating: Find the widget under the cursor. If it changed, clear the tooltip from
+ // the last tracked item and send a tooltip event to make it visible on the new widget.
Widget target = null;
- if (control != null) target = control.findTooltip (nsEvent.locationInWindow());
+ if (control != null) {
+ NSPoint eventPoint = nsEvent.locationInWindow();
+ if (hitView[0] != null) {
+ NSWindow eventWindow = nsEvent.window();
+
+ // If a NSMouseMoved happens on an inactive window, convert the
+ // event coordinates to the window of the target view.
+ if (eventWindow != null && eventWindow != hitView[0].window()) {
+ eventPoint = eventWindow.convertBaseToScreen(eventPoint);
+ eventPoint = hitView[0].window().convertScreenToBase(eventPoint);
+ }
+ }
+ target = control.findTooltip (eventPoint);
+ }
+
if (display.tooltipControl != control || display.tooltipTarget != target) {
Control oldControl = display.tooltipControl;
Shell oldShell = oldControl != null && !oldControl.isDisposed() ? oldControl.getShell() : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
index cbf4d1d..8476b88 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
@@ -104,6 +104,11 @@ boolean acceptsFirstResponder(int /*long*/ id, int /*long*/ sel) {
return super.acceptsFirstResponder (id, sel);
}
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+ if (id == view.id) return true;
+ return super.accessibilityIsIgnored(id, sel);
+}
+
/**
* Adds the listener to the collection of listeners who will
* be notified when the receiver's text is modified, by sending
@@ -521,6 +526,12 @@ public int getTextLimit () {
return textLimit;
}
+boolean handleIsAccessible(int /*long*/ id) {
+ // All subviews of a Spinner can have their accessible properties overridden.
+ // The top-level NSView is already ignored, so no need to test for that.
+ return true;
+}
+
boolean isEventView (int /*long*/ id) {
return true;
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
index d33bf75..8fa25d5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
@@ -605,11 +605,7 @@ void createItem (TableItem item, int index) {
}
System.arraycopy (items, index, items, index + 1, itemCount++ - index);
items [index] = item;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (index != itemCount) fixSelection (index, true);
}
@@ -844,11 +840,7 @@ void destroyItem (TableItem item) {
if (index != itemCount - 1) fixSelection (index, false);
System.arraycopy (items, index + 1, items, index, --itemCount - index);
items [itemCount] = null;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (itemCount == 0) setTableEmpty ();
}
@@ -1851,6 +1843,11 @@ boolean isTransparent() {
return true;
}
+void keyDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+ ignoreSelect = false;
+ super.keyDown(id, sel, theEvent);
+}
+
boolean isTrim (NSView view) {
if (super.isTrim (view)) return true;
return view.id == headerView.id;
@@ -1913,6 +1910,7 @@ void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
}
void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+ ignoreSelect = false;
NSTableView widget = (NSTableView)view;
NSEvent nsEvent = new NSEvent(theEvent);
NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
@@ -1923,6 +1921,14 @@ void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
Event event = new Event ();
event.item = _getItem ((int)/*64*/row);
sendSelectionEvent (SWT.Selection, event, false);
+
+ // Feature in Cocoa: This code path handles the case of an unmodified click on an already-selected row.
+ // If other rows are selected they will de-select and fire a tableViewSelectionDidChange message.
+ // To keep the order of events correct, send the selection event here and ignore the next
+ // tableViewSelectionDidChange message. We'll reset the flag when the message is received.
+ if (widget.selectedRowIndexes().count() > 1) {
+ ignoreSelect = true;
+ }
}
}
}
@@ -2022,11 +2028,7 @@ public void remove (int index) {
if (index != itemCount - 1) fixSelection (index, false);
System.arraycopy (items, index + 1, items, index, --itemCount - index);
items [itemCount] = null;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (itemCount == 0) {
setTableEmpty ();
}
@@ -2087,11 +2089,7 @@ public void remove (int start, int end) {
items [i] = null;
}
itemCount -= length;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
}
if (itemCount == 0) {
setTableEmpty ();
@@ -2136,11 +2134,7 @@ public void remove (int [] indices) {
last = index;
}
}
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
if (itemCount == 0) {
setTableEmpty ();
}
@@ -2161,11 +2155,7 @@ public void removeAll () {
if (item != null && !item.isDisposed ()) item.release (false);
}
setTableEmpty ();
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
}
/**
@@ -2480,7 +2470,6 @@ public void setItemCount (int count) {
checkWidget ();
count = Math.max (0, count);
if (count == itemCount) return;
- if (count == itemCount) return;
TableItem [] children = items;
if (count < itemCount) {
for (int index = count; index < itemCount; index ++) {
@@ -2504,11 +2493,7 @@ public void setItemCount (int count) {
children = newItems;
this.items = newItems;
this.itemCount = count;
- NSTableView widget = (NSTableView)view;
- setRedraw(false);
- widget.noteNumberOfRowsChanged ();
- widget.tile();
- setRedraw(true);
+ updateRowCount();
}
/*public*/ void setItemHeight (int itemHeight) {
@@ -3248,4 +3233,14 @@ void updateCursorRects (boolean enabled) {
if (headerView == null) return;
updateCursorRects (enabled, headerView);
}
+
+void updateRowCount() {
+ NSTableView table = (NSTableView)view;
+ setRedraw(false);
+ ignoreSelect = true;
+ table.noteNumberOfRowsChanged();
+ ignoreSelect = false;
+ table.tile();
+ setRedraw(true);
+}
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
index ca72a9b..2081a00 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
@@ -515,6 +515,7 @@ void createHandle () {
widget.setRichText (false);
widget.setDelegate(widget);
widget.setFont (display.getSystemFont ().handle);
+ widget.setUsesFontPanel(false);
view = widget;
scrollView = scrollWidget;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
index c269836..6ae08bf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
@@ -199,10 +199,16 @@ int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int
return description;
}
}
- } else if (nsAttributeName.isEqualToString (OS.NSAccessibilityTitleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityDescriptionAttribute)) {
+ } else if (nsAttributeName.isEqualToString (OS.NSAccessibilityTitleAttribute)) {
+ String accessibleText = text.length() > 0 ? text : toolTipText;
+ if (accessibleText != null) {
+ return NSString.stringWith(accessibleText).id;
+ } else {
+ return NSString.string().id;
+ }
+ } else if (nsAttributeName.isEqualToString (OS.NSAccessibilityHelpAttribute)) {
String accessibleText = toolTipText;
- if (accessibleText == null || accessibleText.equals("")) accessibleText = text;
- if (!(accessibleText == null || accessibleText.equals(""))) {
+ if (accessibleText != null) {
return NSString.stringWith(accessibleText).id;
} else {
return NSString.string().id;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
index 4b0a221..b361cce 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
@@ -1881,6 +1881,11 @@ boolean isTrim (NSView view) {
return view.id == headerView.id;
}
+void keyDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+ ignoreSelect = false;
+ super.keyDown(id, sel, theEvent);
+}
+
int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
if (id != headerView.id) {
/*
@@ -1938,6 +1943,7 @@ void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
}
void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+ ignoreSelect = false;
NSOutlineView widget = (NSOutlineView)view;
NSEvent nsEvent = new NSEvent(theEvent);
NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
@@ -1952,6 +1958,14 @@ void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
Event event = new Event ();
event.item = item;
sendSelectionEvent (SWT.Selection, event, false);
+
+ // Feature in Cocoa: This code path handles the case of an unmodified click on an already-selected row.
+ // If other rows are selected they will de-select and fire a outlineViewSelectionDidChange message.
+ // To keep the order of events correct, send the selection event here and ignore the next
+ // outlineViewSelectionDidChange message. We'll reset the flag when the message is received.
+ if (widget.selectedRowIndexes().count() > 1) {
+ ignoreSelect = true;
+ }
}
}
}
@@ -2254,7 +2268,9 @@ public void removeAll () {
itemCount = 0;
imageBounds = null;
insertItem = null;
+ ignoreSelect = true;
((NSOutlineView) view).reloadData ();
+ ignoreSelect = false;
setScrollWidth ();
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak
index 7d17db6..af8082b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak
@@ -10,5 +10,5 @@
#*******************************************************************************
maj_ver=3
-min_ver=650
-comma_ver=3,6,5,0
+min_ver=655
+comma_ver=3,6,5,5
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt
index 1d0f0e0..5a7cbe9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt
@@ -1 +1 @@
-version 3.650
\ No newline at end of file
+version 3.655
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java
index a2785ce..08c0da6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java
@@ -651,6 +651,17 @@ void createSurface() {
int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
int /*long*/ pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
byte[] line = new byte[stride];
+ int /*long*/ ptr = OS.malloc(4);
+ OS.memmove(ptr, new int[]{1}, 4);
+ OS.memmove(line, ptr, 1);
+ OS.free(ptr);
+ int oa, or, og, ob;
+ boolean bigendian = line[0] == 0;
+ if (bigendian) {
+ oa = 0; or = 1; og = 2; ob = 3;
+ } else {
+ oa = 3; or = 2; og = 1; ob = 0;
+ }
if (mask != 0 && OS.gdk_drawable_get_depth(mask) == 1) {
int /*long*/ maskPixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, width, height);
if (maskPixbuf == 0) SWT.error(SWT.ERROR_NO_HANDLES);
@@ -665,10 +676,15 @@ void createSurface() {
for (int x=0, offset1=0; x<width; x++, offset1 += 4) {
if (maskLine[x * 3] == 0) {
line[offset1 + 0] = line[offset1 + 1] = line[offset1 + 2] = line[offset1 + 3] = 0;
+ } else {
+ byte r = line[offset1 + 0];
+ byte g = line[offset1 + 1];
+ byte b = line[offset1 + 2];
+ line[offset1 + oa] = (byte)0xFF;
+ line[offset1 + or] = r;
+ line[offset1 + og] = g;
+ line[offset1 + ob] = b;
}
- byte temp = line[offset1];
- line[offset1] = line[offset1 + 2];
- line[offset1 + 2] = temp;
}
OS.memmove(offset, line, stride);
offset += stride;
@@ -680,7 +696,6 @@ void createSurface() {
for (int y=0; y<height; y++) {
OS.memmove(line, offset, stride);
for (int x=0, offset1=0; x<width; x++, offset1 += 4) {
- line[offset1+3] = (byte)alpha;
/* pre-multiplied alpha */
int r = ((line[offset1 + 0] & 0xFF) * alpha) + 128;
r = (r + (r >> 8)) >> 8;
@@ -688,9 +703,10 @@ void createSurface() {
g = (g + (g >> 8)) >> 8;
int b = ((line[offset1 + 2] & 0xFF) * alpha) + 128;
b = (b + (b >> 8)) >> 8;
- line[offset1 + 0] = (byte)b;
- line[offset1 + 1] = (byte)g;
- line[offset1 + 2] = (byte)r;
+ line[offset1 + oa] = (byte)alpha;
+ line[offset1 + or] = (byte)r;
+ line[offset1 + og] = (byte)g;
+ line[offset1 + ob] = (byte)b;
}
OS.memmove(offset, line, stride);
offset += stride;
@@ -701,7 +717,6 @@ void createSurface() {
OS.memmove (line, offset, stride);
for (int x=0, offset1=0; x<width; x++, offset1 += 4) {
int alpha = alphaData [y*w [0]+x] & 0xFF;
- line[offset1+3] = (byte)alpha;
/* pre-multiplied alpha */
int r = ((line[offset1 + 0] & 0xFF) * alpha) + 128;
r = (r + (r >> 8)) >> 8;
@@ -709,9 +724,10 @@ void createSurface() {
g = (g + (g >> 8)) >> 8;
int b = ((line[offset1 + 2] & 0xFF) * alpha) + 128;
b = (b + (b >> 8)) >> 8;
- line[offset1 + 0] = (byte)b;
- line[offset1 + 1] = (byte)g;
- line[offset1 + 2] = (byte)r;
+ line[offset1 + oa] = (byte)alpha;
+ line[offset1 + or] = (byte)r;
+ line[offset1 + og] = (byte)g;
+ line[offset1 + ob] = (byte)b;
}
OS.memmove (offset, line, stride);
offset += stride;
@@ -721,10 +737,13 @@ void createSurface() {
for (int y = 0; y < h [0]; y++) {
OS.memmove (line, offset, stride);
for (int x=0, offset1=0; x<width; x++, offset1 += 4) {
- line[offset1+3] = (byte)0xFF;
- byte temp = line[offset1];
- line[offset1] = line[offset1 + 2];
- line[offset1 + 2] = temp;
+ byte r = line[offset1 + 0];
+ byte g = line[offset1 + 1];
+ byte b = line[offset1 + 2];
+ line[offset1 + oa] = (byte)0xFF;
+ line[offset1 + or] = r;
+ line[offset1 + og] = g;
+ line[offset1 + ob] = b;
}
OS.memmove (offset, line, stride);
offset += stride;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
index d692fc3..389aa23 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
@@ -1269,6 +1269,7 @@ int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /
return 0;
}
if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
+ if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (entryHandle), -1);
String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
if (newText == null) {
OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
index 8cdb4ab..a69add3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
@@ -1107,6 +1107,7 @@ public void moveAbove (Control control) {
if (control != null) {
if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
if (parent != control.parent) return;
+ if (this == control) return;
}
setZOrder (control, true, true);
}
@@ -1136,6 +1137,7 @@ public void moveBelow (Control control) {
if (control != null) {
if (control.isDisposed ()) error(SWT.ERROR_INVALID_ARGUMENT);
if (parent != control.parent) return;
+ if (this == control) return;
}
setZOrder (control, false, true);
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index 09e289f..d8ca0ab 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -287,8 +287,7 @@ public class Display extends Device {
int lastEventTime, lastUserEventTime;
/* Pango layout constructor */
- int /*long*/ pangoLayoutNewProc, pangoLayoutNewDefaultProc;
- Callback pangoLayoutNewCallback;
+ int /*long*/ pangoLayoutNewProc;
/* Custom Resize */
double resizeLocationX, resizeLocationY;
@@ -2593,13 +2592,10 @@ void initializeCallbacks () {
void initializeSubclasses () {
if (OS.GTK_VERSION >= OS.VERSION (2, 4, 0)) {
- pangoLayoutNewCallback = new Callback (this, "pangoLayoutNewProc", 3); //$NON-NLS-1$
- pangoLayoutNewProc = pangoLayoutNewCallback.getAddress ();
- if (pangoLayoutNewProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
int /*long*/ pangoLayoutType = OS.PANGO_TYPE_LAYOUT ();
int /*long*/ pangoLayoutClass = OS.g_type_class_ref (pangoLayoutType);
- pangoLayoutNewDefaultProc = OS.G_OBJECT_CLASS_CONSTRUCTOR (pangoLayoutClass);
- OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (pangoLayoutClass, pangoLayoutNewProc);
+ pangoLayoutNewProc = OS.G_OBJECT_CLASS_CONSTRUCTOR (pangoLayoutClass);
+ OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (pangoLayoutClass, OS.pangoLayoutNewProc_CALLBACK(pangoLayoutNewProc));
OS.g_type_class_unref (pangoLayoutClass);
}
}
@@ -2954,12 +2950,6 @@ int /*long*/ mouseHoverProc (int /*long*/ handle) {
return widget.hoverProc (handle);
}
-int /*long*/ pangoLayoutNewProc (int /*long*/ type, int /*long*/ n_construct_properties, int /*long*/ construct_properties) {
- int /*long*/ layout = OS.Call (pangoLayoutNewDefaultProc, type, (int)/*64*/n_construct_properties, construct_properties);
- OS.pango_layout_set_auto_dir (layout, false);
- return layout;
-}
-
/**
* Generate a low level system event.
*
@@ -3379,11 +3369,9 @@ void releaseDisplay () {
if (OS.GTK_VERSION >= OS.VERSION (2, 4, 0)) {
int /*long*/ pangoLayoutType = OS.PANGO_TYPE_LAYOUT ();
int /*long*/ pangoLayoutClass = OS.g_type_class_ref (pangoLayoutType);
- OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (pangoLayoutClass, pangoLayoutNewDefaultProc);
+ OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (pangoLayoutClass, pangoLayoutNewProc);
OS.g_type_class_unref (pangoLayoutClass);
- pangoLayoutNewCallback.dispose ();
- pangoLayoutNewCallback = null;
- pangoLayoutNewDefaultProc = pangoLayoutNewProc = 0;
+ pangoLayoutNewProc = 0;
}
/* Release the sleep resources */
@@ -4225,15 +4213,15 @@ int /*long*/ signalProc (int /*long*/ gobject, int /*long*/ arg1, int /*long*/ u
if (atom == OS.gdk_x11_atom_to_xatom (gdkEvent.atom)) {
int /*long*/ xWindow = OS.gdk_x11_drawable_get_xid (OS.GTK_WIDGET_WINDOW( shellHandle));
int /*long*/ [] type = new int /*long*/ [1];
- int /*long*/ [] format = new int /*long*/ [1];
- long [] nitems = new long [1];
- long [] bytes_after = new long [1];
+ int [] format = new int [1];
+ int [] nitems = new int [1];
+ int [] bytes_after = new int [1];
int /*long*/ [] data = new int /*long*/ [1];
- OS.XGetWindowProperty (OS.GDK_DISPLAY (), xWindow, atom, 0l, -1l, true, OS.AnyPropertyType,
+ OS.XGetWindowProperty (OS.GDK_DISPLAY (), xWindow, atom, 0, -1, true, OS.AnyPropertyType,
type, format, nitems, bytes_after, data);
if (nitems [0] > 0) {
- byte [] buffer = new byte [(int)/*64*/nitems [0]];
+ byte [] buffer = new byte [nitems [0]];
OS.memmove(buffer, data [0], buffer.length);
OS.XFree (data [0]);
char[] chars = Converter.mbcsToWcs(null, buffer);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
index 6fcc34f..b1d93b6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
@@ -728,6 +728,7 @@ int /*long*/ filterProc (int /*long*/ xEvent, int /*long*/ gdkEvent, int /*long*
display.activeShell = this;
display.activePending = false;
sendEvent (SWT.Activate);
+ if (isDisposed ()) return 0;
if (isCustomResize ()) {
OS.gdk_window_invalidate_rect (OS.GTK_WIDGET_WINDOW (shellHandle), null, false);
}
@@ -749,6 +750,7 @@ int /*long*/ filterProc (int /*long*/ xEvent, int /*long*/ gdkEvent, int /*long*
display.activeShell = null;
display.activePending = false;
}
+ if (isDisposed ()) return 0;
if (isCustomResize ()) {
OS.gdk_window_invalidate_rect (OS.GTK_WIDGET_WINDOW (shellHandle), null, false);
}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
index c87d7cd..d8c0dd1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
@@ -647,6 +647,7 @@ int /*long*/ gtk_commit (int /*long*/ imContext, int /*long*/ text) {
int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) {
if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
+ if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (handle), -1);
String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
if (newText == null) {
OS.g_signal_stop_emission_by_name (handle, OS.delete_text);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
index 3b107ce..c62de00 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
@@ -1256,6 +1256,7 @@ int /*long*/ gtk_delete_range (int /*long*/ widget, int /*long*/ iter1, int /*lo
int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) {
if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
+ if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (handle), -1);
String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
if (newText == null) {
/* Remember the selection when the text was deleted */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java
index af29388..222fae2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java
@@ -289,9 +289,10 @@ int /*long*/ callWindowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, in
switch (msg) {
case OS.WM_SIZE: {
ignoreResize = true;
+ boolean oldLockText = lockText;
if ((style & SWT.READ_ONLY) == 0) lockText = true;
int /*long*/ result = OS.CallWindowProc (ComboProc, hwnd, msg, wParam, lParam);
- if ((style & SWT.READ_ONLY) == 0) lockText = false;
+ if ((style & SWT.READ_ONLY) == 0) lockText = oldLockText;
ignoreResize = false;
return result;
}
@@ -1722,6 +1723,7 @@ void setScrollWidth (int scrollWidth) {
* by ignoring all WM_SETTEXT messages during processing of
* CB_SETDROPPEDWIDTH.
*/
+ boolean oldLockText = lockText;
if ((style & SWT.READ_ONLY) == 0) lockText = true;
if (scroll) {
OS.SendMessage (handle, OS.CB_SETDROPPEDWIDTH, 0, 0);
@@ -1731,7 +1733,7 @@ void setScrollWidth (int scrollWidth) {
OS.SendMessage (handle, OS.CB_SETDROPPEDWIDTH, scrollWidth, 0);
OS.SendMessage (handle, OS.CB_SETHORIZONTALEXTENT, 0, 0);
}
- if ((style & SWT.READ_ONLY) == 0) lockText = false;
+ if ((style & SWT.READ_ONLY) == 0) lockText = oldLockText;
}
void setScrollWidth (TCHAR buffer, boolean grow) {
@@ -2223,9 +2225,10 @@ LRESULT WM_SIZE (int /*long*/ wParam, int /*long*/ lParam) {
* by ignoring all WM_SETTEXT messages during processing of
* WM_SIZE.
*/
+ boolean oldLockText = lockText;
if ((style & SWT.READ_ONLY) == 0) lockText = true;
LRESULT result = super.WM_SIZE (wParam, lParam);
- if ((style & SWT.READ_ONLY) == 0) lockText = false;
+ if ((style & SWT.READ_ONLY) == 0) lockText = oldLockText;
/*
* Feature in Windows. When CB_SETDROPPEDWIDTH is called with
* a width that is smaller than the current size of the combo
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
index 4469113..17e34b0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
@@ -365,6 +365,7 @@ void drawRectangles (Rectangle [] rects, boolean stippled) {
rect1.top = rect.y - bandWidth;
rect1.right = rect.x + rect.width + bandWidth * 2;
rect1.bottom = rect.y + rect.height + bandWidth * 2;
+ OS.MapWindowPoints (0, hwndOpaque, rect1, 2);
OS.RedrawWindow (hwndOpaque, rect1, 0, OS.RDW_INVALIDATE);
}
return;
@@ -910,12 +911,20 @@ int /*long*/ transparentProc (int /*long*/ hwnd, int /*long*/ msg, int /*long*/
oldBrush = OS.SelectObject (hDC, OS.GetStockObject(OS.BLACK_BRUSH));
}
Rectangle[] rects = this.rectangles;
+ RECT rect1 = new RECT ();
for (int i=0; i<rects.length; i++) {
Rectangle rect = rects [i];
- OS.PatBlt (hDC, rect.x, rect.y, rect.width, bandWidth, OS.PATCOPY);
- OS.PatBlt (hDC, rect.x, rect.y + bandWidth, bandWidth, rect.height - (bandWidth * 2), OS.PATCOPY);
- OS.PatBlt (hDC, rect.x + rect.width - bandWidth, rect.y + bandWidth, bandWidth, rect.height - (bandWidth * 2), OS.PATCOPY);
- OS.PatBlt (hDC, rect.x, rect.y + rect.height - bandWidth, rect.width, bandWidth, OS.PATCOPY);
+ rect1.left = rect.x;
+ rect1.top = rect.y;
+ rect1.right = rect.x + rect.width;
+ rect1.bottom = rect.y + rect.height;
+ OS.MapWindowPoints (0, hwndOpaque, rect1, 2);
+ int width = rect1.right - rect1.left;
+ int height = rect1.bottom - rect1.top;
+ OS.PatBlt (hDC, rect1.left, rect1.top, width, bandWidth, OS.PATCOPY);
+ OS.PatBlt (hDC, rect1.left, rect1.top + bandWidth, bandWidth, height - (bandWidth * 2), OS.PATCOPY);
+ OS.PatBlt (hDC, rect1.right - bandWidth, rect1.top + bandWidth, bandWidth, height - (bandWidth * 2), OS.PATCOPY);
+ OS.PatBlt (hDC, rect1.left, rect1.bottom - bandWidth, width, bandWidth, OS.PATCOPY);
}
OS.SelectObject (hDC, oldBrush);
if (stippled) {
diff --git a/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
index f98309d..afcbc9f 100644
--- a/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.swt; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ManifestVersion: 2
Bundle-Localization: plugin
DynamicImport-Package: org.eclipse.swt.accessibility2, org.mozilla.xpcom
diff --git a/eclipse/plugins/org.eclipse.swt/build.xml b/eclipse/plugins/org.eclipse.swt/build.xml
index c01fe7a..ccd2830 100644
--- a/eclipse/plugins/org.eclipse.swt/build.xml
+++ b/eclipse/plugins/org.eclipse.swt/build.xml
@@ -15,7 +15,7 @@
<target name="init">
<property name="plugin" value="org.eclipse.swt" />
- <property name="version.suffix" value="3.5.0" />
+ <property name="version.suffix" value="3.6.1" />
<property name="full.name" value="${plugin}_${version.suffix}" />
<property name="temp.folder" value="${basedir}/temp.folder" />
<property name="plugin.destination" value="${basedir}" />
diff --git a/eclipse/plugins/org.eclipse.swt/buildFragment.xml b/eclipse/plugins/org.eclipse.swt/buildFragment.xml
index bf8a20a..8a338e1 100644
--- a/eclipse/plugins/org.eclipse.swt/buildFragment.xml
+++ b/eclipse/plugins/org.eclipse.swt/buildFragment.xml
@@ -496,6 +496,8 @@
<copy file="${build.result.folder}/swt.jar" todir="${temp.folder}/swtdownload" />
<antcall target="build.sources" />
<copy file="${build.result.folder}/src.zip" todir="${temp.folder}/swtdownload" />
+ <copy file="${plugindir}/build/.project" todir="${temp.folder}/swtdownload" />
+ <copy file="${plugindir}/build/.classpath" todir="${temp.folder}/swtdownload" />
<copy todir="${temp.folder}/swtdownload">
<fileset dir="${basedir}" includes="about.html,about_files/" />
</copy>
diff --git a/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html b/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
index 2c2bd4b..075ead2 100644
--- a/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
+++ b/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
@@ -11,6 +11,60 @@
Eclipse Platform Build Notes<br>
SWT</h1>
+<h2>SWT Build 3655c - Wednesday September 01, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-25+16%3A33%3A57+%2B0000;chfieldto=2010-08-31+22%3A01%3A41+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3655b - Thursday August 26, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-24+21%3A30%3A23+%2B0000;chfieldto=2010-08-25+16%3A28%3A54+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3655a - Wednesday August 25, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-17+21%3A33%3A55+%2B0000;chfieldto=2010-08-24+21%3A25%3A18+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3655 - Wednesday August 18, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-10+21%3A49%3A22+%2B0000;chfieldto=2010-08-17+21%3A35%3A43+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3654 - Wednesday August 11, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-27+22%3A34%3A26+%2B0000;chfieldto=2010-08-10+21%3A44%3A28+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3653 - Wednesday July 28, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-20+22%3A24%3A51+%2B0000;chfieldto=2010-07-27+22%3A29%3A45+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3652a - Wednesday July 21, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-14+02%3A57%3A10+%2B0000;chfieldto=2010-07-20+22%3A20%3A16+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3652 - Wednesday July 14, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-06+23%3A59%3A37+%2B0000;chfieldto=2010-07-14+02%3A52%3A41+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3651 - Wednesday July 07, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-06-02+16%3A18%3A25+%2B0000;chfieldto=2010-07-06+23%3A55%3A15+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
<h2>SWT Build 3650b - Thursday June 03, 2010</h2>
<blockquote>
diff --git a/eclipse/plugins/org.eclipse.swt/tasks/build.xml b/eclipse/plugins/org.eclipse.swt/tasks/build.xml
index 6220f1a..0ff9f83 100644
--- a/eclipse/plugins/org.eclipse.swt/tasks/build.xml
+++ b/eclipse/plugins/org.eclipse.swt/tasks/build.xml
@@ -441,10 +441,12 @@
<param name="library_count" value="1"/>
<param name="fragment" value="org.eclipse.swt.win32.wce_ppc.arm"/>
</antcall>
+ <!-- WPF is not being built
<antcall target="check_fragment_libraries">
<param name="library_count" value="2"/>
<param name="fragment" value="org.eclipse.swt.wpf.win32.x86"/>
</antcall>
+ -->
<antcall target="check_fragment_libraries">
<param name="library_count" value="1"/>
<param name="fragment" value="org.eclipse.swt.photon.qnx.x86"/>
@@ -513,13 +515,16 @@
<target name="check_fragment_libraries" depends="get_version">
<property name="checkdir" value="~/build/check_libraries"/>
+ <!-- WPF is not being built
<property name="library_count" value="130"/>
+ -->
+ <property name="library_count" value="128"/>
<property name="fragment" value="org.eclipse.swt.win32.win32.x86 org.eclipse.swt.win32.win32.x86_64 org.eclipse.swt.win32.win32.ia64 org.eclipse.swt.win32.wce_ppc.arm org.eclipse.swt.wpf.win32.x86 org.eclipse.swt.photon.qnx.x86 org.eclipse.swt.carbon.macosx org.eclipse.swt.cocoa.macosx org.eclipse.swt.cocoa.macosx.x86_64 org.eclipse.swt.gtk.linux.ppc org.eclipse.swt.gtk.linux.ppc64 org.eclipse.swt.gtk.linux.x86 org.eclipse.swt.gtk.linux.x86_64 org.eclipse.swt.gtk.linux.s390 org.eclipse.swt.gtk.linux.s390x org.eclipse.swt.gtk.solaris.sparc org.eclipse.swt.gtk.solaris.x86 org.eclipse.swt.motif.linux.x86 org.eclipse.swt.motif.aix.ppc org.eclipse.swt.motif.hpux.ia64_32 org.eclipse.swt.motif.solaris.sparc"/>
<sshexec host="${m_linux_x86}"
username="swtbuild"
keyfile="${keyfile}"
trust="true"
- command="rm -rf ${checkdir}; mkdir ${checkdir}; cd ${checkdir}; export CVS_RSH=ssh; cvs -q -d ${cvsRoot} checkout ${fragment} | grep '[0-9][0-9][0-9][0-9].'; a=`find -name *${swt_version}* | grep -c ${swt_version}`; b=`find . -regex .*[0-9][0-9][0-9][0-9].* | grep -v -c ${swt_version}`; echo Found \"$a\" libraries with version \"${swt_version}\" and \"$b\" libraries with old versions; if [[ "$a" = "${library_count}" && "$b" = '0' ]]; then cd; rm -rf ${checkdir}; echo Success; else cd; rm -rf ${checkdir}; echo Failed. Expecting ${library_count} and 0; exit 1; fi"/>
+ command="rm -rf ${checkdir}; mkdir ${checkdir}; cd ${checkdir}; export CVS_RSH=ssh; cvs -q -d ${cvsRoot} checkout ${TAG} ${fragment} | grep '[0-9][0-9][0-9][0-9].'; a=`find -name *${swt_version}* | grep -c ${swt_version}`; b=`find . -regex .*[0-9][0-9][0-9][0-9].* | grep -v -c ${swt_version}`; echo Found \"$a\" libraries with version \"${swt_version}\" and \"$b\" libraries with old versions; if [[ "$a" = "${library_count}" && "$b" = '0' ]]; then cd; rm -rf ${checkdir}; echo Success; else cd; rm -rf ${checkdir}; echo Failed. Expecting ${library_count} and 0; exit 1; fi"/>
</target>
<target name="check_machines">
@@ -598,7 +603,7 @@
<target name="check_compilation">
<property name="cvsRsh" value="plink"/>
- <property name="tmpdir" value="${tmphome}/workspace64"/>
+ <property name="tmpdir" value="${tmphome}/workspace-check-compile${TAG}"/>
<property name="project" value="org.eclipse.swt"/>
<property name="projectDir" value="${tmpdir}/org.eclipse.swt"/>
<property name="buildDir" value="${tmpdir}/build"/>
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
index 2b4724a..035b23d 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.team.cvs.ui; singleton:=true
-Bundle-Version: 3.3.300.qualifier
+Bundle-Version: 3.3.301.qualifier
Bundle-Activator: org.eclipse.team.internal.ccvs.ui.CVSUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml b/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
index 2b649fd..9d03bf2 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
@@ -1238,10 +1238,11 @@
description="%CVSActionSet.checkoutTooltip"
id="org.eclipse.team.cvs.ui.checkout"/>
<command
- description="%CommitAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%CommitAction.name"
- id="org.eclipse.team.cvs.ui.commit"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.CommitAction"
+ description="%CommitAction.tooltip"
+ id="org.eclipse.team.cvs.ui.commit"
+ name="%CommitAction.name"/>
<command
description="%CommitAllAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
@@ -1249,74 +1250,87 @@
id="org.eclipse.team.cvs.ui.commitAll"/>
<command
categoryId="org.eclipse.team.cvs.ui.actionSet"
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithRemoteAction"
description="%ReplaceWithAction.tooltip"
- name="%ReplaceWithAction.name"
- id="org.eclipse.team.cvs.ui.replace"/>
+ id="org.eclipse.team.cvs.ui.replace"
+ name="%ReplaceWithAction.name"/>
<command
- description="%ReplaceWithTagAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%ReplaceWithTagAction.name"
- id="org.eclipse.team.cvs.ui.replaceWithTag"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithSelectableTagAction"
+ description="%ReplaceWithTagAction.tooltip"
+ id="org.eclipse.team.cvs.ui.replaceWithTag"
+ name="%ReplaceWithTagAction.name"/>
<command
- description="%ReplaceWithRevisionAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%ReplaceWithRevisionAction.name"
- id="org.eclipse.team.cvs.ui.replaceWithRevision"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithRevisionAction"
+ description="%ReplaceWithRevisionAction.tooltip"
+ id="org.eclipse.team.cvs.ui.replaceWithRevision"
+ name="%ReplaceWithRevisionAction.name"/>
<command
- description="%CompareWithRemoteAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%CompareWithRemoteAction.name"
- id="org.eclipse.team.cvs.ui.compareWithRemote"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.CompareWithRemoteAction"
+ description="%CompareWithRemoteAction.tooltip"
+ id="org.eclipse.team.cvs.ui.compareWithRemote"
+ name="%CompareWithRemoteAction.name"/>
<command
- description="%CompareWithTagAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%CompareWithTagAction.name"
- id="org.eclipse.team.cvs.ui.compareWithTag"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.CompareWithTagAction"
+ description="%CompareWithTagAction.tooltip"
+ id="org.eclipse.team.cvs.ui.compareWithTag"
+ name="%CompareWithTagAction.name"/>
<command
- description="%CompareWithRevisionAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%CompareWithRevisionAction.name"
- id="org.eclipse.team.cvs.ui.compareWithRevision"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.CompareWithRevisionAction"
+ description="%CompareWithRevisionAction.tooltip"
+ id="org.eclipse.team.cvs.ui.compareWithRevision"
+ name="%CompareWithRevisionAction.name"/>
<command
- description="%UpdateAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%UpdateAction.name"
- id="org.eclipse.team.cvs.ui.update"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.UpdateSilentAction"
+ description="%UpdateAction.tooltip"
+ id="org.eclipse.team.cvs.ui.update"
+ name="%UpdateAction.name"/>
<command
description="%UpdateAllAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
id="org.eclipse.team.cvs.ui.updateAll"
name="%UpdateAllAction.name"/>
<command
- description="%GenerateDiff.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%GenerateDiff.name"
- id="org.eclipse.team.cvs.ui.GenerateDiff"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.GenerateDiffFileAction"
+ description="%GenerateDiff.tooltip"
+ id="org.eclipse.team.cvs.ui.GenerateDiff"
+ name="%GenerateDiff.name"/>
<command
- description="%TagAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%TagAction.name"
- id="org.eclipse.team.cvs.ui.tag"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.TagLocalAction"
+ description="%TagAction.tooltip"
+ id="org.eclipse.team.cvs.ui.tag"
+ name="%TagAction.name"/>
<command
- description="%BranchAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%BranchAction.name"
- id="org.eclipse.team.cvs.ui.branch"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.BranchAction"
+ description="%BranchAction.tooltip"
+ id="org.eclipse.team.cvs.ui.branch"
+ name="%BranchAction.name"/>
<command
- description="%MergeAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%MergeAction.name"
- id="org.eclipse.team.cvs.ui.merge"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.MergeAction"
+ description="%MergeAction.tooltip"
+ id="org.eclipse.team.cvs.ui.merge"
+ name="%MergeAction.name"/>
<command
- description="%UpdateActionSwitch.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%UpdateActionSwitch.name"
- id="org.eclipse.team.cvs.ui.updateSwitch"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.UpdateAction"
+ description="%UpdateActionSwitch.tooltip"
+ id="org.eclipse.team.cvs.ui.updateSwitch"
+ name="%UpdateActionSwitch.name"/>
<command
- description="%SetKeywordSubstitutionAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%SetKeywordSubstitutionAction.name"
- id="org.eclipse.team.cvs.ui.setKeywordSubstitution"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.SetKeywordSubstitutionAction"
+ description="%SetKeywordSubstitutionAction.tooltip"
+ id="org.eclipse.team.cvs.ui.setKeywordSubstitution"
+ name="%SetKeywordSubstitutionAction.name"/>
<command
description="%ShowAnnotationAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
@@ -1330,20 +1344,23 @@
defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.ShowResourceInHistoryAction"
id="org.eclipse.team.cvs.ui.showHistory"/>
<command
- description="%AddAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%AddAction.name"
- id="org.eclipse.team.cvs.ui.add"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.AddAction"
+ description="%AddAction.tooltip"
+ id="org.eclipse.team.cvs.ui.add"
+ name="%AddAction.name"/>
<command
- description="%IgnoreAction.tooltip"
categoryId="org.eclipse.team.cvs.ui.actionSet"
- name="%IgnoreAction.name"
- id="org.eclipse.team.cvs.ui.ignore"/>
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.IgnoreAction"
+ description="%IgnoreAction.tooltip"
+ id="org.eclipse.team.cvs.ui.ignore"
+ name="%IgnoreAction.name"/>
<command
categoryId="org.eclipse.team.cvs.ui.actionSet"
+ defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.SyncAction"
description="%Synchronize.tooltip"
- name="%Synchronize.name"
- id="org.eclipse.team.cvs.ui.sync"/>
+ id="org.eclipse.team.cvs.ui.sync"
+ name="%Synchronize.name"/>
</extension>
<!-- Commented out awaiting menu support from UI
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowAnnotationAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowAnnotationAction.java
index c69fa97..3558137 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowAnnotationAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowAnnotationAction.java
@@ -12,14 +12,11 @@ package org.eclipse.team.internal.ccvs.ui.actions;
import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.osgi.util.NLS;
import org.eclipse.team.internal.ccvs.core.*;
import org.eclipse.team.internal.ccvs.core.client.listeners.LogEntry;
@@ -27,9 +24,6 @@ import org.eclipse.team.internal.ccvs.core.filehistory.CVSFileRevision;
import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
import org.eclipse.team.internal.ccvs.ui.*;
import org.eclipse.team.internal.ccvs.ui.operations.ShowAnnotationOperation;
-import org.eclipse.ui.*;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.ide.ResourceUtil;
public class ShowAnnotationAction extends WorkspaceAction {
@@ -161,40 +155,4 @@ public class ShowAnnotationAction extends WorkspaceAction {
public String getId() {
return ICVSUIConstants.CMD_ANNOTATE;
}
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
- */
- public void setEnabled(Object evaluationContext) {
- IWorkbenchWindow activeWorkbenchWindow = (IWorkbenchWindow) HandlerUtil
- .getVariable(evaluationContext,
- ISources.ACTIVE_WORKBENCH_WINDOW_NAME);
- if (activeWorkbenchWindow != null) {
- ISelection selection = (ISelection) HandlerUtil.getVariable(
- evaluationContext, ISources.ACTIVE_CURRENT_SELECTION_NAME);
- if (selection == null) {
- selection = StructuredSelection.EMPTY;
- }
- IWorkbenchPart part = (IWorkbenchPart) HandlerUtil.getVariable(
- evaluationContext, ISources.ACTIVE_PART_NAME);
- updateSelection(activeWorkbenchWindow, part, selection);
- }
- }
-
- private void updateSelection(IWorkbenchWindow activeWorkbenchWindow,
- IWorkbenchPart part, ISelection selection) {
- // If the action is run from within an editor, try and find the
- // file for the given editor.
- setActivePart(null, part);
- if (part != null && part instanceof IEditorPart) {
- IEditorInput input = ((IEditorPart) part).getEditorInput();
- IFile file = ResourceUtil.getFile(input);
- if (file != null) {
- selectionChanged((IAction) null, new StructuredSelection(file));
- }
- } else {
- // Fallback is to prime the action with the selection
- selectionChanged((IAction) null, selection);
- }
- }
}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowResourceInHistoryAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowResourceInHistoryAction.java
index 881f2ff..839b1e9 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowResourceInHistoryAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowResourceInHistoryAction.java
@@ -12,22 +12,16 @@ package org.eclipse.team.internal.ccvs.ui.actions;
import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.ICVSResource;
import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.TeamUI;
-import org.eclipse.ui.*;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.ide.ResourceUtil;
public class ShowResourceInHistoryAction extends WorkspaceAction {
/*
@@ -92,39 +86,4 @@ public class ShowResourceInHistoryAction extends WorkspaceAction {
protected boolean isEnabledForIgnoredResources() {
return true;
}
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
- */
- public void setEnabled(Object evaluationContext) {
- IWorkbenchWindow activeWorkbenchWindow = (IWorkbenchWindow) HandlerUtil
- .getVariable(evaluationContext,
- ISources.ACTIVE_WORKBENCH_WINDOW_NAME);
- if (activeWorkbenchWindow != null) {
- ISelection selection = (ISelection) HandlerUtil.getVariable(
- evaluationContext, ISources.ACTIVE_CURRENT_SELECTION_NAME);
- if (selection == null) {
- selection = StructuredSelection.EMPTY;
- }
- IWorkbenchPart part = (IWorkbenchPart) HandlerUtil.getVariable(
- evaluationContext, ISources.ACTIVE_PART_NAME);
- updateSelection(activeWorkbenchWindow, part, selection);
- }
- }
-
- private void updateSelection(IWorkbenchWindow activeWorkbenchWindow,
- IWorkbenchPart part, ISelection selection) {
- // If the action is run from within an editor, try and find the
- // file for the given editor.
- if (part != null && part instanceof IEditorPart) {
- IEditorInput input = ((IEditorPart) part).getEditorInput();
- IFile file = ResourceUtil.getFile(input);
- if (file != null) {
- selectionChanged((IAction) null, new StructuredSelection(file));
- }
- } else {
- // Fallback is to prime the action with the selection
- selectionChanged((IAction) null, selection);
- }
- }
}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CommitWizardCommitPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CommitWizardCommitPage.java
index 6762ceb..de8e8e3 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CommitWizardCommitPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CommitWizardCommitPage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -72,8 +72,9 @@ public class CommitWizardCommitPage extends WizardPage implements IPropertyChang
private boolean fIsEmpty;
- private Splitter horizontalSash;
+ private SashForm horizontalSash;
private SashForm verticalSash;
+ private Splitter placeholder;
private boolean showCompare;
public CommitWizardCommitPage(IResource [] resources, CommitWizard wizard) {
@@ -115,14 +116,17 @@ public class CommitWizardCommitPage extends WizardPage implements IPropertyChang
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.COMMIT_COMMENT_PAGE);
- horizontalSash = new Splitter(composite, SWT.HORIZONTAL);
+ horizontalSash = new SashForm(composite, SWT.HORIZONTAL);
horizontalSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
verticalSash = new SashForm(horizontalSash, SWT.VERTICAL);
verticalSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createCommentArea(verticalSash, converter);
-
+
+ placeholder = new Splitter(horizontalSash, SWT.VERTICAL /*any*/);
+ placeholder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
createChangesArea(verticalSash, converter);
IDialogSettings section = getDialogSettings().getSection(CommitWizard.COMMIT_WIZARD_DIALOG_SETTINGS);
@@ -196,6 +200,8 @@ public class CommitWizardCommitPage extends WizardPage implements IPropertyChang
});
showChanges.setLayoutData(new GridData());
bottomChild.showPage(changeDesc);
+ // Hide compare pane
+ horizontalSash.setMaximizedControl(verticalSash);
} else {
final Composite composite= new Composite(parent, SWT.NONE);
composite.setLayout(SWTUtils.createGridLayout(1, converter, SWTUtils.MARGINS_NONE));
@@ -210,6 +216,10 @@ public class CommitWizardCommitPage extends WizardPage implements IPropertyChang
Control c = createChangesPage(bottomChild, fWizard.getParticipant());
bottomChild.setLayoutData(SWTUtils.createGridData(SWT.DEFAULT, SWT.DEFAULT, SWT.FILL, SWT.FILL, true, true));
bottomChild.showPage(c);
+ // Restore compare pane. It has been hidden when file display threshold was reached.
+ if (showCompare) {
+ horizontalSash.setMaximizedControl(null);
+ }
Dialog.applyDialogFont(getControl());
((Composite)getControl()).layout();
}
@@ -240,7 +250,7 @@ public class CommitWizardCommitPage extends WizardPage implements IPropertyChang
protected CompareViewerSwitchingPane createContentViewerSwitchingPane(
Splitter parent, int style, CompareEditorInput cei) {
- return super.createContentViewerSwitchingPane(horizontalSash, style, cei);
+ return super.createContentViewerSwitchingPane(placeholder, style, cei);
}
protected void setPageDescription(String title) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
index e8ba30b..d533263 100644
--- a/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.team.ui; singleton:=true
-Bundle-Version: 3.5.100.qualifier
+Bundle-Version: 3.5.101.qualifier
Bundle-Activator: org.eclipse.team.internal.ui.TeamUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.team.ui/plugin.xml b/eclipse/plugins/org.eclipse.team.ui/plugin.xml
index 92b8c8a..b51cd55 100644
--- a/eclipse/plugins/org.eclipse.team.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.ui/plugin.xml
@@ -329,10 +329,11 @@
id="org.eclipse.team.ui.synchronizeLast">
</command>
<command
- name="%Command.applyPatch.name"
categoryId="org.eclipse.team.ui.category.team"
+ defaultHandler="org.eclipse.team.internal.ui.actions.ApplyPatchAction"
description="%Command.applyPatch.description"
- id="org.eclipse.team.ui.applyPatch">
+ id="org.eclipse.team.ui.applyPatch"
+ name="%Command.applyPatch.name">
</command>
<command
name="%Synchronizing.perspective"
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java
index fffc674..2863370 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -18,7 +18,8 @@ import java.util.List;
import org.eclipse.core.commands.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.resources.mapping.ResourceMapping;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -211,7 +212,7 @@ public abstract class TeamAction extends AbstractHandler implements IObjectActio
private Object getResourceMapping(Object object) {
if (object instanceof ResourceMapping)
- return (ResourceMapping)object;
+ return object;
return Utils.getResourceMapping(object);
}
@@ -548,4 +549,39 @@ public abstract class TeamAction extends AbstractHandler implements IObjectActio
run(action);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
+ */
+ public void setEnabled(Object evaluationContext) {
+ IWorkbenchWindow activeWorkbenchWindow = (IWorkbenchWindow) HandlerUtil
+ .getVariable(evaluationContext,
+ ISources.ACTIVE_WORKBENCH_WINDOW_NAME);
+ if (activeWorkbenchWindow != null) {
+ ISelection selection = (ISelection) HandlerUtil.getVariable(
+ evaluationContext, ISources.ACTIVE_CURRENT_SELECTION_NAME);
+ if (selection == null) {
+ selection = StructuredSelection.EMPTY;
+ }
+ IWorkbenchPart part = (IWorkbenchPart) HandlerUtil.getVariable(
+ evaluationContext, ISources.ACTIVE_PART_NAME);
+ updateSelection(part, selection);
+ }
+ }
+
+ private void updateSelection(IWorkbenchPart part, ISelection selection) {
+ // If the action is run from within an editor, try and find the
+ // file for the given editor.
+ setActivePart(null, part);
+ if (part != null && part instanceof IEditorPart) {
+ IEditorInput input = ((IEditorPart) part).getEditorInput();
+ IFile file = ResourceUtil.getFile(input);
+ if (file != null) {
+ selectionChanged((IAction) null, new StructuredSelection(file));
+ }
+ } else {
+ // Fallback is to prime the action with the selection
+ selectionChanged((IAction) null, selection);
+ }
+ }
+
}
diff --git a/eclipse/plugins/org.eclipse.ui.carbon/fragment.xml b/eclipse/plugins/org.eclipse.ui.carbon/fragment.xml
index cb209e5..45f3f2f 100644
--- a/eclipse/plugins/org.eclipse.ui.carbon/fragment.xml
+++ b/eclipse/plugins/org.eclipse.ui.carbon/fragment.xml
@@ -12,7 +12,7 @@
<extension
point="org.eclipse.ui.commands">
<command
- categoryId="org.eclipse.ui.category.dialogs"
+ categoryId="org.eclipse.ui.category.window"
description="%command.closeDialog.desc"
id="org.eclipse.ui.carbon.closeDialog"
name="%command.closeDialog.name">
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml b/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
index ac27c5b..dfa8a73 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
@@ -11,7 +11,7 @@
<extension
point="org.eclipse.ui.commands">
<command
- categoryId="org.eclipse.ui.category.dialogs"
+ categoryId="org.eclipse.ui.category.window"
description="%command.closeDialog.desc"
id="org.eclipse.ui.cocoa.closeDialog"
name="%command.closeDialog.name">
diff --git a/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
index 3c8bf58..97511c1 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.editors; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.ui.internal.editors.text.EditorsPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java
index fab3d4b..90e0aab 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -605,7 +605,7 @@ public class LineNumberColumn extends AbstractContributedRulerColumn implements
((IChangeRulerColumn) column).setModel(model);
if (model != null) {
ISourceViewer viewer= fViewer;
- if (viewer != null && viewer.getAnnotationModel() == null)
+ if (viewer != null && viewer.getAnnotationModel() == null && column.getControl() != null)
viewer.showAnnotations(true);
}
}
diff --git a/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
index c5000e5..00bbd4e 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %name
Bundle-SymbolicName: org.eclipse.ui.forms
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.2.qualifier
Bundle-Vendor: %provider-name
Bundle-Localization: plugin
Export-Package: org.eclipse.ui.forms,
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
index 9a7105a..9738e3c 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Konstantin Komissarchik - Fix for Bug 316997
*******************************************************************************/
package org.eclipse.ui.internal.forms.widgets;
@@ -563,7 +564,9 @@ public class TextSegment extends ParagraphSegment {
int lindex = sstart != -1 ? sstart : 0;
int rindex = sstop != -1 ? sstop : s.length();
String mid = s.substring(lindex, rindex);
- selData.addSegment(mid);
+ if (mid.length() > 0 ) {
+ selData.addSegment(mid);
+ }
}
}
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
index b14427b..e085a66 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.ide.application;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.201.qualifier
Bundle-Vendor: %Plugin.providerName
Bundle-Localization: plugin
Bundle-ClassPath: e4-ide-application.jar,
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
index aef7fd6..be076bf 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProduct;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
+
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -108,6 +109,13 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
private IWorkbenchAction openPerspectiveAction;
/**
+ * The property change listener.
+ * @since 3.6.1
+ */
+ private IPropertyChangeListener propertyChangeListener;
+
+
+ /**
* Crates a new IDE workbench window advisor.
*
* @param wbAdvisor
@@ -315,18 +323,19 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
});
// Listen for changes of the workspace name.
+ propertyChangeListener = new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if (IDEInternalPreferences.WORKSPACE_NAME.equals(event
+ .getProperty())) {
+ // Make sure the title is actually updated by
+ // setting last active page.
+ lastActivePage = null;
+ updateTitle(false);
+ }
+ }
+ };
IDEWorkbenchPlugin.getDefault().getPreferenceStore()
- .addPropertyChangeListener(new IPropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent event) {
- if (IDEInternalPreferences.WORKSPACE_NAME.equals(event
- .getProperty())) {
- // Make sure the title is actually updated by
- // setting last active page.
- lastActivePage = null;
- updateTitle(false);
- }
- }
- });
+ .addPropertyChangeListener(propertyChangeListener);
}
private String computeTitle() {
@@ -362,7 +371,7 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
if (input != null && !input.equals(wbAdvisor.getDefaultPageInput())) {
label = currentPage.getLabel();
}
- if (label != null && !label.equals("")) { //$NON-NLS-1$
+ if (label != null && !label.equals("")) { //$NON-NLS-1$
title = NLS.bind(
IDEWorkbenchMessages.WorkbenchWindow_shellTitle, label,
title);
@@ -702,6 +711,11 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
* @see org.eclipse.ui.application.WorkbenchWindowAdvisor#dispose()
*/
public void dispose() {
+ if (propertyChangeListener != null) {
+ IDEWorkbenchPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(propertyChangeListener);
+ propertyChangeListener = null;
+ }
+
if (openPerspectiveAction!=null) {
openPerspectiveAction.dispose();
openPerspectiveAction = null;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/.settings/.api_filters b/eclipse/plugins/org.eclipse.ui.ide/.settings/.api_filters
deleted file mode 100644
index e1f541d..0000000
--- a/eclipse/plugins/org.eclipse.ui.ide/.settings/.api_filters
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component id="org.eclipse.ui.ide" version="2">
-<resource path="extensions/org/eclipse/ui/actions/RefreshAction.java" type="org.eclipse.ui.actions.RefreshAction">
-<filter id="438431863">
-<message_arguments>
-<message_argument value="org.eclipse.ui.actions.RefreshAction"/>
-<message_argument value="refreshAll()"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/AbstractWorkspaceOperation.java" type="org.eclipse.ui.ide.undo.AbstractWorkspaceOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.AbstractWorkspaceOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/CopyProjectOperation.java" type="org.eclipse.ui.ide.undo.CopyProjectOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.CopyProjectOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/CopyResourcesOperation.java" type="org.eclipse.ui.ide.undo.CopyResourcesOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.CopyResourcesOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/CreateFileOperation.java" type="org.eclipse.ui.ide.undo.CreateFileOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.CreateFileOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/CreateFolderOperation.java" type="org.eclipse.ui.ide.undo.CreateFolderOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.CreateFolderOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/CreateProjectOperation.java" type="org.eclipse.ui.ide.undo.CreateProjectOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.CreateProjectOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/DeleteResourcesOperation.java" type="org.eclipse.ui.ide.undo.DeleteResourcesOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.DeleteResourcesOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/MoveProjectOperation.java" type="org.eclipse.ui.ide.undo.MoveProjectOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.MoveProjectOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/ide/undo/MoveResourcesOperation.java" type="org.eclipse.ui.ide.undo.MoveResourcesOperation">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.ide.undo.MoveResourcesOperation"/>
-</message_arguments>
-</filter>
-</resource>
-<resource path="src/org/eclipse/ui/views/navigator/ResourceNavigatorMessages.java" type="org.eclipse.ui.views.navigator.ResourceNavigatorMessages">
-<filter id="336744520">
-<message_arguments>
-<message_argument value="org.eclipse.ui.views.navigator.ResourceNavigatorMessages"/>
-</message_arguments>
-</filter>
-</resource>
-</component>
diff --git a/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
index 31a8bfa..051b022 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.ide; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: e4-ide.jar,
.
Bundle-Activator: org.eclipse.ui.internal.ide.IDEWorkbenchPlugin
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
index f7649d5..ab07aea 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
@@ -967,10 +967,13 @@ public class FilteredResourcesSelectionDialog extends
int lastPatternDot = filenamePattern.lastIndexOf('.');
if (lastPatternDot != -1) {
- namePattern = new SearchPattern();
- namePattern.setPattern(filenamePattern.substring(0, lastPatternDot));
- extensionPattern = new SearchPattern();
- extensionPattern.setPattern(filenamePattern.substring(lastPatternDot + 1));
+ char last = filenamePattern.charAt(filenamePattern.length() - 1);
+ if (last != ' ' && last != '<') {
+ namePattern = new SearchPattern();
+ namePattern.setPattern(filenamePattern.substring(0, lastPatternDot));
+ extensionPattern = new SearchPattern();
+ extensionPattern.setPattern(filenamePattern.substring(lastPatternDot + 1));
+ }
}
}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
index 2077b2a..85fec84 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
@@ -62,7 +62,7 @@ public class ResourceTreeAndListGroup extends EventManager implements
private Map checkedStateStore = new HashMap(9);
- private Collection whiteCheckedTreeItems = new HashSet();
+ private HashSet whiteCheckedTreeItems = new HashSet();
private ITreeContentProvider treeContentProvider;
@@ -389,7 +389,7 @@ public class ResourceTreeAndListGroup extends EventManager implements
/**
* Add all of the selected children of nextEntry to result recursively.
* This does not set any values in the checked state.
- * @param The treeElement being queried
+ * @param treeElement The tree elements being queried
* @param addAll a boolean to indicate if the checked state store needs to be queried
* @param filter IElementFilter - the filter being used on the data
* @param monitor IProgressMonitor or null that the cancel is polled for
@@ -484,7 +484,52 @@ public class ResourceTreeAndListGroup extends EventManager implements
}
}
- /**
+ /** Returns whether all items in the list are checked.
+ * This method is required, because this widget will keep items grey
+ * checked even though all children are selected (see grayUpdateHierarchy()).
+ * @return true if all items in the list are checked - false if not
+ */
+ public boolean isEveryItemChecked() {
+ //Iterate through the children of the root as the root is not in the store
+ Object[] children = treeContentProvider.getChildren(root);
+ for (int i = 0; i < children.length; ++i) {
+ if (!whiteCheckedTreeItems.contains(children[i])) {
+ if (!treeViewer.getGrayed(children[i]))
+ return false;
+ if (!isEveryChildrenChecked(children[i]))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**Verifies of all list items of the tree element are checked, and
+ * if all children are white checked. If not, verify their children
+ * so that if an element is not white checked, but all its children
+ * are while checked, then, all items are considered checked.
+ * @param treeElement the treeElement which status to verify
+ * @return true if all items are checked, false otherwise.
+ */
+ private boolean isEveryChildrenChecked(Object treeElement) {
+ List checked = (List) checkedStateStore.get(treeElement);
+ if (checked != null && (!checked.isEmpty())) {
+ Object[] listItems = listContentProvider.getElements(treeElement);
+ if (listItems.length != checked.size())
+ return false;
+ }
+ Object[] children = treeContentProvider.getChildren(treeElement);
+ for (int i = 0; i < children.length; ++i) {
+ if (!whiteCheckedTreeItems.contains(children[i])) {
+ if (!treeViewer.getGrayed(children[i]))
+ return false;
+ if (!isEveryChildrenChecked(children[i]))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Returns a flat list of all of the leaf elements which are checked.
*
* @return all of the leaf elements which are checked. This API does not
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
index 5fb2670..90876f1 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
@@ -71,7 +71,7 @@ public class MarkerContentGenerator {
/*Use this to indicate filter change rather than a null*/
private final Collection FILTERS_CHANGED = Collections.EMPTY_SET;
- //Carries the description for the generator, as coded in the given extension point
+ //Carries the description for the generator, as coded in the given extension point
private ContentGeneratorDescriptor generatorDescriptor;
// fields
@@ -99,8 +99,8 @@ public class MarkerContentGenerator {
* Create a new MarkerContentGenerator
*
* @param generatorDescriptor
- * @param builder
- * @param viewId
+ * @param builder
+ * @param viewId
* needed for backward compatibility
*/
public MarkerContentGenerator(
@@ -754,7 +754,7 @@ public class MarkerContentGenerator {
/**
* Select the given MarkerEntry
- * @return <code>true</code> if it matches all enabled filters
+ * @return <code>true</code> if it matches all enabled filters
*/
boolean select(MarkerEntry entry) {
try {
@@ -911,7 +911,7 @@ public class MarkerContentGenerator {
* would need a good amount of testing with various combination of filters
* and scopes. The key here is to understand and getting it right how filter
* scope and our trimmed, optimized resources and selected resource elements
- * interact.
+ * interact.
* Another possible way to check if content has changed is by
* comparing the markers gathered freshly with the previously gathered
* markers(cache them when an update is not canceled), whether this up to a
@@ -928,8 +928,8 @@ public class MarkerContentGenerator {
// * manually is not required at all since nothing had changed.This is
// * particularly useful when a filter is set to 'On Selected element scope'.A
// * change in a filter is a combination of both its scope and other settings.
-// *
-// *
+// *
+// *
// * @return true if the resource-content has changed due to change in filter
// * settings or selection. false if content has not change or an
// * update has cleared the changes.
@@ -1026,7 +1026,7 @@ public class MarkerContentGenerator {
}
}
} catch (Exception e) {
- //do not propagate but do show the error
+ //do not propagate but do show the error
MarkerSupportInternalUtilities.showViewError(e);
return false;
} finally {
@@ -1084,6 +1084,9 @@ public class MarkerContentGenerator {
}
void dispose() {
-
+ if (filterPreferenceListener != null) {
+ IDEWorkbenchPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(filterPreferenceListener);
+ filterPreferenceListener = null;
+ }
}
}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
index 2e49488..ba45e95 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
@@ -830,7 +830,7 @@ public class WizardFileSystemResourceImportPage1 extends WizardResourceImportPag
protected boolean importResources(List fileSystemObjects) {
ImportOperation operation;
- boolean shouldImportTopLevelFoldersRecursively = allItemsAreChecked() &&
+ boolean shouldImportTopLevelFoldersRecursively = selectionGroup.isEveryItemChecked() &&
createOnlySelectedButton.getSelection() &&
(createLinksInWorkspaceButton != null && createLinksInWorkspaceButton.getSelection()) &&
(createVirtualFoldersButton != null && createVirtualFoldersButton.getSelection() == false);
@@ -1197,23 +1197,13 @@ public class WizardFileSystemResourceImportPage1 extends WizardResourceImportPag
relativePathVariableGroup.setEnabled(createLinksInWorkspaceButton.getSelection());
createVirtualFoldersButton.setEnabled(createLinksInWorkspaceButton.getSelection());
- if ((!selectionGroup.getAllCheckedListItems().isEmpty() && !allItemsAreChecked()) ||
+ if (!selectionGroup.isEveryItemChecked() ||
(createOnlySelectedButton.getSelection() == false)) {
createVirtualFoldersButton.setSelection(true);
}
}
}
- private boolean allItemsAreChecked() {
- List checkedItems = selectionGroup.getAllCheckedListItems();
- if (!checkedItems.isEmpty()) {
- List allItems = selectionGroup.getAllListItems();
- if (checkedItems.size() == allItems.size())
- return true;
- }
- return false;
- }
-
/**
* Answer a boolean indicating whether self's source specification
* widgets currently all contain valid values.
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
index 2cfba8e..3db2000 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin_name
Bundle-SymbolicName: org.eclipse.ui.intro.universal;singleton:=true
-Bundle-Version: 3.2.400.qualifier
+Bundle-Version: 3.2.402.qualifier
Bundle-Vendor: %provider_name
Bundle-Localization: plugin
Export-Package: org.eclipse.ui.internal.intro.universal;x-friends:="org.eclipse.ua.tests",
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/shared.css b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/shared.css
index 7025b3e..309d565 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/shared.css
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/shared.css
@@ -16,6 +16,10 @@ body { font-family : Arial, sans-serif; }
H1, H2, H3, H4, p, a { color : #4D4D4D; }
+ body {
+ background-color : #FFFFFF;
+}
+
/* The label part of the folding section */
.section-title-link .section-title {
display : inline;
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
index eabdc2e..06ff1e3 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.navigator.resources; singleton:=true
-Bundle-Version: 3.4.200.qualifier
+Bundle-Version: 3.4.201.qualifier
Bundle-Activator: org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin
Bundle-Vendor: %Plugin.providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java
index 2dc235c..eacb7de 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java
@@ -106,7 +106,7 @@ public class WorkingSetsContentProvider implements ICommonContentProvider {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IWorkingSet) {
IWorkingSet workingSet = (IWorkingSet) parentElement;
- if (workingSet.isAggregateWorkingSet()) {
+ if (workingSet.isAggregateWorkingSet() && projectExplorer != null) {
switch (projectExplorer.getRootMode()) {
case ProjectExplorer.WORKING_SETS :
return ((IAggregateWorkingSet) workingSet).getComponents();
@@ -156,6 +156,9 @@ public class WorkingSetsContentProvider implements ICommonContentProvider {
}
private void updateRootMode() {
+ if (projectExplorer == null) {
+ return;
+ }
if( extensionStateModel.getBooleanProperty(SHOW_TOP_LEVEL_WORKING_SETS) )
projectExplorer.setRootMode(ProjectExplorer.WORKING_SETS);
else
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
index cdc49e9..031b16b 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.workbench.texteditor; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-Activator: org.eclipse.ui.internal.texteditor.TextEditorPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
index d2dfee9..459384f 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
@@ -192,6 +192,7 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.Saveable;
import org.eclipse.ui.SaveablesLifecycleEvent;
import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.actions.CommandNotMappedException;
import org.eclipse.ui.actions.ContributedAction;
import org.eclipse.ui.dialogs.PropertyDialogAction;
@@ -2528,11 +2529,16 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
/**
* Key binding support for the quick assist assistant.
- *
* @since 3.5
*/
private KeyBindingSupportForAssistant fKeyBindingSupportForContentAssistant;
+ /**
+ * The save action.
+ * @since 3.6.1
+ */
+ private IWorkbenchAction fSaveAction;
+
/**
* Creates a new text editor. If not explicitly set, this editor uses
@@ -4331,6 +4337,11 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
fInformationPresenter= null;
}
+ if (fSaveAction != null) {
+ fSaveAction.dispose();
+ fSaveAction= null;
+ }
+
super.dispose();
}
@@ -5510,7 +5521,7 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
*/
protected void createActions() {
- ResourceAction action;
+ ResourceAction action;
action= new TextOperationAction(EditorMessages.getBundleForConstructedKeys(), "Editor.Cut.", this, ITextOperationTarget.CUT); //$NON-NLS-1$
action.setHelpContextId(IAbstractTextEditorHelpContextIds.CUT_ACTION);
@@ -5634,7 +5645,8 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
action.setActionDefinitionId(IWorkbenchActionDefinitionIds.FIND_INCREMENTAL_REVERSE);
setAction(ITextEditorActionConstants.FIND_INCREMENTAL_REVERSE, action);
- setAction(ITextEditorActionConstants.SAVE, ActionFactory.SAVE.create(getSite().getWorkbenchWindow()));
+ fSaveAction= ActionFactory.SAVE.create(getSite().getWorkbenchWindow());
+ setAction(ITextEditorActionConstants.SAVE, fSaveAction);
action= new RevertToSavedAction(EditorMessages.getBundleForConstructedKeys(), "Editor.Revert.", this); //$NON-NLS-1$
action.setHelpContextId(IAbstractTextEditorHelpContextIds.REVERT_TO_SAVED_ACTION);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/.settings/.api_filters b/eclipse/plugins/org.eclipse.ui.workbench/.settings/.api_filters
deleted file mode 100644
index 076de14..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/.settings/.api_filters
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component id="org.eclipse.ui.workbench" version="2">
- <resource path="Eclipse UI/org/eclipse/ui/branding/IBundleGroupConstants.java" type="org.eclipse.ui.branding.IBundleGroupConstants">
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.ui.branding.IBundleGroupConstants"/>
- <message_argument value="BRANDING_BUNDLE_ID"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.ui.branding.IBundleGroupConstants"/>
- <message_argument value="BRANDING_BUNDLE_VERSION"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/menus/CommandContributionItemParameter.java" type="org.eclipse.ui.menus.CommandContributionItemParameter">
- <filter id="338948223">
- <message_arguments>
- <message_argument value="org.eclipse.ui.menus.CommandContributionItemParameter"/>
- <message_argument value="CommandContributionItemParameter(IServiceLocator, String, String, Map, ImageDescriptor, ImageDescriptor, ImageDescriptor, String, String, String, int, String, boolean)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/menus/MenuUtil.java" type="org.eclipse.ui.menus.MenuUtil">
- <filter id="336744520">
- <message_arguments>
- <message_argument value="org.eclipse.ui.menus.MenuUtil"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/part/AbstractMultiEditor.java" type="org.eclipse.ui.part.AbstractMultiEditor">
- <filter id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.ui.part.AbstractMultiEditor"/>
- <message_argument value="setChildren(IEditorPart[])"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/progress/IProgressConstants.java" type="org.eclipse.ui.progress.IProgressConstants">
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.ui.progress.IProgressConstants"/>
- <message_argument value="SHOW_IN_TASKBAR_ICON_PROPERTY"/>
- </message_arguments>
- </filter>
- <filter id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.ui.progress.IProgressConstants"/>
- <message_argument value="COMMAND_PROPERTY"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/services/IEvaluationReference.java" type="org.eclipse.ui.services.IEvaluationReference">
- <filter id="403853384">
- <message_arguments>
- <message_argument value="org.eclipse.ui.services.IEvaluationReference"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/services/IServiceScopes.java" type="org.eclipse.ui.services.IServiceScopes">
- <filter id="403853384">
- <message_arguments>
- <message_argument value="org.eclipse.ui.services.IServiceScopes"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="Eclipse UI/org/eclipse/ui/statushandlers/WorkbenchStatusDialogManager.java" type="org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager">
- <filter id="336744520">
- <message_arguments>
- <message_argument value="org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF">
- <filter id="923795461">
- <message_arguments>
- <message_argument value="3.6.0.qualifier"/>
- <message_argument value="3.5.0.I20090603-2000"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ContributionItemFactory.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ContributionItemFactory.java
index bea66b9..a77a9ad 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ContributionItemFactory.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ContributionItemFactory.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -154,6 +154,7 @@ public abstract class ContributionItemFactory {
WorkbenchPlugin.getDefault().getPreferenceStore()
.removePropertyChangeListener(perfs[0]);
window.getPartService().removePartListener(partListener);
+ super.dispose();
}
};
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java
index f50710b..9d0ea76 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java
@@ -171,6 +171,7 @@ import org.eclipse.ui.internal.services.ServiceLocator;
import org.eclipse.ui.internal.services.ServiceLocatorCreator;
import org.eclipse.ui.internal.services.SourceProviderService;
import org.eclipse.ui.internal.services.WorkbenchLocationService;
+import org.eclipse.ui.internal.services.WorkbenchServiceRegistry;
import org.eclipse.ui.internal.splash.EclipseSplashHandler;
import org.eclipse.ui.internal.splash.SplashHandlerFactory;
import org.eclipse.ui.internal.testing.ContributionInfoMessages;
@@ -1826,7 +1827,13 @@ public final class Workbench extends EventManager implements IWorkbench {
}});
- // the source providers are now initialized in phase 3
+ // the source providers are now initialized in phase 3, but source
+ // priorities have to be set before handler initialization
+ StartupThreading.runWithoutExceptions(new StartupRunnable() {
+ public void runWithException() {
+ initializeSourcePriorities();
+ }
+ });
/*
* Phase 2 of the initialization of commands. This handles the creation
@@ -2307,6 +2314,10 @@ public final class Workbench extends EventManager implements IWorkbench {
return Util.getArrayFromList(pref, ";"); //$NON-NLS-1$
}
+ private void initializeSourcePriorities() {
+ WorkbenchServiceRegistry.getRegistry().initializeSourcePriorities();
+ }
+
private void startSourceProviders() {
/*
* Phase 3 of the initialization of commands. The source providers that
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java
index 03e9cdb..d2ee997 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,12 +11,10 @@
package org.eclipse.ui.internal.activities;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.ExpressionConverter;
import org.eclipse.core.runtime.CoreException;
@@ -24,6 +22,7 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionDelta;
import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IRegistryChangeEvent;
import org.eclipse.core.runtime.IRegistryChangeListener;
import org.eclipse.core.runtime.IStatus;
@@ -32,6 +31,7 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.util.ConfigurationElementMemento;
+import org.eclipse.ui.progress.WorkbenchJob;
import org.eclipse.ui.statushandlers.StatusManager;
final class ExtensionActivityRegistry extends AbstractActivityRegistry {
@@ -49,35 +49,33 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
private IExtensionRegistry extensionRegistry;
- ExtensionActivityRegistry(IExtensionRegistry extensionRegistry) {
- if (extensionRegistry == null) {
+ ExtensionActivityRegistry(IExtensionRegistry extensionRegistry) {
+ if (extensionRegistry == null) {
throw new NullPointerException();
}
- this.extensionRegistry = extensionRegistry;
-
- this.extensionRegistry
- .addRegistryChangeListener(new IRegistryChangeListener() {
- public void registryChanged(
- IRegistryChangeEvent registryChangeEvent) {
- IExtensionDelta[] extensionDeltas = registryChangeEvent
- .getExtensionDeltas(Persistence.PACKAGE_PREFIX,
- Persistence.PACKAGE_BASE);
-
- if (extensionDeltas.length != 0) {
- try {
- load();
- } catch (IOException eIO) {
- }
+ this.extensionRegistry = extensionRegistry;
+
+ this.extensionRegistry.addRegistryChangeListener(new IRegistryChangeListener() {
+ public void registryChanged(IRegistryChangeEvent registryChangeEvent) {
+ IExtensionDelta[] extensionDeltas = registryChangeEvent.getExtensionDeltas(
+ Persistence.PACKAGE_PREFIX, Persistence.PACKAGE_BASE);
+
+ if (extensionDeltas.length != 0) {
+ WorkbenchJob job = new WorkbenchJob("Reloading Activity Registry") { //$NON-NLS-1$
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ load();
+ return Status.OK_STATUS;
}
- }
- });
+ };
+ job.setSystem(true);
+ job.schedule();
+ }
+ }
+ });
+ load();
- try {
- load();
- } catch (IOException eIO) {
- }
- }
+ }
private String getNamespace(IConfigurationElement configurationElement) {
String namespace = null;
@@ -111,7 +109,7 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
return null;
}
- private void load() throws IOException {
+ private void load() {
if (activityRequirementBindingDefinitions == null) {
activityRequirementBindingDefinitions = new ArrayList();
} else {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
index bf92ebc..3728443 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
-
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -32,6 +31,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.activities.ActivityEvent;
import org.eclipse.ui.activities.ActivityManagerEvent;
@@ -45,9 +45,12 @@ import org.eclipse.ui.activities.IIdentifier;
import org.eclipse.ui.activities.IMutableActivityManager;
import org.eclipse.ui.activities.ITriggerPointAdvisor;
import org.eclipse.ui.activities.IdentifierEvent;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.misc.Policy;
import org.eclipse.ui.progress.UIJob;
import org.eclipse.ui.services.IEvaluationReference;
import org.eclipse.ui.services.IEvaluationService;
+import org.eclipse.ui.statushandlers.StatusManager;
/**
* An activity registry that may be altered.
@@ -56,7 +59,11 @@ import org.eclipse.ui.services.IEvaluationService;
*/
public final class MutableActivityManager extends AbstractActivityManager
implements IMutableActivityManager, Cloneable {
+ private static final boolean DEBUG = Policy.DEBUG_UI_GLOBAL;
+ private static final int MAX_ERRORS = 5;
+ private static int reportErrors = 0;
+
private Map activitiesById = new HashMap();
private Map activityRequirementBindingsByActivityId = new HashMap();
@@ -134,6 +141,7 @@ public final class MutableActivityManager extends AbstractActivityManager
}
public IActivity getActivity(String activityId) {
+ checkThread();
if (activityId == null) {
throw new NullPointerException();
}
@@ -150,6 +158,7 @@ public final class MutableActivityManager extends AbstractActivityManager
}
public ICategory getCategory(String categoryId) {
+ checkThread();
if (categoryId == null) {
throw new NullPointerException();
}
@@ -166,18 +175,22 @@ public final class MutableActivityManager extends AbstractActivityManager
}
public Set getDefinedActivityIds() {
+ checkThread();
return Collections.unmodifiableSet(definedActivityIds);
}
public Set getDefinedCategoryIds() {
+ checkThread();
return Collections.unmodifiableSet(definedCategoryIds);
}
public Set getEnabledActivityIds() {
+ checkThread();
return Collections.unmodifiableSet(enabledActivityIds);
}
public IIdentifier getIdentifier(String identifierId) {
+ checkThread();
if (identifierId == null) {
throw new NullPointerException();
}
@@ -524,6 +537,7 @@ public final class MutableActivityManager extends AbstractActivityManager
}
public void setEnabledActivityIds(Set enabledActivityIds) {
+ checkThread();
enabledActivityIds = new HashSet(enabledActivityIds);
Set requiredActivityIds = new HashSet(enabledActivityIds);
getRequiredActivityIds(enabledActivityIds, requiredActivityIds);
@@ -907,6 +921,7 @@ public final class MutableActivityManager extends AbstractActivityManager
* @see java.lang.Object#clone()
*/
public Object clone() {
+ checkThread();
MutableActivityManager clone = new MutableActivityManager(advisor, activityRegistry);
clone.setEnabledActivityIds(getEnabledActivityIds());
return clone;
@@ -966,4 +981,24 @@ public final class MutableActivityManager extends AbstractActivityManager
return deferredIdentifierJob;
}
+ private static final String ERR_MSG = "Invalid Thread Access to Activity Manager"; //$NON-NLS-1$
+
+ private void checkThread() {
+ if (!DEBUG) {
+ return;
+ }
+ if (reportErrors >= MAX_ERRORS) {
+ return;
+ }
+ if (PlatformUI.getWorkbench().isStarting()) {
+ return;
+ }
+ boolean nonUiThread = (null == Display.getCurrent());
+ if (nonUiThread) {
+ reportErrors++;
+ StatusManager.getManager().handle(
+ new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, ERR_MSG, new Exception(
+ ERR_MSG)), StatusManager.LOG);
+ }
+ }
}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java
index 7bc745b..022f598 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -24,6 +24,8 @@ import org.eclipse.ui.PlatformUI;
public class Policy {
public static boolean DEFAULT = false;
+ public static boolean DEBUG_UI_GLOBAL = DEFAULT;
+
public static boolean DEBUG_SWT_GRAPHICS = DEFAULT;
public static boolean DEBUG_SWT_DEBUG = DEFAULT;
@@ -161,6 +163,7 @@ public class Policy {
static {
if (getDebugOption("/debug")) { //$NON-NLS-1$
+ DEBUG_UI_GLOBAL = true;
DEBUG_SWT_GRAPHICS = getDebugOption("/trace/graphics"); //$NON-NLS-1$
DEBUG_SWT_DEBUG = getDebugOption("/debug/swtdebug"); //$NON-NLS-1$
DEBUG_SWT_DEBUG_GLOBAL = getDebugOption("/debug/swtdebugglobal"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchServiceRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchServiceRegistry.java
index 0aa0143..25cd1c1 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchServiceRegistry.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchServiceRegistry.java
@@ -19,7 +19,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
-
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
@@ -185,8 +184,6 @@ public class WorkbenchServiceRegistry implements IExtensionChangeHandler {
continue;
}
providers.add(sourceProvider);
- processVariables(elements[i]
- .getChildren(IWorkbenchRegistryConstants.TAG_VARIABLE));
} catch (CoreException e) {
StatusManager.getManager().handle(e.getStatus());
}
@@ -196,6 +193,16 @@ public class WorkbenchServiceRegistry implements IExtensionChangeHandler {
.toArray(new AbstractSourceProvider[providers.size()]);
}
+ public void initializeSourcePriorities() {
+ IExtensionPoint ep = getExtensionPoint();
+ IConfigurationElement[] elements = ep.getConfigurationElements();
+ for (int i = 0; i < elements.length; i++) {
+ if (elements[i].getName().equals(IWorkbenchRegistryConstants.TAG_SOURCE_PROVIDER)) {
+ processVariables(elements[i].getChildren(IWorkbenchRegistryConstants.TAG_VARIABLE));
+ }
+ }
+ }
+
private static final String[] supportedLevels = { ISources.ACTIVE_CONTEXT_NAME,
ISources.ACTIVE_SHELL_NAME,
ISources.ACTIVE_WORKBENCH_WINDOW_NAME,
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
index 6e4835d..50db1fe 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: e4-workbench.jar,
compatibility.jar,
.
diff --git a/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
index 8279200..e4491ca 100644
--- a/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.6.1.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.ui.internal.UIPlugin
Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html b/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
index ec42904..c434128 100644
--- a/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
+++ b/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
@@ -12,6 +12,64 @@
<h1>Eclipse Platform Build Notes (3.5)<br>
JFace and Workbench</h1>
+<p>Integration Build (August 26, 2010, 1:46 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244757">Bug 244757</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (FIXED)<br>
+ </p>
+
+<p>Integration Build (August 25, 2010, 3:47 a.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244757">Bug 244757</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284269">Bug 284269</a>. [KeyBindings] Reduce memory footprint of BindingManager (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316701">Bug 316701</a>. [Contributions] Service initialization wrong! Sources must be initialized before Handlers (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319852">Bug 319852</a>. [Dialogs] Open Resource now interprets "." as "*.", unlike 3.5 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322887">Bug 322887</a>. [Mac] [Commands] Command from 'org.eclipse.ui.cocoa' fragment references category defined in 'org.eclipse.ui.cheatsheets' (FIXED)<br>
+ </p>
+
+<p>Integration Build (August 17, 2010, 3:27 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201391">Bug 201391</a>. [MPE] notifaction when active page of a MultiPageEditorPart changes (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=225601">Bug 225601</a>. Adopt API tooling for UI bundles (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231119">Bug 231119</a>. [GlobalActions] RefreshAction markes as @noextend but should be (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=239421">Bug 239421</a>. [EditorMgmt] MultiEditor: does not support propagate events (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246162">Bug 246162</a>. [Commands] [Services] Make IWorkbenchLocationService public (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250651">Bug 250651</a>. [Contributions] CommandContributionItemParameter's constructor javadoc needs correction (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255136">Bug 255136</a>. [Commands] [Services] IEvaluationReference needs to remove its provisional API claim (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=256158">Bug 256158</a>. [Metadata] Constants in ISharedImages cause API tooling errors (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264030">Bug 264030</a>. [IDE] Platform UI refrences update.configurator (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=265812">Bug 265812</a>. [StatusHandling] Add @noextend to the WSDM (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267470">Bug 267470</a>. [Navigator] Deprecate the ResourceNavigator (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270472">Bug 270472</a>. [JFace] Orca cannot read Eclipse status line (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283676">Bug 283676</a>. [FieldAssist] ControlDecoration should add @noextend API tooling tag (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284330">Bug 284330</a>. [JFace] Add isVisible API to ControlDecoration (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287454">Bug 287454</a>. [KeyBindings] F16-F19 unusable as shortcut keys in General -> Keys (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292762">Bug 292762</a>. [Contributions] MenuUtil provides constants and static methods ... it should be marked noextend (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297271">Bug 297271</a>. [Undo] AbstractWorkspaceOperation and its subclasses don't have @noextend API tags (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302529">Bug 302529</a>. [UX] [Progress] Show Eclipse IDE progress in the Eclipse icon on the Windows 7 Task Bar (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">Bug 315620</a>. [Progress] WorkbenchWindow is leaked (FIXED)<br>
+ </p>
+
+<p>Integration Build (July 13, 2010, 2:55 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+ </p>
+
+<p>Integration Build (July 06, 2010, 3:17 p.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">Bug 315620</a>. [Progress] WorkbenchWindow is leaked (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318862">Bug 318862</a>. [Viewers] [Provider] ClassCastException happened at jface when selecting tree with using picture-capture software. (FIXED)<br>
+ </p>
+
+<p>Integration Build (June 24, 2010, 7:07 a.m.)</p>
+ <p>Problem reports updated</p>
+ <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315839">Bug 315839</a>. [CommonNavigator] NPE in WorkingSetsContentProvider (FIXED)<br>
+ </p>
+
<p>Integration Build (June 03, 2010, 10:58 a.m.)</p>
<p>Problem reports updated</p>
<p>
diff --git a/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
index 19640bd..ec24223 100644
--- a/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.update.core; singleton:=true
-Bundle-Version: 3.2.400.qualifier
+Bundle-Version: 3.2.402.qualifier
Bundle-Activator: org.eclipse.update.internal.core.UpdateCore
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
index 0707949..f083f14 100644
--- a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
+++ b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class UpdateCore extends Plugin {
public static boolean DEBUG_SHOW_WEB;
public static boolean DEBUG_SHOW_IHANDLER;
public static boolean DEBUG_SHOW_RECONCILER;
+ public static boolean DEBUG_VERIFIER;
private static final String PREFIX = "org.eclipse.update.core"; //$NON-NLS-1$
public static final String P_HISTORY_SIZE = PREFIX + ".historySize"; //$NON-NLS-1$
@@ -239,6 +240,7 @@ public class UpdateCore extends Plugin {
DEBUG_SHOW_WEB = getBooleanDebugOption("org.eclipse.update.core/debug/web", false); //$NON-NLS-1$
DEBUG_SHOW_IHANDLER = getBooleanDebugOption("org.eclipse.update.core/debug/installhandler", false); //$NON-NLS-1$
DEBUG_SHOW_RECONCILER = getBooleanDebugOption("org.eclipse.update.core/debug/reconciler", false); //$NON-NLS-1$
+ DEBUG_VERIFIER = getBooleanDebugOption("org.eclipse.equinox.p2.core/debug/verifier", false); // $NON-NLS-1$
}
//
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
index 03af25b..77d0ba1 100644
--- a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
+++ b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,12 +10,7 @@
*******************************************************************************/
package org.eclipse.update.internal.operations;
-//import java.io.*;
-//import java.net.*;
-//import java.nio.channels.*;
-import org.eclipse.update.core.IUpdateConstants;
-
-import org.eclipse.osgi.service.resolver.PlatformAdmin;
+import org.osgi.framework.BundleContext;
import java.io.File;
import java.io.IOException;
@@ -32,6 +27,7 @@ import org.eclipse.update.core.*;
import org.eclipse.update.internal.configurator.PlatformConfiguration;
import org.eclipse.update.internal.core.Messages;
import org.eclipse.update.internal.core.UpdateCore;
+import org.eclipse.update.internal.verifier.PlanVerifier;
import org.eclipse.update.operations.IInstallFeatureOperation;
import org.eclipse.update.operations.IOperationValidator;
import org.osgi.framework.*;
@@ -40,6 +36,9 @@ import org.osgi.framework.*;
*
*/
public class OperationValidator implements IOperationValidator {
+
+ private static ServiceReference verifierServiceReference = null;
+
/**
* Checks if the platform configuration has been modified outside this program.
* @return the error status, or null if no errors
@@ -47,22 +46,20 @@ public class OperationValidator implements IOperationValidator {
public IStatus validatePlatformConfigValid() {
ArrayList status = new ArrayList(1);
checkPlatformWasModified(status);
-
+
// report status
if (status.size() > 0)
return createMultiStatus(Messages.ActivityConstraints_rootMessage, status, IStatus.ERROR);
return null;
}
-
+
/*
* Called by UI before performing operation. Returns null if no errors, a
* status with IStatus.WARNING code when the initial configuration is
* broken, or a status with IStatus.ERROR when there the operation
* introduces new errors
*/
- public IStatus validatePendingInstall(
- IFeature oldFeature,
- IFeature newFeature) {
+ public IStatus validatePendingInstall(IFeature oldFeature, IFeature newFeature) {
// check initial state
ArrayList beforeStatus = new ArrayList();
validateInitialState(beforeStatus);
@@ -113,9 +110,7 @@ public class OperationValidator implements IOperationValidator {
/**
* Called before performing operation.
*/
- public IStatus validatePendingReplaceVersion(
- IFeature feature,
- IFeature anotherFeature) {
+ public IStatus validatePendingReplaceVersion(IFeature feature, IFeature anotherFeature) {
// check initial state
ArrayList beforeStatus = new ArrayList();
validateInitialState(beforeStatus);
@@ -129,7 +124,6 @@ public class OperationValidator implements IOperationValidator {
return createCombinedReportStatus(beforeStatus, status);
}
-
/*
* Called by the UI before doing a revert/ restore operation
*/
@@ -164,13 +158,13 @@ public class OperationValidator implements IOperationValidator {
// report status
return createCombinedReportStatus(beforeStatus, status);
}
-
+
/*
* Called by the UI before doing a batched processing of several pending
* changes.
*/
public RequiredFeaturesResult getRequiredFeatures(IInstallFeatureOperation[] jobs) {
-
+
RequiredFeaturesResult requiredFeaturesResult = new RequiredFeaturesResult();
// check initial state
ArrayList beforeStatus = new ArrayList();
@@ -220,11 +214,9 @@ public class OperationValidator implements IOperationValidator {
/*
* handle unconfigure
*/
- private static void validateUnconfigure(
- IFeature feature,
- ArrayList status) {
+ private static void validateUnconfigure(IFeature feature, ArrayList status) {
try {
- checkSiteReadOnly(feature,status);
+ checkSiteReadOnly(feature, status);
ArrayList features = computeFeatures();
features = computeFeaturesAfterOperation(features, null, feature);
checkConstraints(features, status);
@@ -233,13 +225,12 @@ public class OperationValidator implements IOperationValidator {
}
}
-
/*
* handle configure
*/
private static void validateConfigure(IFeature feature, ArrayList status) {
try {
- checkSiteReadOnly(feature,status);
+ checkSiteReadOnly(feature, status);
ArrayList features = computeFeatures();
checkOptionalChildConfiguring(feature, status);
checkForCycles(feature, null, features);
@@ -254,19 +245,12 @@ public class OperationValidator implements IOperationValidator {
/*
* handle replace version
*/
- private static void validateReplaceVersion(
- IFeature feature,
- IFeature anotherFeature,
- ArrayList status) {
+ private static void validateReplaceVersion(IFeature feature, IFeature anotherFeature, ArrayList status) {
try {
- checkSiteReadOnly(feature,status);
+ checkSiteReadOnly(feature, status);
ArrayList features = computeFeatures();
checkForCycles(feature, null, features);
- features =
- computeFeaturesAfterOperation(
- features,
- anotherFeature,
- feature);
+ features = computeFeaturesAfterOperation(features, anotherFeature, feature);
checkConstraints(features, status);
} catch (CoreException e) {
status.add(e.getStatus());
@@ -276,16 +260,12 @@ public class OperationValidator implements IOperationValidator {
/*
* handle install and update
*/
- private static void validateInstall(
- IFeature oldFeature,
- IFeature newFeature,
- ArrayList status) {
+ private static void validateInstall(IFeature oldFeature, IFeature newFeature, ArrayList status) {
try {
- checkSiteReadOnly(oldFeature,status);
+ checkSiteReadOnly(oldFeature, status);
ArrayList features = computeFeatures();
checkForCycles(newFeature, null, features);
- features =
- computeFeaturesAfterOperation(features, newFeature, oldFeature);
+ features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
checkConstraints(features, status);
checkLicense(newFeature, status);
} catch (CoreException e) {
@@ -296,14 +276,12 @@ public class OperationValidator implements IOperationValidator {
/*
* handle revert and restore
*/
- private static void validateRevert(
- IInstallConfiguration config,
- ArrayList status) {
+ private static void validateRevert(IInstallConfiguration config, ArrayList status) {
try {
-// // check the timeline and don't bother
-// // to check anything else if negative
-// if (!checkTimeline(config, status))
-// return;
+ // // check the timeline and don't bother
+ // // to check anything else if negative
+ // if (!checkTimeline(config, status))
+ // return;
ArrayList features = computeFeaturesAfterRevert(config);
checkConstraints(features, status);
checkRevertConstraints(features, status);
@@ -313,17 +291,14 @@ public class OperationValidator implements IOperationValidator {
}
}
-
/*
* Handle one-click changes as a batch
*/
- private static Set validatePendingChanges(
- IInstallFeatureOperation[] jobs,
- ArrayList status,
- ArrayList beforeStatus) {
+ private static Set validatePendingChanges(IInstallFeatureOperation[] jobs, ArrayList status, ArrayList beforeStatus) {
try {
ArrayList features = computeFeatures();
- ArrayList savedFeatures = features;
+ ArrayList savedFeatures = (ArrayList) features.clone();
+
int nexclusives = 0;
// pass 1: see if we can process the entire "batch"
@@ -336,19 +311,13 @@ public class OperationValidator implements IOperationValidator {
checkLicense(newFeature, status);
if (jobs.length > 1 && newFeature.isExclusive()) {
nexclusives++;
- status.add(
- createStatus(
- newFeature,
- FeatureStatus.CODE_EXCLUSIVE,
- Messages.ActivityConstraints_exclusive));
+ status.add(createStatus(newFeature, FeatureStatus.CODE_EXCLUSIVE, Messages.ActivityConstraints_exclusive));
continue;
}
checkForCycles(newFeature, null, features);
- features =
- computeFeaturesAfterOperation(
- features,
- newFeature,
- oldFeature);
+ features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
+ // give clients the opportunity to veto the plan
+ verifyPlan(job, savedFeatures, features, status);
}
if (nexclusives > 0)
return Collections.EMPTY_SET;
@@ -357,48 +326,111 @@ public class OperationValidator implements IOperationValidator {
return Collections.EMPTY_SET;
// pass 2: we have conflicts
- features = savedFeatures;
+ features = (ArrayList) savedFeatures.clone();
for (int i = 0; i < jobs.length; i++) {
IInstallFeatureOperation job = jobs[i];
IFeature newFeature = job.getFeature();
IFeature oldFeature = job.getOldFeature();
- features =
- computeFeaturesAfterOperation(
- features,
- newFeature,
- oldFeature);
+ features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
Set result = checkConstraints(features, status);
- if (status.size() > 0
- && !isBetterStatus(beforeStatus, status)) {
-// bug 75613
-// IStatus conflict =
-// createStatus(
-// newFeature,
-// FeatureStatus.CODE_OTHER,
-// Policy.bind(KEY_CONFLICT));
-// status.add(0, conflict);
+
+ // give clients the opportunity to veto the plan
+ verifyPlan(job, savedFeatures, features, status);
+
+ if (status.size() > 0 && !isBetterStatus(beforeStatus, status)) {
+ // bug 75613
+ // IStatus conflict =
+ // createStatus(
+ // newFeature,
+ // FeatureStatus.CODE_OTHER,
+ // Policy.bind(KEY_CONFLICT));
+ // status.add(0, conflict);
return result;
}
}
} catch (CoreException e) {
status.add(e.getStatus());
+ } finally {
+ if (verifierServiceReference != null) {
+ BundleContext context = UpdateCore.getPlugin().getBundleContext();
+ if (context != null)
+ context.ungetService(verifierServiceReference);
+ }
}
-
+
return Collections.EMPTY_SET;
}
-
+
+ /*
+ * Load and return the plan verifier if there is one registered and we don't have verification disabled.
+ */
+ private static ServiceReference loadVerifier() {
+ final BundleContext context = UpdateCore.getPlugin().getBundleContext();
+ if (context == null)
+ return null;
+ String value = context.getProperty("eclipse.p2.verifyPlan"); //$NON-NLS-1$
+ if ("false".equalsIgnoreCase(value)) { //$NON-NLS-1$
+ if (UpdateCore.DEBUG_VERIFIER)
+ UpdateCore.debug("Plan verification disabled by user."); //$NON-NLS-1$
+ return null;
+ }
+ verifierServiceReference = context.getServiceReference(PlanVerifier.class.getName());
+ return verifierServiceReference;
+ }
+
+ /*
+ * Give clients the opportunity to veto install/update changes.
+ */
+ private static void verifyPlan(final IInstallFeatureOperation installOperation, final ArrayList currentFeatures, final ArrayList featuresAfterOperation, final ArrayList status) {
+ ServiceReference ref = loadVerifier();
+ BundleContext context = UpdateCore.getPlugin().getBundleContext();
+ final PlanVerifier verifier;
+ if (context == null || ref == null)
+ verifier = null;
+ else
+ verifier = (PlanVerifier) context.getService(ref);
+ if (verifier == null) {
+ if (UpdateCore.DEBUG_VERIFIER)
+ UpdateCore.debug("No plan verifier available. Skipping plan verification."); //$NON-NLS-1$
+ return;
+ }
+ ISafeRunnable job = new ISafeRunnable() {
+ public void handleException(Throwable exception) {
+ if (UpdateCore.DEBUG_VERIFIER)
+ UpdateCore.debug("Exception while running verifier. Check log for details."); //$NON-NLS-1$
+ // log the exception
+ UpdateCore.log("Exception while running plan verifier.", exception); //$NON-NLS-1$
+ // don't let a bad verifier prevent the operation. fall through and return OK so execution of the plan continues
+ }
+
+ public void run() throws Exception {
+ if (UpdateCore.DEBUG_VERIFIER)
+ UpdateCore.debug("Running plan verifier."); //$NON-NLS-1$
+ long start = System.currentTimeMillis();
+ verifier.verify(installOperation, currentFeatures, featuresAfterOperation, status);
+ if (UpdateCore.DEBUG_VERIFIER)
+ UpdateCore.debug("Verification complete in " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ };
+ try {
+ SafeRunner.run(job);
+ } finally {
+ context.ungetService(ref);
+ }
+ }
+
private static void checkPlatformWasModified(ArrayList status) {
try {
// checks if the platform has been modified outside this eclipse instance
IPlatformConfiguration platformConfig = ConfiguratorUtils.getCurrentPlatformConfiguration();
-
+
long currentTimeStamp = platformConfig.getChangeStamp();
// get the last modified value for this config, from this process point of view
- if (platformConfig instanceof PlatformConfiguration)
- currentTimeStamp = ((PlatformConfiguration)platformConfig).getConfiguration().lastModified();
-
+ if (platformConfig instanceof PlatformConfiguration)
+ currentTimeStamp = ((PlatformConfiguration) platformConfig).getConfiguration().lastModified();
+
// get the real last modified value
URL platformXML = platformConfig.getConfigurationLocation();
long actualTimeStamp = currentTimeStamp;
@@ -409,23 +441,19 @@ public class OperationValidator implements IOperationValidator {
actualTimeStamp = connection.getLastModified();
}
if (currentTimeStamp != actualTimeStamp)
- status.add(createStatus(
- null,
- FeatureStatus.CODE_OTHER,
- Messages.ActivityConstraints_platformModified));
+ status.add(createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platformModified));
} catch (IOException e) {
// ignore
}
}
-
+
private static void checkSiteReadOnly(IFeature feature, ArrayList status) {
- if(feature == null){
+ if (feature == null) {
return;
}
IConfiguredSite csite = feature.getSite().getCurrentConfiguredSite();
if (csite != null && !csite.isUpdatable())
- status.add(createStatus(feature, FeatureStatus.CODE_OTHER,
- NLS.bind(Messages.ActivityConstraints_readOnly, (new String[] { csite.getSite().getURL().toExternalForm() }))));
+ status.add(createStatus(feature, FeatureStatus.CODE_OTHER, NLS.bind(Messages.ActivityConstraints_readOnly, (new String[] {csite.getSite().getURL().toExternalForm()}))));
}
/*
@@ -434,11 +462,11 @@ public class OperationValidator implements IOperationValidator {
private static ArrayList computeFeatures() throws CoreException {
return computeFeatures(true);
}
+
/*
* Compute a list of configured features
*/
- private static ArrayList computeFeatures(boolean configuredOnly)
- throws CoreException {
+ private static ArrayList computeFeatures(boolean configuredOnly) throws CoreException {
ArrayList features = new ArrayList();
ILocalSite localSite = SiteManager.getLocalSite();
IInstallConfiguration config = localSite.getCurrentConfiguration();
@@ -467,14 +495,7 @@ public class OperationValidator implements IOperationValidator {
* Compute the nested feature subtree starting at the specified base
* feature
*/
- public static ArrayList computeFeatureSubtree(
- IFeature top,
- IFeature feature,
- ArrayList features,
- boolean tolerateMissingChildren,
- ArrayList configuredFeatures,
- ArrayList visitedFeatures)
- throws CoreException {
+ public static ArrayList computeFeatureSubtree(IFeature top, IFeature feature, ArrayList features, boolean tolerateMissingChildren, ArrayList configuredFeatures, ArrayList visitedFeatures) throws CoreException {
// check arguments
if (top == null)
@@ -488,8 +509,7 @@ public class OperationValidator implements IOperationValidator {
// check for <includes> cycle
if (visitedFeatures.contains(feature)) {
- IStatus status =
- createStatus(top, FeatureStatus.CODE_CYCLE, Messages.ActivityConstraints_cycle);
+ IStatus status = createStatus(top, FeatureStatus.CODE_CYCLE, Messages.ActivityConstraints_cycle);
throw new CoreException(status);
} else {
// keep track of visited features so we can detect cycles
@@ -499,19 +519,11 @@ public class OperationValidator implements IOperationValidator {
// return specified base feature and all its children
if (!features.contains(feature))
features.add(feature);
- IIncludedFeatureReference[] children =
- feature.getIncludedFeatureReferences();
+ IIncludedFeatureReference[] children = feature.getIncludedFeatureReferences();
for (int i = 0; i < children.length; i++) {
try {
IFeature child = UpdateUtils.getIncludedFeature(feature, children[i]);
- features =
- computeFeatureSubtree(
- top,
- child,
- features,
- tolerateMissingChildren,
- null,
- visitedFeatures);
+ features = computeFeatureSubtree(top, child, features, tolerateMissingChildren, null, visitedFeatures);
} catch (CoreException e) {
if (!children[i].isOptional() && !tolerateMissingChildren)
throw e;
@@ -529,31 +541,18 @@ public class OperationValidator implements IOperationValidator {
if (license != null && license.trim().length() > 0)
return;
}
- status.add(
- createStatus(feature, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_noLicense));
+ status.add(createStatus(feature, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_noLicense));
}
/*
* Compute a list of features that will be configured after the operation
*/
- private static ArrayList computeFeaturesAfterOperation(
- ArrayList features,
- IFeature add,
- IFeature remove)
- throws CoreException {
+ private static ArrayList computeFeaturesAfterOperation(ArrayList features, IFeature add, IFeature remove) throws CoreException {
ArrayList addTree = computeFeatureSubtree(add, null, null, false,
/* do not tolerate missing children */
features, null);
- ArrayList removeTree =
- computeFeatureSubtree(
- remove,
- null,
- null,
- true /* tolerate missing children */,
- null,
- null
- );
+ ArrayList removeTree = computeFeatureSubtree(remove, null, null, true /* tolerate missing children */, null, null);
if (remove != null) {
// Patches to features are removed together with
// those features. Include them in the list.
@@ -569,11 +568,7 @@ public class OperationValidator implements IOperationValidator {
return features;
}
- private static void contributePatchesFor(
- ArrayList removeTree,
- ArrayList features,
- ArrayList result)
- throws CoreException {
+ private static void contributePatchesFor(ArrayList removeTree, ArrayList features, ArrayList result) throws CoreException {
for (int i = 0; i < removeTree.size(); i++) {
IFeature feature = (IFeature) removeTree.get(i);
@@ -581,16 +576,11 @@ public class OperationValidator implements IOperationValidator {
}
}
- private static void contributePatchesFor(
- IFeature feature,
- ArrayList features,
- ArrayList result)
- throws CoreException {
+ private static void contributePatchesFor(IFeature feature, ArrayList features, ArrayList result) throws CoreException {
for (int i = 0; i < features.size(); i++) {
IFeature candidate = (IFeature) features.get(i);
if (UpdateUtils.isPatch(feature, candidate)) {
- ArrayList removeTree =
- computeFeatureSubtree(candidate, null, null, true,null,null);
+ ArrayList removeTree = computeFeatureSubtree(candidate, null, null, true, null, null);
result.addAll(removeTree);
}
}
@@ -600,8 +590,7 @@ public class OperationValidator implements IOperationValidator {
* Compute a list of features that will be configured after performing the
* revert
*/
- private static ArrayList computeFeaturesAfterRevert(IInstallConfiguration config)
- throws CoreException {
+ private static ArrayList computeFeaturesAfterRevert(IInstallConfiguration config) throws CoreException {
ArrayList list = new ArrayList();
IConfiguredSite[] csites = config.getConfiguredSites();
@@ -615,13 +604,10 @@ public class OperationValidator implements IOperationValidator {
return list;
}
-
-
/*
* Compute a list of plugin entries for the specified features.
*/
- private static ArrayList computePluginsForFeatures(ArrayList features)
- throws CoreException {
+ private static ArrayList computePluginsForFeatures(ArrayList features) throws CoreException {
if (features == null)
return new ArrayList();
@@ -639,7 +625,6 @@ public class OperationValidator implements IOperationValidator {
return result;
}
-
/**
* Check for feature cycles:
* - visit feature
@@ -647,11 +632,7 @@ public class OperationValidator implements IOperationValidator {
* - DFS children
* - when return from DFS remove the feature from the candidates list
*/
- private static void checkForCycles(
- IFeature feature,
- ArrayList candidates,
- ArrayList configuredFeatures)
- throws CoreException {
+ private static void checkForCycles(IFeature feature, ArrayList candidates, ArrayList configuredFeatures) throws CoreException {
// check arguments
if (feature == null)
@@ -660,21 +641,19 @@ public class OperationValidator implements IOperationValidator {
configuredFeatures = new ArrayList();
if (candidates == null)
candidates = new ArrayList();
-
+
// check for <includes> cycle
if (candidates.contains(feature)) {
- String msg = NLS.bind(Messages.ActivityConstraints_cycle, (new String[] {feature.getLabel(),
- feature.getVersionedIdentifier().toString()}));
+ String msg = NLS.bind(Messages.ActivityConstraints_cycle, (new String[] {feature.getLabel(), feature.getVersionedIdentifier().toString()}));
IStatus status = createStatus(feature, FeatureStatus.CODE_CYCLE, msg);
throw new CoreException(status);
}
// potential candidate
candidates.add(feature);
-
+
// recursively, check cycles with children
- IIncludedFeatureReference[] children =
- feature.getIncludedFeatureReferences();
+ IIncludedFeatureReference[] children = feature.getIncludedFeatureReferences();
for (int i = 0; i < children.length; i++) {
try {
IFeature child = UpdateUtils.getIncludedFeature(feature, children[i]);
@@ -687,12 +666,11 @@ public class OperationValidator implements IOperationValidator {
// no longer a candidate, because no cycles with children
candidates.remove(feature);
}
-
+
/*
* validate constraints
*/
- private static Set checkConstraints(ArrayList features, ArrayList status)
- throws CoreException {
+ private static Set checkConstraints(ArrayList features, ArrayList status) throws CoreException {
if (features == null)
return Collections.EMPTY_SET;
@@ -708,9 +686,7 @@ public class OperationValidator implements IOperationValidator {
* Verify all features are either portable, or match the current
* environment
*/
- private static void checkEnvironment(
- ArrayList features,
- ArrayList status) {
+ private static void checkEnvironment(ArrayList features, ArrayList status) {
String os = Platform.getOS();
String ws = Platform.getWS();
@@ -724,8 +700,7 @@ public class OperationValidator implements IOperationValidator {
if (fos.size() > 0) {
if (!fos.contains(os)) {
- IStatus s =
- createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_os);
+ IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_os);
if (!status.contains(s))
status.add(s);
continue;
@@ -734,8 +709,7 @@ public class OperationValidator implements IOperationValidator {
if (fws.size() > 0) {
if (!fws.contains(ws)) {
- IStatus s =
- createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_ws);
+ IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_ws);
if (!status.contains(s))
status.add(s);
continue;
@@ -744,8 +718,7 @@ public class OperationValidator implements IOperationValidator {
if (farch.size() > 0) {
if (!farch.contains(arch)) {
- IStatus s =
- createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_arch);
+ IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_arch);
if (!status.contains(s))
status.add(s);
continue;
@@ -757,10 +730,7 @@ public class OperationValidator implements IOperationValidator {
/*
* Verify we end up with a version of platform configured
*/
- private static void checkPlatformFeature(
- ArrayList features,
- ArrayList plugins,
- ArrayList status) {
+ private static void checkPlatformFeature(ArrayList features, ArrayList plugins, ArrayList status) {
// find the plugin that defines the product
IProduct product = Platform.getProduct();
@@ -776,10 +746,9 @@ public class OperationValidator implements IOperationValidator {
break;
}
}
-
+
if (!found) {
- IStatus s =
- createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platform);
+ IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platform);
if (!status.contains(s))
status.add(s);
}
@@ -788,25 +757,18 @@ public class OperationValidator implements IOperationValidator {
/*
* Verify we end up with a version of primary feature configured
*/
- private static void checkPrimaryFeature(
- ArrayList features,
- ArrayList plugins,
- ArrayList status) {
-
- String featureId =
- ConfiguratorUtils
- .getCurrentPlatformConfiguration()
- .getPrimaryFeatureIdentifier();
-
+ private static void checkPrimaryFeature(ArrayList features, ArrayList plugins, ArrayList status) {
+
+ String featureId = ConfiguratorUtils.getCurrentPlatformConfiguration().getPrimaryFeatureIdentifier();
+
if (featureId != null) {
// primary feature is defined
for (int i = 0; i < features.size(); i++) {
IFeature feature = (IFeature) features.get(i);
- if (featureId
- .equals(feature.getVersionedIdentifier().getIdentifier()))
+ if (featureId.equals(feature.getVersionedIdentifier().getIdentifier()))
return;
}
-
+
IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
if (!status.contains(s))
status.add(s);
@@ -825,8 +787,7 @@ public class OperationValidator implements IOperationValidator {
return; // product found
}
}
- IStatus s =
- createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
+ IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
if (!status.contains(s))
status.add(s);
}
@@ -835,11 +796,8 @@ public class OperationValidator implements IOperationValidator {
/*
* Verify we do not break prereqs
*/
- private static Set checkPrereqs(
- ArrayList features,
- ArrayList plugins,
- ArrayList status) {
-
+ private static Set checkPrereqs(ArrayList features, ArrayList plugins, ArrayList status) {
+
HashSet result = new HashSet();
for (int i = 0; i < features.size(); i++) {
@@ -853,12 +811,8 @@ public class OperationValidator implements IOperationValidator {
VersionedIdentifier iid = iimport.getVersionedIdentifier();
String id = iid.getIdentifier();
PluginVersionIdentifier version = iid.getVersion();
- boolean featurePrereq =
- iimport.getKind() == IImport.KIND_FEATURE;
- boolean ignoreVersion =
- version.getMajorComponent() == 0
- && version.getMinorComponent() == 0
- && version.getServiceComponent() == 0;
+ boolean featurePrereq = iimport.getKind() == IImport.KIND_FEATURE;
+ boolean ignoreVersion = version.getMajorComponent() == 0 && version.getMinorComponent() == 0 && version.getServiceComponent() == 0;
int rule = iimport.getRule();
if (rule == IUpdateConstants.RULE_NONE)
rule = IUpdateConstants.RULE_COMPATIBLE;
@@ -890,27 +844,19 @@ public class OperationValidator implements IOperationValidator {
// have a candidate
if (ignoreVersion)
found = true;
- else if (
- rule == IUpdateConstants.RULE_PERFECT
- && cversion.isPerfect(version))
+ else if (rule == IUpdateConstants.RULE_PERFECT && cversion.isPerfect(version))
found = true;
- else if (
- rule == IUpdateConstants.RULE_EQUIVALENT
- && cversion.isEquivalentTo(version))
+ else if (rule == IUpdateConstants.RULE_EQUIVALENT && cversion.isEquivalentTo(version))
found = true;
- else if (
- rule == IUpdateConstants.RULE_COMPATIBLE
- && cversion.isCompatibleWith(version))
+ else if (rule == IUpdateConstants.RULE_COMPATIBLE && cversion.isCompatibleWith(version))
found = true;
- else if (
- rule == IUpdateConstants.RULE_GREATER_OR_EQUAL
- && cversion.isGreaterOrEqualTo(version))
+ else if (rule == IUpdateConstants.RULE_GREATER_OR_EQUAL && cversion.isGreaterOrEqualTo(version))
found = true;
}
if (found)
break;
}
-
+
// perhaps the bundle that we are looking for was installed
// but isn't a part of a feature
if (!found && !featurePrereq)
@@ -918,41 +864,19 @@ public class OperationValidator implements IOperationValidator {
if (!found) {
// report status
- String target =
- featurePrereq
- ? Messages.ActivityConstaints_prereq_feature
- : Messages.ActivityConstaints_prereq_plugin;
- int errorCode = featurePrereq
- ? FeatureStatus.CODE_PREREQ_FEATURE
- : FeatureStatus.CODE_PREREQ_PLUGIN;
- String msg =
- NLS.bind(Messages.ActivityConstraints_prereq, (new String[] { target, id }));
+ String target = featurePrereq ? Messages.ActivityConstaints_prereq_feature : Messages.ActivityConstaints_prereq_plugin;
+ int errorCode = featurePrereq ? FeatureStatus.CODE_PREREQ_FEATURE : FeatureStatus.CODE_PREREQ_PLUGIN;
+ String msg = NLS.bind(Messages.ActivityConstraints_prereq, (new String[] {target, id}));
if (!ignoreVersion) {
if (rule == IUpdateConstants.RULE_PERFECT)
- msg =
- NLS.bind(Messages.ActivityConstraints_prereqPerfect, (new String[] {
- target,
- id,
- version.toString()}));
+ msg = NLS.bind(Messages.ActivityConstraints_prereqPerfect, (new String[] {target, id, version.toString()}));
else if (rule == IUpdateConstants.RULE_EQUIVALENT)
- msg =
- NLS.bind(Messages.ActivityConstraints_prereqEquivalent, (new String[] {
- target,
- id,
- version.toString()}));
+ msg = NLS.bind(Messages.ActivityConstraints_prereqEquivalent, (new String[] {target, id, version.toString()}));
else if (rule == IUpdateConstants.RULE_COMPATIBLE)
- msg =
- NLS.bind(Messages.ActivityConstraints_prereqCompatible, (new String[] {
- target,
- id,
- version.toString()}));
+ msg = NLS.bind(Messages.ActivityConstraints_prereqCompatible, (new String[] {target, id, version.toString()}));
else if (rule == IUpdateConstants.RULE_GREATER_OR_EQUAL)
- msg =
- NLS.bind(Messages.ActivityConstraints_prereqGreaterOrEqual, (new String[] {
- target,
- id,
- version.toString()}));
+ msg = NLS.bind(Messages.ActivityConstraints_prereqGreaterOrEqual, (new String[] {target, id, version.toString()}));
}
IStatus s = createStatus(feature, errorCode, msg);
result.add(new InternalImport(iimport));
@@ -961,10 +885,10 @@ public class OperationValidator implements IOperationValidator {
}
}
}
-
+
return result;
}
-
+
/*
* Return a boolean value indicating whether or not the bundle with the given id and version
* is installed in the system.
@@ -984,7 +908,7 @@ public class OperationValidator implements IOperationValidator {
BundleDescription[] bundles = state.getBundles(id);
if (bundles == null || bundles.length == 0)
return false;
- for (int i=0; i<bundles.length; i++) {
+ for (int i = 0; i < bundles.length; i++) {
BundleDescription bundle = bundles[i];
PluginVersionIdentifier cversion = new PluginVersionIdentifier(bundle.getVersion().toString());
// have a candidate
@@ -1008,21 +932,12 @@ public class OperationValidator implements IOperationValidator {
/*
* Verify we end up with valid nested features after revert
*/
- private static void checkRevertConstraints(
- ArrayList features,
- ArrayList status) {
+ private static void checkRevertConstraints(ArrayList features, ArrayList status) {
for (int i = 0; i < features.size(); i++) {
IFeature feature = (IFeature) features.get(i);
try {
- computeFeatureSubtree(
- feature,
- null,
- null,
- false /* do not tolerate missing children */,
- null,
- null
- );
+ computeFeatureSubtree(feature, null, null, false /* do not tolerate missing children */, null, null);
} catch (CoreException e) {
status.add(e.getStatus());
}
@@ -1034,10 +949,7 @@ public class OperationValidator implements IOperationValidator {
* the child to be configured as well
*/
- private static void checkOptionalChildConfiguring(
- IFeature feature,
- ArrayList status)
- throws CoreException {
+ private static void checkOptionalChildConfiguring(IFeature feature, ArrayList status) throws CoreException {
ILocalSite localSite = SiteManager.getLocalSite();
IInstallConfiguration config = localSite.getCurrentConfiguration();
IConfiguredSite[] csites = config.getConfiguredSites();
@@ -1045,8 +957,7 @@ public class OperationValidator implements IOperationValidator {
boolean included = false;
for (int i = 0; i < csites.length; i++) {
IConfiguredSite csite = csites[i];
- ISiteFeatureReference[] crefs =
- csite.getSite().getFeatureReferences();
+ ISiteFeatureReference[] crefs = csite.getSite().getFeatureReferences();
for (int j = 0; j < crefs.length; j++) {
IFeatureReference cref = crefs[j];
IFeature cfeature = null;
@@ -1081,68 +992,64 @@ public class OperationValidator implements IOperationValidator {
//feature is root - can be configured
}
}
-//
-// /**
-// * Checks if the configuration is locked by other instances
-// *
-// * @param status
-// */
-// private static void checkConfigurationLock(ArrayList status) {
-// IPlatformConfiguration config =
-// BootLoader.getCurrentPlatformConfiguration();
-// URL configURL = config.getConfigurationLocation();
-// if (!"file".equals(configURL.getProtocol())) {
-// status.add(
-// createStatus(
-// null,
-// "Configuration location is not writable:" + configURL));
-// return;
-// }
-// String locationString = configURL.getFile();
-// File configDir = new File(locationString);
-// if (!configDir.isDirectory())
-// configDir = configDir.getParentFile();
-// if (!configDir.exists()) {
-// status.add(
-// createStatus(null, "Configuration location does not exist"));
-// return;
-// }
-// File locksDir = new File(configDir, "locks");
-// // check all the possible lock files
-// File[] lockFiles = locksDir.listFiles();
-// File configLock = BootLoader.getCurrentPlatformConfiguration().getLockFile();
-// for (int i = 0; i < lockFiles.length; i++) {
-// if (lockFiles[i].equals(configLock))
-// continue;
-// try {
-// RandomAccessFile raf = new RandomAccessFile(lockFiles[i], "rw");
-// FileChannel channel = raf.getChannel();
-// System.out.println(channel.isOpen());
-// FileLock lock = channel.tryLock();
-// if (lock == null){
-// // there is another eclipse instance running
-// raf.close();
-// status.add(
-// createStatus(
-// null,
-// "Another instance is running, please close it before performing any configuration operations"));
-// return;
-// }
-//
-// } catch (Exception e) {
-// status.add(createStatus(null, "Failed to create lock:"+lockFiles[i]));
-// return;
-// }
-// }
-// }
-
- private static boolean isParent(
- IFeature candidate,
- IFeature feature,
- boolean optionalOnly)
- throws CoreException {
- IIncludedFeatureReference[] refs =
- candidate.getIncludedFeatureReferences();
+
+ //
+ // /**
+ // * Checks if the configuration is locked by other instances
+ // *
+ // * @param status
+ // */
+ // private static void checkConfigurationLock(ArrayList status) {
+ // IPlatformConfiguration config =
+ // BootLoader.getCurrentPlatformConfiguration();
+ // URL configURL = config.getConfigurationLocation();
+ // if (!"file".equals(configURL.getProtocol())) {
+ // status.add(
+ // createStatus(
+ // null,
+ // "Configuration location is not writable:" + configURL));
+ // return;
+ // }
+ // String locationString = configURL.getFile();
+ // File configDir = new File(locationString);
+ // if (!configDir.isDirectory())
+ // configDir = configDir.getParentFile();
+ // if (!configDir.exists()) {
+ // status.add(
+ // createStatus(null, "Configuration location does not exist"));
+ // return;
+ // }
+ // File locksDir = new File(configDir, "locks");
+ // // check all the possible lock files
+ // File[] lockFiles = locksDir.listFiles();
+ // File configLock = BootLoader.getCurrentPlatformConfiguration().getLockFile();
+ // for (int i = 0; i < lockFiles.length; i++) {
+ // if (lockFiles[i].equals(configLock))
+ // continue;
+ // try {
+ // RandomAccessFile raf = new RandomAccessFile(lockFiles[i], "rw");
+ // FileChannel channel = raf.getChannel();
+ // System.out.println(channel.isOpen());
+ // FileLock lock = channel.tryLock();
+ // if (lock == null){
+ // // there is another eclipse instance running
+ // raf.close();
+ // status.add(
+ // createStatus(
+ // null,
+ // "Another instance is running, please close it before performing any configuration operations"));
+ // return;
+ // }
+ //
+ // } catch (Exception e) {
+ // status.add(createStatus(null, "Failed to create lock:"+lockFiles[i]));
+ // return;
+ // }
+ // }
+ // }
+
+ private static boolean isParent(IFeature candidate, IFeature feature, boolean optionalOnly) throws CoreException {
+ IIncludedFeatureReference[] refs = candidate.getIncludedFeatureReferences();
for (int i = 0; i < refs.length; i++) {
IIncludedFeatureReference child = refs[i];
VersionedIdentifier fvid = feature.getVersionedIdentifier();
@@ -1163,39 +1070,30 @@ public class OperationValidator implements IOperationValidator {
return false;
}
-// private static boolean checkTimeline(
-// IInstallConfiguration config,
-// ArrayList status) {
-// try {
-// ILocalSite lsite = SiteManager.getLocalSite();
-// IInstallConfiguration cconfig = lsite.getCurrentConfiguration();
-// if (cconfig.getTimeline() != config.getTimeline()) {
-// // Not the same timeline - cannot revert
-// String msg =
-// UpdateUtils.getFormattedMessage(
-// KEY_WRONG_TIMELINE,
-// config.getLabel());
-// status.add(createStatus(null, FeatureStatus.CODE_OTHER, msg));
-// return false;
-// }
-// } catch (CoreException e) {
-// status.add(e.getStatus());
-// }
-// return true;
-// }
-
- private static IStatus createMultiStatus(
- String message,
- ArrayList children,
- int code) {
- IStatus[] carray =
- (IStatus[]) children.toArray(new IStatus[children.size()]);
- return new MultiStatus(
- UpdateCore.getPlugin().getBundle().getSymbolicName(),
- code,
- carray,
- message,
- null);
+ // private static boolean checkTimeline(
+ // IInstallConfiguration config,
+ // ArrayList status) {
+ // try {
+ // ILocalSite lsite = SiteManager.getLocalSite();
+ // IInstallConfiguration cconfig = lsite.getCurrentConfiguration();
+ // if (cconfig.getTimeline() != config.getTimeline()) {
+ // // Not the same timeline - cannot revert
+ // String msg =
+ // UpdateUtils.getFormattedMessage(
+ // KEY_WRONG_TIMELINE,
+ // config.getLabel());
+ // status.add(createStatus(null, FeatureStatus.CODE_OTHER, msg));
+ // return false;
+ // }
+ // } catch (CoreException e) {
+ // status.add(e.getStatus());
+ // }
+ // return true;
+ // }
+
+ private static IStatus createMultiStatus(String message, ArrayList children, int code) {
+ IStatus[] carray = (IStatus[]) children.toArray(new IStatus[children.size()]);
+ return new MultiStatus(UpdateCore.getPlugin().getBundle().getSymbolicName(), code, carray, message, null);
}
private static IStatus createStatus(IFeature feature, int errorCode, String message) {
@@ -1204,22 +1102,11 @@ public class OperationValidator implements IOperationValidator {
if (feature == null)
fullMessage = message;
else {
- PluginVersionIdentifier version =
- feature.getVersionedIdentifier().getVersion();
- fullMessage =
- NLS.bind(Messages.ActivityConstraints_childMessage, (new String[] {
- feature.getLabel(),
- version.toString(),
- message }));
+ PluginVersionIdentifier version = feature.getVersionedIdentifier().getVersion();
+ fullMessage = NLS.bind(Messages.ActivityConstraints_childMessage, (new String[] {feature.getLabel(), version.toString(), message}));
}
- return new FeatureStatus(
- feature,
- IStatus.ERROR,
- UpdateCore.getPlugin().getBundle().getSymbolicName(),
- errorCode,
- fullMessage,
- null);
+ return new FeatureStatus(feature, IStatus.ERROR, UpdateCore.getPlugin().getBundle().getSymbolicName(), errorCode, fullMessage, null);
}
// private static IStatus createReportStatus(ArrayList beforeStatus,
@@ -1235,16 +1122,12 @@ public class OperationValidator implements IOperationValidator {
// return null;
// }
- private static IStatus createCombinedReportStatus(
- ArrayList beforeStatus,
- ArrayList status) {
+ private static IStatus createCombinedReportStatus(ArrayList beforeStatus, ArrayList status) {
if (beforeStatus.size() == 0) { // good initial config
if (status.size() == 0) {
return null; // all fine
} else {
- return createMultiStatus(Messages.ActivityConstraints_rootMessage,
- status,
- IStatus.ERROR);
+ return createMultiStatus(Messages.ActivityConstraints_rootMessage, status, IStatus.ERROR);
// error after operation
}
} else { // beforeStatus.size() > 0 : initial config errors
@@ -1252,27 +1135,13 @@ public class OperationValidator implements IOperationValidator {
return null; // errors will be fixed
} else {
if (isBetterStatus(beforeStatus, status)) {
- return createMultiStatus(
- Messages.ActivityConstraints_warning,
- beforeStatus,
- IStatus.WARNING);
+ return createMultiStatus(Messages.ActivityConstraints_warning, beforeStatus, IStatus.WARNING);
// errors may be fixed
} else {
ArrayList combined = new ArrayList();
- combined.add(
- createMultiStatus(
- Messages.ActivityConstraints_beforeMessage,
- beforeStatus,
- IStatus.ERROR));
- combined.add(
- createMultiStatus(
- Messages.ActivityConstraints_afterMessage,
- status,
- IStatus.ERROR));
- return createMultiStatus(
- Messages.ActivityConstraints_rootMessageInitial,
- combined,
- IStatus.ERROR);
+ combined.add(createMultiStatus(Messages.ActivityConstraints_beforeMessage, beforeStatus, IStatus.ERROR));
+ combined.add(createMultiStatus(Messages.ActivityConstraints_afterMessage, status, IStatus.ERROR));
+ return createMultiStatus(Messages.ActivityConstraints_rootMessageInitial, combined, IStatus.ERROR);
}
}
}
@@ -1281,8 +1150,7 @@ public class OperationValidator implements IOperationValidator {
private static ArrayList createList(String commaSeparatedList) {
ArrayList list = new ArrayList();
if (commaSeparatedList != null) {
- StringTokenizer t =
- new StringTokenizer(commaSeparatedList.trim(), ","); //$NON-NLS-1$
+ StringTokenizer t = new StringTokenizer(commaSeparatedList.trim(), ","); //$NON-NLS-1$
while (t.hasMoreTokens()) {
String token = t.nextToken().trim();
if (!token.equals("")) //$NON-NLS-1$
@@ -1299,9 +1167,7 @@ public class OperationValidator implements IOperationValidator {
* @param status
* @return
*/
- private static boolean isBetterStatus(
- ArrayList beforeStatus,
- ArrayList status) {
+ private static boolean isBetterStatus(ArrayList beforeStatus, ArrayList status) {
// if no status at all, then it's a subset
if (status == null || status.size() == 0)
return true;
@@ -1332,42 +1198,45 @@ public class OperationValidator implements IOperationValidator {
}
return true;
}
-
+
public class RequiredFeaturesResult {
-
+
private IStatus status;
private Set requiredFeatures;
-
+
public Set getRequiredFeatures() {
return requiredFeatures;
}
+
public void setRequiredFeatures(Set requiredFeatures) {
this.requiredFeatures = requiredFeatures;
}
+
public void addRequiredFeatures(Set requiredFeatures) {
if (requiredFeatures == null) {
requiredFeatures = new HashSet();
}
this.requiredFeatures.addAll(requiredFeatures);
}
+
public IStatus getStatus() {
return status;
}
+
public void setStatus(IStatus status) {
this.status = status;
}
-
-
+
}
-
+
public static class InternalImport {
-
+
private IImport iimport;
public InternalImport(IImport iimport) {
this.iimport = iimport;
}
-
+
public IImport getImport() {
return iimport;
}
@@ -1375,23 +1244,23 @@ public class OperationValidator implements IOperationValidator {
public void setImport(IImport iimport) {
this.iimport = iimport;
}
-
+
public boolean equals(Object object) {
- if ( ( object == null) || !(object instanceof InternalImport))
+ if ((object == null) || !(object instanceof InternalImport))
return false;
-
- if ( object == this)
+
+ if (object == this)
return true;
-
- return iimport.getVersionedIdentifier().equals( ((InternalImport)object).getImport().getVersionedIdentifier()) && (getImport().getRule() == ((InternalImport)object).getImport().getRule());
+
+ return iimport.getVersionedIdentifier().equals(((InternalImport) object).getImport().getVersionedIdentifier()) && (getImport().getRule() == ((InternalImport) object).getImport().getRule());
}
public int hashCode() {
return iimport.getVersionedIdentifier().hashCode() * iimport.getRule();
}
-
+
}
}
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java
new file mode 100644
index 0000000..8e381c6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.update.internal.verifier;
+
+import java.util.ArrayList;
+
+import org.eclipse.update.operations.IInstallFeatureOperation;
+
+/**
+ * Verifier is responsible for checking plan sanity
+ */
+public abstract class PlanVerifier {
+ /**
+ * Verifies provisioning operation of Classic Updater. Checks if feature can
+ * be installed in an updateable site. Checks if version of already
+ * installed plug-in is planned to downgraded or if update is safe.
+ */
+ public abstract void verify(IInstallFeatureOperation installOperation,
+ ArrayList currentFeatures, ArrayList featuresAfterOperation,
+ ArrayList status);
+
+}
\ No newline at end of file
diff --git a/eclipse/sourceReferences.properties b/eclipse/sourceReferences.properties
new file mode 100644
index 0000000..22ef6b0
--- /dev/null
+++ b/eclipse/sourceReferences.properties
@@ -0,0 +1,299 @@
+#Fri Oct 01 11:18:00 EDT 2010
+org.eclipse.help.appserver,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.appserver;tag\=v20100427
+org.eclipse.ui.forms,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.forms;tag\=r36_v20100702
+org.eclipse.swt.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390x;tag\=v3655c
+org.eclipse.jdt.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug.ui;tag\=v20100602-0830
+org.eclipse.jdt.launching.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.macosx;tag\=v20100505
+org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc;tag\=v20100503
+org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc;tag\=R36x_v20100810
+org.eclipse.core.boot,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.boot;tag\=v20100505
+org.eclipse.ui.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.net;tag\=I20100505-1245
+org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86;tag\=R36x_v20100810
+org.eclipse.jdt.apt.pluggable.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.pluggable.core;tag\=R36_v20100727-0110
+org.eclipse.swt.examples.paint,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.paint;tag\=v3655c
+org.eclipse.core.net.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86;tag\=I20100511-0800
+org.eclipse.core.filesystem.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.macosx;tag\=v20100505
+org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86;tag\=R36x_v20100810
+org.eclipse.ui.navigator.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator.resources;tag\=M20100707-0800
+org.eclipse.equinox.p2.metadata.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository;tag\=v20100513
+org.eclipse.swt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt;tag\=v3655c
+org.eclipse.swt.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86;tag\=v3655c
+org.eclipse.update.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.ui;tag\=v20100512
+org.eclipse.core.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem;tag\=R36x_v20100727-0745
+org.eclipse.core.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.externaltools;tag\=v20100831_r361
+org.eclipse.equinox.registry.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.registry.jmx;tag\=v20100503
+org.eclipse.equinox.io,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io;tag\=v20100503
+org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator;tag\=v20100503
+org.eclipse.pde.api.tools.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ui;tag\=v20100820_r361
+org.eclipse.jdt.debug,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug;tag\=v20100715_r361
+org.eclipse.sdk.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk.examples;tag\=v20100527
+org.eclipse.pde,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde;tag\=v20100625_r361
+org.eclipse.compare.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.core;tag\=I20100526-0800
+org.eclipse.equinox.p2.engine,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine;tag\=v20100606
+org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32;tag\=R36x_v20100810
+org.eclipse.equinox.http,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http;tag\=v20100503
+org.eclipse.swt.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86_64;tag\=v3655c
+org.eclipse.swt.photon.qnx.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.photon.qnx.x86;tag\=v3655c
+org.eclipse.equinox.p2.ui.admin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin;tag\=v20100503
+org.eclipse.equinox.weaving.caching.j9,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9;tag\=v20100503
+org.eclipse.equinox.transforms.xslt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.xslt;tag\=v20100503
+org.eclipse.jface.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.databinding;tag\=I20100601-0800
+org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse;tag\=R36x_v20100823
+org.eclipse.help.base,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.base;tag\=r36_r20100816
+org.eclipse.ui.presentations.r21,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.presentations.r21;tag\=I20100517-1500
+org.eclipse.equinox.frameworkadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin;tag\=v20100503
+org.eclipse.pde.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.launching;tag\=v20100601
+org.eclipse.ui.intro,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro;tag\=v20100427
+org.eclipse.ltk.ui.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.ui.refactoring;tag\=v20100526-0800
+org.eclipse.swt.examples.ole.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.ole.win32;tag\=v3655c
+org.eclipse.ui.workbench.texteditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.texteditor;tag\=r361_v20100714-0800
+org.eclipse.ui.examples.multipageeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.multipageeditor;tag\=I20100509-0800
+org.eclipse.core.filesystem.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86;tag\=v20100505-1235
+org.eclipse.equinox.p2.ui.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery;tag\=v20100519
+org.eclipse.ui.examples.javaeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.javaeditor;tag\=v20100520-0800
+org.eclipse.ant.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.core;tag\=v20100427
+org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp;tag\=R36x_v20100823
+org.eclipse.equinox.p2.updatechecker,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker;tag\=R36x_v20100823
+org.eclipse.debug.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.core;tag\=v20100519
+org.eclipse.ui.examples.views.properties.tabbed.article,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.views.properties.tabbed/org.eclipse.ui.examples.views.properties.tabbed.article;tag\=I20100517-1500
+org.eclipse.core.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding;tag\=I20100601-0800
+org.eclipse.equinox.transforms.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook;tag\=v20100503
+org.eclipse.ui.carbon,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.carbon;tag\=M20100825-0800
+org.eclipse.core.contenttype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.contenttype;tag\=v20100505-1235
+org.eclipse.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.text;tag\=v20100601-1300
+org.eclipse.help.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.ui;tag\=r36_v20100702
+org.eclipse.equinox.servletbridge,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge;tag\=v20100503
+org.eclipse.jdt.apt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.core;tag\=R36_v20100727-0110
+org.eclipse.swt.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86_64;tag\=v3655c
+org.eclipse.equinox.metatype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype;tag\=v20100503
+org.eclipse.pde.ua.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.ui;tag\=v20100504
+org.eclipse.equinox.initializer,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/framework/bundles/org.eclipse.equinox.initializer;tag\=v20100503
+org.eclipse.jsch.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.core;tag\=I20100505-1245
+org.eclipse.equinox.frameworkadmin.equinox,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox;tag\=v20100505
+org.eclipse.osgi.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util;tag\=v20100503
+org.eclipse.search,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.search;tag\=v20100520-0800
+org.eclipse.ui.views,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views;tag\=I20100527-0800
+org.eclipse.equinox.simpleconfigurator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator;tag\=v20100503
+org.eclipse.team.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.ui;tag\=R36x_v20100825-0800
+org.eclipse.equinox.p2.metadata,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata;tag\=v20100601
+org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx.x86_64;tag\=v3655c
+org.eclipse.swt.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.ppc64;tag\=v3655c
+org.eclipse.jdt.compiler.tool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.tool;tag\=v_A68_R36x
+org.eclipse.platform,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform;tag\=r361_v20100714-0800
+org.eclipse.core.databinding.observable,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.observable;tag\=I20100601-0800
+org.eclipse.equinox.weaving.aspectj,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj;tag\=v20100503
+org.eclipse.team.examples.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.examples.filesystem;tag\=I20100526-0800
+org.eclipse.pde.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.core;tag\=v20100902_r361
+org.eclipse.ui.workbench,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench;tag\=M20100826-1330
+org.eclipse.core.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime;tag\=v20100505
+org.eclipse.core.resources.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources.win32.x86;tag\=v20100505-1345
+org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64;tag\=R36x_v20100810
+org.eclipse.help,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help;tag\=v20100524
+org.eclipse.pde.api.tools.ee.j2se15,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se15;tag\=v20100506-0900
+org.junit4,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.junit4;tag\=v20100525
+org.eclipse.update.scheduler,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.scheduler;tag\=v20100512
+org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390;tag\=R36x_v20100823
+org.eclipse.pde.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.junit.runtime;tag\=v20100601
+org.eclipse.osgi.services,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services;tag\=v20100503
+org.eclipse.swt.examples.layouts,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.layouts;tag\=v3655c
+org.eclipse.jface,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface;tag\=M20100825-0800
+org.eclipse.equinox.p2.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery;tag\=v20100503
+org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10;tag\=v20100506-0900
+org.eclipse.equinox.jmx.server,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server;tag\=v20100503
+org.eclipse.equinox.jmx.server.rmi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.rmi;tag\=v20100503
+org.eclipse.jdt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.ui;tag\=r361_v20100825-0800
+org.eclipse.equinox.security,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security;tag\=v20100503
+org.eclipse.equinox.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher;tag\=v20100507
+org.eclipse.core.runtime.compatibility.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.registry;tag\=v20100520
+org.eclipse.jdt.junit.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.core;tag\=r361_v20100825-0800
+org.eclipse.equinox.http.jetty,2.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6;project\="org.eclipse.equinox.http.jetty";tag\=v20100503
+org.eclipse.jdt.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching;tag\=v20100526
+org.eclipse.equinox.p2.ql,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql;tag\=v20100503a
+org.eclipse.ui.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.console;tag\=v20100526
+org.eclipse.equinox.weaving.caching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching;tag\=v20100503
+org.eclipse.swt.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390;tag\=v3655c
+org.eclipse.jdt.apt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.ui;tag\=v20100513-0845
+org.eclipse.equinox.p2.discovery.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility;tag\=v20100518
+org.eclipse.ui.examples.fieldassist,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.fieldassist;tag\=I20100601-0800
+org.eclipse.ui.ide.application,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide.application;tag\=M20100707-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc;tag\=R36x_v20100810
+org.eclipse.equinox.launcher.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx;tag\=R36x_v20100810
+org.eclipse.jdt.junit,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit;tag\=r361_v20100825-0800
+org.eclipse.pde.api.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools;tag\=v20100820_r361
+org.eclipse.core.runtime.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility;tag\=v20100505
+org.eclipse.equinox.p2.directorywatcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher;tag\=R36x_v20100727
+org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc;tag\=R36x_v20100810
+org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.hpux.ia64_32;tag\=v20100505
+org.eclipse.swt.motif.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.aix.ppc;tag\=v3655c
+org.eclipse.ui.examples.undo,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.undo;tag\=I20100509-0800
+org.eclipse.ui.cocoa,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cocoa;tag\=M20100825-0800
+org.eclipse.equinox.http.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry;tag\=v20100503
+org.eclipse.pde.api.tools.ee.jre11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.jre11;tag\=v20100506-0900
+org.eclipse.core.net.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64;tag\=I20100505-1245
+org.eclipse.equinox.jsp.jasper,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper;tag\=v20100421
+org.eclipse.pde.api.tools.ee.j2se14,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se14;tag\=v20100506-0900
+org.eclipse.equinox.p2.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui;tag\=v20100518
+org.eclipse.jdt.launching.ui.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.ui.macosx;tag\=v20100505
+org.eclipse.equinox.p2.ui.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk;tag\=v20100513
+org.eclipse.compare.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples;tag\=I20100505-1245
+org.eclipse.pde.ua.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.core;tag\=v20100504
+org.eclipse.platform.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.isv;tag\=r361_v20100713
+org.eclipse.ant.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.launching;tag\=v20100427
+org.eclipse.equinox.p2.operations,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations;tag\=v20100510
+org.eclipse.compare,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare;tag\=I20100526-0800
+org.eclipse.equinox.http.servletbridge,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.servletbridge;tag\=v20100503
+org.eclipse.jdt.compiler.apt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.apt;tag\=v20100513-0845
+org.eclipse.help.webapp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.webapp;tag\=r36_r20100816
+org.eclipse.pde.ui.templates,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui.templates;tag\=v20100601
+org.eclipse.equinox.p2.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository;tag\=R36x_v20100823
+org.eclipse.equinox.p2.metadata.generator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator;tag\=v20100503a
+org.eclipse.equinox.p2.director.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app;tag\=R36x_v20100823
+org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc;tag\=R36x_v20100810
+org.eclipse.equinox.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app;tag\=R36x_v20100803
+org.eclipse.swt.motif.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.hpux.ia64_32;tag\=v3655c
+org.eclipse.swt.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.x86;tag\=v3655c
+org.eclipse.pde.ds.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ds/org.eclipse.pde.ds.ui;tag\=v20100601
+org.eclipse.core.net.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86;tag\=R36x_v20100825-0800
+org.eclipse.equinox.p2.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console;tag\=v20100601
+org.eclipse.equinox.http.jetty,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6;project\="org.eclipse.equinox.http.jetty";tag\=v20100503
+org.eclipse.swt.examples.browser.demos,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser.demos;tag\=v3655c
+org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64;tag\=R36x_v20100810
+org.eclipse.releng.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.releng.tools;tag\=v20100531
+org.eclipse.pde.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/doc/org.eclipse.pde.doc.user;tag\=v20100727_r361
+org.eclipse.swt.motif.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.linux.x86;tag\=v3655c
+org.eclipse.jface.examples.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.examples.databinding;tag\=I20100601-0800
+org.eclipse.equinox.jmx.client.rmi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.rmi;tag\=v20100503
+org.eclipse.equinox.weaving.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook;tag\=v20100503
+org.eclipse.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.ui;tag\=v20100901_r361
+org.eclipse.core.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net;tag\=I20100511-0800
+org.eclipse.core.filesystem.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.solaris.sparc;tag\=v20100505-1235
+org.eclipse.equinox.p2.touchpoint.natives,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives;tag\=v20100503a
+org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11;tag\=v20100506-0900
+org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64;tag\=R36x_v20100810
+org.eclipse.swt.examples.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser;tag\=v3655c
+org.eclipse.core.filesystem.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86_64;tag\=v20100505-1235
+org.eclipse.equinox.event,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event;tag\=v20100503
+org.eclipse.ui.ide,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide;tag\=M20100825-0800
+org.eclipse.ui.views.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.ui.views.log;tag\=v20100423
+org.eclipse.equinox.p2.jarprocessor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor;tag\=v20100503a
+org.eclipse.ui.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.browser;tag\=v20100517
+org.eclipse.core.expressions,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.expressions;tag\=v20100505
+org.eclipse.core.databinding.beans,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.beans;tag\=I20100601-0800
+org.eclipse.equinox.ds,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds;tag\=R36x_v20100803
+org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64;tag\=R36x_v20100810
+org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86;tag\=R36x_v20100810
+org.eclipse.update.core.linux,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core.linux;tag\=v20100512
+org.eclipse.core.databinding.property,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.property;tag\=I20100601-0800
+org.eclipse.ui.examples.propertysheet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.propertysheet;tag\=I20100509-0800
+org.eclipse.core.jobs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.jobs;tag\=R36x_v20100824
+org.eclipse.swt.gtk.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.ppc;tag\=v3655c
+org.eclipse.swt.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.carbon.macosx;tag\=v3655c
+org.eclipse.pde.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.runtime;tag\=v20100601
+org.eclipse.pde.build,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/build/org.eclipse.pde.build;tag\=R36x_v20100823
+org.eclipse.equinox.p2.reconciler.dropins,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins;tag\=v20100525
+org.eclipse.equinox.device,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device;tag\=v20100503
+org.eclipse.core.commands,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.commands;tag\=I20100512-1500
+org.eclipse.equinox.p2.repository.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools;tag\=R36x_v20100823
+org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x;tag\=R36x_v20100823
+org.eclipse.update.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core;tag\=R36x_v20100629
+org.eclipse.team.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.core;tag\=R36x_v20100825-0800
+org.eclipse.debug.examples.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.ui;tag\=v20100526
+org.eclipse.pde.api.tools.ee.javase16,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.javase16;tag\=v20100506-0900
+org.eclipse.compare.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.win32;tag\=I20100505-1245
+org.eclipse.equinox.p2.installer,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer;tag\=v20100503a
+org.eclipse.debug.examples.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.core;tag\=v20100505
+org.eclipse.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.rcp;tag\=v20100527-0800
+org.eclipse.pde.ds.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ds/org.eclipse.pde.ds.core;tag\=v20100601
+org.eclipse.equinox.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry;tag\=v20100503
+org.eclipse.ui.examples.readmetool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.readmetool;tag\=I20100509-0800
+org.eclipse.jdt.core.manipulation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core.manipulation;tag\=v20100520-0800
+org.eclipse.equinox.http.servlet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet;tag\=v20100503
+org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86;tag\=R36x_v20100810
+org.eclipse.jdt.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.runtime;tag\=v20100526-0800
+org.eclipse.swt.examples.controls,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.controls;tag\=v3655c
+org.eclipse.core.filesystem.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.ppc;tag\=v20100505-1235
+org.eclipse.osgi.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx;tag\=v20100503
+org.eclipse.ui.workbench.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.compatibility;tag\=I20100511-0800
+org.eclipse.core.filesystem.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc;tag\=v20100505-1235
+org.eclipse.swt.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx;tag\=v3655c
+org.eclipse.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui;tag\=M20100826-1330
+org.eclipse.equinox.jmx.client.xmlrpc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.xmlrpc;tag\=v20100503
+org.eclipse.swt.win32.wce_ppc.arm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.wce_ppc.arm;tag\=v3655c
+org.eclipse.compare.examples.xml,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples.xml;tag\=I20100505-1245
+org.eclipse.equinox.jsp.jasper.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper.registry;tag\=v20100503
+org.eclipse.core.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources;tag\=R36x_v20100825-0600
+org.eclipse.team.cvs.ssh2,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ssh2;tag\=I20100526-0800
+org.eclipse.equinox.wireadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin;tag\=v20100503
+org.eclipse.ant.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.ui;tag\=v20100427
+org.eclipse.swt.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.sparc;tag\=v3655c
+org.eclipse.core.net.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64;tag\=I20100505-1245
+org.eclipse.swt.examples.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.launcher;tag\=v3655c
+org.eclipse.equinox.preferences.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.preferences.jmx;tag\=v20100503
+org.eclipse.equinox.p2.garbagecollector,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector;tag\=v20100503
+org.eclipse.equinox.cm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm;tag\=v20100520
+org.eclipse.equinox.common,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.common;tag\=v20100503
+org.eclipse.equinox.p2.director,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director;tag\=R36x_v20100823
+org.eclipse.equinox.p2.publisher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher;tag\=v20100824-2220
+org.eclipse.jdt.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.isv;tag\=r361_v20100714-0800
+org.eclipse.ltk.core.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.core.refactoring;tag\=v20100526-0800
+org.eclipse.jdt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core;tag\=v_A68_R36x
+org.eclipse.equinox.p2.updatesite,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite;tag\=R36x_v20100823
+org.eclipse.update.configurator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.configurator;tag\=v20100512
+org.eclipse.core.filesystem.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86;tag\=R36x_v20100727-0745
+org.eclipse.equinox.p2.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core;tag\=R36x_v20100804
+org.eclipse.swt.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples;tag\=v3655c
+org.eclipse.cvs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.cvs;tag\=v20100414
+org.eclipse.swt.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86;tag\=v3655c
+org.eclipse.equinox.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log;tag\=v20100503
+org.eclipse.equinox.jmx.client,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client;tag\=v20100503
+org.eclipse.ui.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.win32;tag\=I20100509-0800
+org.eclipse.ui.views.properties.tabbed,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views.properties.tabbed;tag\=I20100509-0800
+org.eclipse.equinox.security.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui;tag\=v20100503
+org.eclipse.pde.api.tools.ee.j2se13,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se13;tag\=v20100506-0900
+org.eclipse.swt.motif.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.solaris.sparc;tag\=v3655c
+org.eclipse.equinox.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util;tag\=v20100503
+org.eclipse.equinox.p2.extensionlocation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation;tag\=v20100518
+org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12;tag\=v20100506-0900
+org.eclipse.equinox.concurrent,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent;tag\=v20100503
+org.eclipse.platform.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.user;tag\=r361_v20100825-0800
+org.eclipse.equinox.security.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.macosx;tag\=v20100503
+org.eclipse.equinox.supplement,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement;project\="org.eclipse.equinox.supplement";tag\=v20100503
+org.eclipse.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk;tag\=r361_v20100714-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64;tag\=R36x_v20100810
+org.eclipse.jsch.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.ui;tag\=I20100505-1245
+org.eclipse.core.filesystem.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86_64;tag\=R36x_v20100727-0745
+org.eclipse.equinox.security.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86;tag\=v20100503
+org.eclipse.core.variables,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.variables;tag\=v20100505
+org.eclipse.pde.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui;tag\=v20100810_r361
+org.eclipse.equinox.p2.artifact.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository;tag\=R36x_v20100901
+org.eclipse.core.runtime.compatibility.auth,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.auth;tag\=v20100517
+org.eclipse.osgi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi;tag\=R36x_v20100806
+org.eclipse.ui.intro.universal,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro.universal;tag\=r36_v20100702
+org.eclipse.swt.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.swt.jmx;tag\=v20100503
+org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx;tag\=R36x_v20100810
+org.eclipse.ui.examples.contributions,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.contributions;tag\=I20100509-0800
+org.eclipse.team.cvs.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ui;tag\=R36x_v20100825-0800
+org.eclipse.ui.cheatsheets,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cheatsheets;tag\=v20100427
+org.eclipse.jdt.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.user;tag\=r361_v20100721-0800
+org.eclipse.equinox.useradmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin;tag\=v20100503
+org.eclipse.jface.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.text;tag\=r361_v20100825-0800
+org.eclipse.core.resources.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.core.resources.jmx;tag\=v20100503
+org.eclipse.update.core.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core.win32;tag\=v20100512
+org.eclipse.ui.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.externaltools;tag\=v20100427
+org.eclipse.jdt.junit4.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit4.runtime;tag\=v20100526-0800
+org.eclipse.pde.api.tools.ee.j2se12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se12;tag\=v20100506-0900
+org.eclipse.pde.api.tools.ee.osgiminimum11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11;tag\=v20100506-0900
+org.eclipse.ui.navigator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator;tag\=I20100601-0800
+org.eclipse.equinox.http.jetty,1.1.100=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5;project\="org.eclipse.equinox.http.jetty";tag\=v20100519
+org.eclipse.team.cvs.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.core;tag\=I20100526-0800
+org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10;tag\=v20100506-0900
+org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86;tag\=R36x_v20100810
+org.eclipse.equinox.preferences,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences;tag\=v20100503
+org.eclipse.equinox.jmx.common,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common;tag\=v20100503
+org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler;tag\=v20100507-1815
+org.eclipse.equinox.jmx.vm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.vm;tag\=v20100503
+org.eclipse.ui.editors,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.editors;tag\=r361_v20100825-0800
+org.eclipse.equinox.servletbridge.extensionbundle,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge.extensionbundle;tag\=v20100503
+org.eclipse.core.filebuffers,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filebuffers;tag\=v20100520-0800
+org.eclipse.equinox.ip,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip;tag\=v20100503
+org.eclipse.jdt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt;tag\=r361_v20100714-0800
diff --git a/patches/eclipse-removeSkipMapsCheck.patch b/patches/eclipse-removeSkipMapsCheck.patch
new file mode 100644
index 0000000..c715481
--- /dev/null
+++ b/patches/eclipse-removeSkipMapsCheck.patch
@@ -0,0 +1,16 @@
+Index: eclipse/buildConfigs/master/customTargets.xml
+===================================================================
+RCS file: /cvsroot/eclipse/org.eclipse.releng.eclipsebuilder/eclipse/buildConfigs/master/customTargets.xml,v
+retrieving revision 1.49.4.1
+diff -u -p -r1.49.4.1 customTargets.xml
+--- eclipse/buildConfigs/master/customTargets.xml 28 Jun 2010 19:37:08 -0000 1.49.4.1
++++ eclipse/buildConfigs/master/customTargets.xml 30 Sep 2010 21:09:23 -0000
+@@ -34,7 +34,7 @@
+ <!-- Replace values for mapsCheckoutTag as desired. -->
+ <!-- ===================================================================== -->
+
+- <target name="getMapFiles" depends="checkLocalMaps" unless="skipMaps">
++ <target name="getMapFiles" depends="checkLocalMaps">
+ <property name="mapsCheckoutTag" value="${mapVersionTag}" />
+ <cvs cvsRoot="${mapsRepo}" package="${mapsRoot}" dest="${buildDirectory}/maps" tag="${mapsCheckoutTag}" />
+ </target>
diff --git a/runtests.sh b/runtests.sh
index dfb9188..2924bcc 100755
--- a/runtests.sh
+++ b/runtests.sh
@@ -292,6 +292,8 @@ function cleanAndSetup() {
echo "org.junit.source was not found at ${junitSourceLoc}."
echo "Some failures should be expected in org.eclipse.pde.ui.tests."
fi
+ # these 2 plugins are not being recognized as bundles
+ rm -rf ${eclipseHome}/plugins/org.junit4 ${eclipseHome}/plugins/junit4.jar
fi
}
hooks/post-receive
--
eclipse - Powerful IDE written in java - Debian package.
More information about the pkg-java-commits
mailing list