From 5da93bf4c32cee33e0ad18892e68baffa798245b Mon Sep 17 00:00:00 2001 From: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Date: Sun, 27 Dec 2020 19:37:31 +0000 Subject: [PATCH] New upstream version 8.1.0+dfsg.1 --- .../feature.xml | 2 +- .../pom.xml | 4 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- changelog/pom.xml | 2 +- .../build.properties | 1 - .../feature.xml | 13 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 18 +- .../META-INF/MANIFEST.MF | 28 +- .../pom.xml | 4 +- .../resources/script-macosx.sh | 2 +- .../docker/core/AbstractRegistry.java | 25 +- .../docker/core/DockerException.java | 59 +- .../docker/core/IDockerConnection.java | 4 +- .../docker/core/IDockerConnectionInfo.java | 24 +- .../docker/core/IDockerContainerExit.java | 4 +- .../docker/core/IDockerContainerInfo.java | 4 +- .../docker/core/IDockerContainerInfo2.java | 26 +- .../docker/core/IDockerContainerMount.java | 37 + .../docker/core/IDockerContainerState.java | 4 +- .../docker/core/ContainerFileProxy.java | 19 +- ...DefaultDockerConnectionSettingsFinder.java | 8 +- .../docker/core/DockerBlkioDeviceRate.java | 14 +- .../docker/core/DockerBlkioWeightDevice.java | 4 +- .../docker/core/DockerClientFactory.java | 34 +- .../docker/core/DockerConfParameter.java | 4 +- .../docker/core/DockerConnection.java | 386 +- .../docker/core/DockerConnectionInfo.java | 26 +- .../internal/docker/core/DockerContainer.java | 6 +- .../docker/core/DockerContainerConfig.java | 6 +- .../docker/core/DockerContainerExit.java | 12 +- .../docker/core/DockerContainerInfo.java | 38 +- .../docker/core/DockerContainerMount.java | 80 + .../core/DockerContainerRefreshManager.java | 12 +- .../docker/core/DockerContainerState.java | 15 +- .../internal/docker/core/DockerDevice.java | 4 +- .../docker/core/DockerHostConfig.java | 16 +- .../internal/docker/core/DockerImage.java | 16 +- .../internal/docker/core/DockerImageInfo.java | 4 +- .../internal/docker/core/DockerIpam.java | 6 +- .../docker/core/DockerIpamConfig.java | 4 +- .../internal/docker/core/DockerLogConfig.java | 4 +- .../internal/docker/core/DockerNetwork.java | 4 +- .../docker/core/DockerNetworkConfig.java | 4 +- .../docker/core/DockerNetworkContainer.java | 4 +- .../docker/core/DockerNetworkCreation.java | 4 +- .../docker/core/DockerNetworkSettings.java | 6 +- .../docker/core/DockerPortBinding.java | 4 +- .../docker/core/DockerProgressHandler.java | 10 +- .../docker/core/DockerRestartPolicy.java | 4 +- .../internal/docker/core/DockerUlimit.java | 4 +- .../internal/docker/core/DockerVersion.java | 6 +- .../internal/docker/core/DockerVolume.java | 4 +- .../docker/core/HttpHijackWorkaround.java | 16 +- .../docker/core/ImageSearchResultV1.java | 4 +- .../docker/core/ImageSearchResultV2.java | 11 +- .../docker/core/ProcessMessages.properties | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 4 +- .../.project | 2 +- .../build.properties | 6 +- .../feature.properties | 10 + .../feature.xml | 32 + .../pom.xml | 20 +- .../.classpath | 8 +- .../.project | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 14 + .../.settings/org.eclipse.pde.prefs | 34 + .../META-INF/MANIFEST.MF | 18 + .../build.properties | 3 + .../pom.xml | 25 + .../editor/ls/tests/TestLanguageServers.java | 90 + .../.classpath | 2 +- .../.gitignore | 1 + .../.project | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 10 + .../.settings/org.eclipse.jdt.ui.prefs | 72 + .../.settings/org.eclipse.pde.prefs | 34 + .../META-INF/MANIFEST.MF | 18 + .../build.properties | 8 + .../grammars/Dockerfile.tmLanguage | 160 + .../icons/dockerfile.png | Bin .../plugin.xml | 57 + .../pom.xml | 53 + .../editor/ls/DockerfileLanguageServer.java | 43 + .../ls/InitializeLaunchConfigurations.java | 73 + .../.gitignore | 1 - .../.project | 28 - .../.settings/org.eclipse.jdt.core.prefs | 106 - .../.settings/org.eclipse.m2e.core.prefs | 4 - .../META-INF/MANIFEST.MF | 17 - .../about.html | 36 - .../about.ini | 2 - .../assets/additional-info/ADD.html | 9 - .../assets/additional-info/ARG.html | 13 - .../assets/additional-info/CMD.html | 23 - .../assets/additional-info/COPY.html | 9 - .../assets/additional-info/ENTRYPOINT.html | 17 - .../assets/additional-info/ENV.html | 13 - .../assets/additional-info/EXPOSE.html | 7 - .../assets/additional-info/FROM.html | 20 - .../assets/additional-info/HEALTHCHECK.html | 7 - .../assets/additional-info/LABEL.html | 21 - .../assets/additional-info/MAINTAINER.html | 7 - .../assets/additional-info/ONBUILD.html | 10 - .../assets/additional-info/RUN.html | 17 - .../assets/additional-info/SHELL.html | 9 - .../assets/additional-info/USER.html | 9 - .../assets/additional-info/VOLUME.html | 11 - .../assets/additional-info/WORKDIR.html | 9 - .../assets/instructions.txt | 17 - .../build.properties | 9 - .../icons/about_docker.png | Bin 3193 -> 0 bytes .../plugin.xml | 88 - .../pom.xml | 13 - .../internal/docker/editor/Activator.java | 51 - .../docker/editor/DockerConfiguration.java | 65 - .../docker/editor/DockerDocumentProvider.java | 210 - .../internal/docker/editor/DockerEditor.java | 40 - .../internal/docker/editor/DockerHover.java | 101 - .../editor/DockerPresentationReconciler.java | 35 - .../internal/docker/editor/Messages.java | 30 - .../editor/assist/CompletionProcessor.java | 102 - .../editor/assist/CompletionProposal.java | 91 - .../docker/editor/messages.properties | 4 - .../editor/scanner/DockerCommentScanner.java | 40 - .../scanner/DockerInstructionScanner.java | 46 - .../scanner/DockerPartitionScanner.java | 39 - .../editor/scanner/InstructionWordRule.java | 62 - .../docker/editor/syntax/SyntaxColors.java | 42 - .../editor/syntax/SyntaxProblemReporter.java | 120 - .../syntax/SyntaxReconcilingStrategy.java | 63 - .../docker/editor/util/AssetLoader.java | 68 - .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 13 +- .../launchers/DockerAllBotTest Local.launch | 597 +- .../launchers/DockerAllBotTest Mockito.launch | 598 +- .../pom.xml | 2 +- .../tests/container/BasicSecurityTest.java | 6 +- .../tests/container/ContainerLogTest.java | 4 +- .../tests/container/LabelsTest.java | 6 +- .../tests/container/LinkContainersTest.java | 4 +- .../tests/container/NetworkModeTest.java | 6 +- .../tests/container/PrivilegedModeTest.java | 6 +- .../tests/container/UnconfinedTest.java | 6 +- .../tests/container/VariablesTest.java | 14 +- .../tests/container/VolumeMountTest.java | 6 +- .../tests/image/HierarchyViewTest.java | 6 +- .../tests/mock/MockDockerConnection.java | 6 +- .../integration/tests/mock/MockUtils.java | 6 +- .../tests/ui/SearchDialogTest.java | 7 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 14 +- .../META-INF/MANIFEST.MF | 5 +- .../pom.xml | 2 +- .../ui/resources/DockerConnection.java | 10 +- .../reddeer/utils/BrowserContentsCheck.java | 2 + .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 16 +- .../META-INF/MANIFEST.MF | 13 +- .../pom.xml | 2 +- .../core/DockerConnectionManagerTest.java | 4 +- .../docker/core/DockerExceptionTest.java | 64 +- .../docker/core/DockerClientFactoryTest.java | 6 +- .../docker/core/DockerConnectionTest.java | 10 +- .../core/DockerImageQualifierTestCase.java | 6 +- .../ui/commands/CommandUtilsSWTBotTest.java | 4 +- .../BuildDockerImageShortcutSWTBotTest.java | 16 +- .../ui/launch/DockerComposeSWTBotTest.java | 17 +- .../testutils/MockContainerConfigFactory.java | 4 +- .../ui/testutils/MockContainerFactory.java | 4 +- .../testutils/MockContainerInfoFactory.java | 15 +- .../ui/testutils/MockDockerClientFactory.java | 18 +- .../MockDockerConnectionFactory.java | 6 +- .../docker/ui/testutils/MockImageFactory.java | 4 +- .../ui/testutils/MockImageInfoFactory.java | 6 +- .../MockImageSearchResultFactory.java | 4 +- .../views/DockerContainersViewSWTBotTest.java | 4 +- .../views/DockerExplorerViewSWTBotTest.java | 6 +- .../DockerImageHierarchyViewSWTBotTest.java | 10 +- .../ui/views/DockerImagesViewSWTBotTest.java | 4 +- .../EditDockerConnectionSWTBotTest.java | 10 +- .../ui/wizards/ImagePullSWTBotTest.java | 9 +- .../ui/wizards/ImagePushSWTBotTests.java | 8 +- .../docker/ui/wizards/ImageRunSWTBotTest.java | 23 +- .../ui/wizards/ImageSearchSWTBotTest.java | 7 +- .../NewDockerConnectionSWTBotTest.java | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 10 +- .../.settings/org.eclipse.jdt.ui.prefs | 13 +- .../META-INF/MANIFEST.MF | 13 +- .../org.eclipse.linuxtools.docker.ui/pom.xml | 4 +- .../linuxtools/docker/ui/Activator.java | 5 +- .../docker/ui/launch/ContainerLauncher.java | 166 +- .../docker/ui/wizards/ImageSearch.java | 32 +- .../ui/commands/CommandMessages.properties | 1 + .../CopyFromContainerCommandHandler.java | 141 +- .../ui/commands/PullImageCommandHandler.java | 4 +- .../ui/commands/RunImageCommandHandler.java | 19 +- .../DockerComposeConsolePageParticipant.java | 6 +- .../ui/launch/ContainerCommandProcess.java | 8 +- ...ckerImageLaunchConfigurationConstants.java | 6 +- .../ui/launch/LaunchConfigurationUtils.java | 57 +- ...ockerImageLaunchConfigurationDelegate.java | 18 +- .../docker/ui/launch/RunImagePortsTab.java | 13 +- .../views/ConnectionInfoContentProvider.java | 4 +- .../ContainerInspectContentProvider.java | 14 +- .../ui/views/ImageInspectPropertySection.java | 9 +- .../ui/wizards/ContainerDataVolumeDialog.java | 36 +- .../ui/wizards/EditDockerConnectionPage.java | 4 +- .../internal/docker/ui/wizards/ImageRun.java | 41 +- .../ui/wizards/ImageRunSelectionModel.java | 21 +- .../ui/wizards/ImageRunSelectionPage.java | 52 +- .../ui/wizards/NewDockerConnectionPage.java | 4 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 9 +- .../pom.xml | 2 +- .../jdt/docker/launcher/ImageQuery.java | 16 +- containers/pom.xml | 10 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 5 + .../META-INF/MANIFEST.MF | 3 +- gcov/org.eclipse.linuxtools.gcov.core/pom.xml | 2 +- .../gcov/{Activator.java => Constants.java} | 30 +- .../internal/gcov/action/OpenGCAction.java | 22 +- .../action/SwitchContentProviderAction.java | 49 +- .../internal/gcov/dialog/OpenGCDialog.java | 16 +- .../internal/gcov/parser/CovManager.java | 9 +- .../gcov/parser/GcdaRecordsParser.java | 12 +- .../gcov/parser/GcnoRecordsParser.java | 4 +- .../internal/gcov/view/CovView.java | 12 +- .../internal/gcov/view/CovViewer.java | 11 +- .../annotatedsource/OpenSourceFileAction.java | 28 +- gcov/org.eclipse.linuxtools.gcov.docs/pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- gcov/org.eclipse.linuxtools.gcov.test/pom.xml | 2 +- gcov/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../org.eclipse.linuxtools.gprof.docs/pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../bigtest_gprof_input/gmon.out | Bin 0 -> 109532 bytes .../foocpp_gprof_input/gmon.out | Bin 0 -> 1380 bytes .../foox_gprof_input/gmon.out | Bin 0 -> 1222 bytes .../partially-pg-build_gprof_input/gmon.out | Bin 0 -> 433 bytes .../org.eclipse.linuxtools.gprof.test/pom.xml | 2 +- gprof/org.eclipse.linuxtools.gprof/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- gprof/org.eclipse.linuxtools.gprof/pom.xml | 2 +- .../linuxtools/internal/gprof/Activator.java | 3 +- .../internal/gprof/parser/GmonDecoder.java | 23 +- .../internal/gprof/view/GmonView.java | 2 +- gprof/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.javadocs/pom.xml | 2 +- javadocs/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 37 +- .../META-INF/MANIFEST.MF | 2 +- man/org.eclipse.linuxtools.man.core/pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 37 +- .../.settings/org.eclipse.jdt.ui.prefs | 23 +- .../META-INF/MANIFEST.MF | 2 +- man/org.eclipse.linuxtools.man.help/pom.xml | 2 +- .../internal/man/help/ManualToc.java | 2 +- man/pom.xml | 2 +- oprofile/eclipse-oprofile.metainfo.xml | 20 - .../.gitignore | 5 - .../.project | 17 - .../feature.properties | 16 - .../feature.xml | 73 - .../p2.inf | 3 - .../.classpath | 7 - .../.gitignore | 5 - .../.settings/org.eclipse.jdt.core.prefs | 99 - .../.settings/org.eclipse.jdt.ui.prefs | 54 - .../META-INF/MANIFEST.MF | 13 - .../about.html | 36 - .../build.properties | 8 - .../plugin.properties | 14 - .../pom.xml | 44 - .../resources/dev/oprofile/0/event | 1 - .../resources/dev/oprofile/1/event | 1 - .../resources/dev/oprofile/cpu_type | 1 - .../test_check-event_invalid_counter.xml | 4 - .../test_check-event_invalid_umask.xml | 4 - .../resources/test_check-event_ok.xml | 4 - .../resources/test_info.xml | 140 - .../resources/test_info_0ctrs.xml | 4 - .../test_info_pre_parse_expected.xml | 5048 ----------------- .../resources/test_info_pre_parse_raw.xml | 638 --- .../resources/test_model-data.xml | 88 - .../resources/test_model-data_expected.xml | 403 -- .../test_model-data_multiple_image.xml | 239 - .../resources/test_model-data_raw.xml | 1175 ---- .../resources/test_sessions.xml | 30 - .../oprofile/core/tests/AllCoreTests.java | 22 - .../core/tests/TestCheckEventsParse.java | 71 - .../core/tests/TestCheckEventsPreParse.java | 179 - .../oprofile/core/tests/TestDataModel.java | 63 - .../oprofile/core/tests/TestInfoParse.java | 417 -- .../core/tests/TestModelDataParse.java | 184 - .../core/tests/TestModelDataPreParse.java | 151 - .../core/tests/TestSessionsParse.java | 109 - .../.classpath | 7 - .../.gitignore | 7 - .../.project | 34 - .../.settings/org.eclipse.jdt.core.prefs | 109 - .../META-INF/MANIFEST.MF | 26 - .../META-INF/p2.inf | 2 - .../about.html | 36 - .../build.properties | 7 - .../plugin.properties | 14 - .../pom.xml | 26 - .../oprofile/core/IOpxmlProvider.java | 72 - .../internal/oprofile/core/Oprofile.java | 302 - .../oprofile/core/OprofileCorePlugin.java | 162 - .../oprofile/core/OprofileProperties.java | 33 - .../oprofile/core/daemon/OpEvent.java | 112 - .../internal/oprofile/core/daemon/OpInfo.java | 233 - .../oprofile/core/daemon/OpUnitMask.java | 321 -- .../core/daemon/OprofileDaemonEvent.java | 135 - .../core/daemon/OprofileDaemonOptions.java | 129 - .../core/linux/LinuxOpxmlProvider.java | 99 - .../oprofile/core/linux/OpxmlRunner.java | 348 -- .../oprofile/core/model/OpModelEvent.java | 78 - .../oprofile/core/model/OpModelImage.java | 146 - .../oprofile/core/model/OpModelRoot.java | 84 - .../oprofile/core/model/OpModelSample.java | 58 - .../oprofile/core/model/OpModelSession.java | 74 - .../oprofile/core/model/OpModelSymbol.java | 94 - .../oprofile/core/oprofile.properties | 42 - .../core/opxml/AbstractDataAdapter.java | 83 - .../oprofile/core/opxml/EventIdCache.java | 256 - .../core/opxml/OprofileSAXHandler.java | 192 - .../oprofile/core/opxml/OpxmlConstants.java | 45 - .../oprofile/core/opxml/XMLProcessor.java | 92 - .../opxml/checkevent/CheckEventAdapter.java | 131 - .../checkevent/CheckEventsProcessor.java | 58 - .../core/opxml/info/DefaultsProcessor.java | 49 - .../core/opxml/info/EventListProcessor.java | 230 - .../oprofile/core/opxml/info/InfoAdapter.java | 470 -- .../core/opxml/info/OpInfoProcessor.java | 78 - .../opxml/modeldata/DependentProcessor.java | 82 - .../opxml/modeldata/ModelDataAdapter.java | 380 -- .../opxml/modeldata/ModelDataProcessor.java | 98 - .../opxml/modeldata/SamplesProcessor.java | 71 - .../opxml/modeldata/SymbolsProcessor.java | 89 - .../core/opxml/sessions/SessionManager.java | 301 - .../opxml/sessions/SessionsProcessor.java | 95 - .../.gitignore | 5 - .../.project | 22 - .../.settings/org.eclipse.jdt.core.prefs | 7 - .../OProfile/User_Guide/Example-Project.html | 63 - .../User_Guide/Installation-and-Set-Up.html | 155 - .../User_Guide/Launching-A-Profile.html | 122 - .../OProfile/User_Guide/OProfile-View.html | 148 - .../User_Guide/Profiling-Configuration.html | 236 - .../OProfile/User_Guide/Remote-OProfile.html | 88 - .../OProfile/User_Guide/Troubleshooting.html | 136 - .../User_Guide/Updating-This-Document.html | 54 - .../OProfile/User_Guide/User-Guide.html | 58 - .../images/Callgraph_timing_submenu.png | Bin 24212 -> 0 bytes .../images/Icon-oprofile_dependent.gif | Bin 364 -> 0 bytes .../User_Guide/images/Icon-oprofile_event.gif | Bin 617 -> 0 bytes .../User_Guide/images/Icon-oprofile_image.gif | Bin 357 -> 0 bytes .../images/Icon-oprofile_sample.gif | Bin 561 -> 0 bytes .../images/Icon-oprofile_session.gif | Bin 372 -> 0 bytes .../images/Icon-oprofile_symbol.gif | Bin 89 -> 0 bytes .../images/Oprofile_event_timer.png | Bin 19610 -> 0 bytes .../images/Oprofile_eventconfig.png | Bin 46239 -> 0 bytes .../images/Oprofile_global_config.png | Bin 99190 -> 0 bytes .../images/Oprofile_global_prefs.png | Bin 28988 -> 0 bytes .../images/Oprofile_manual_dialog.png | Bin 12126 -> 0 bytes .../images/Oprofile_manual_shortcut.png | Bin 27319 -> 0 bytes .../images/Oprofile_original_submenu.png | Bin 23836 -> 0 bytes .../User_Guide/images/Oprofile_proj_prefs.png | Bin 30564 -> 0 bytes .../User_Guide/images/Oprofile_tab.png | Bin 75682 -> 0 bytes .../User_Guide/images/Remote-oprofile.png | Bin 70099 -> 0 bytes .../images/Screenshot-global_config.png | Bin 46090 -> 0 bytes .../Screenshot-installscript_error_dialog.png | Bin 126665 -> 0 bytes .../images/Screenshot-one-click_launch.png | Bin 93966 -> 0 bytes .../Screenshot-opcontrol_consolehelper.png | Bin 18444 -> 0 bytes .../Screenshot-oprofile_event_timer.png | Bin 37908 -> 0 bytes .../Screenshot-oprofile_eventconfig.png | Bin 66787 -> 0 bytes ...Screenshot-oprofile_global_differences.png | Bin 52748 -> 0 bytes .../Screenshot-oprofile_save_session.png | Bin 8805 -> 0 bytes .../images/Screenshot-oprofile_view_full.png | Bin 40368 -> 0 bytes .../Screenshot-oprofiled_log_reader.png | Bin 35457 -> 0 bytes .../images/Screenshot-remote-oprofile.png | Bin 110060 -> 0 bytes .../META-INF/MANIFEST.MF | 10 - .../about.html | 36 - .../book.css | 59 - .../build-helper.xml | 50 - .../build.properties | 16 - .../doc/notices.html | 22 - .../images/home.gif | Bin 582 -> 0 bytes .../images/next.gif | Bin 327 -> 0 bytes .../images/prev.gif | Bin 327 -> 0 bytes .../plugin.properties | 2 - .../plugin.xml | 11 - .../pom.xml | 46 - .../toc-doc.xml | 5 - .../toc.xml | 49 - .../.classpath | 7 - .../.gitignore | 5 - .../.project | 28 - .../.settings/org.eclipse.jdt.core.prefs | 100 - .../.settings/org.eclipse.jdt.ui.prefs | 54 - .../META-INF/MANIFEST.MF | 14 - .../about.html | 36 - .../build.properties | 8 - .../plugin.properties | 14 - .../pom.xml | 44 - .../resources/primeTest/.cproject | 593 -- .../resources/primeTest/.project | 81 - .../resources/primeTest/primeTest.c | 36 - .../resources/sleepTest/.cproject | 593 -- .../resources/sleepTest/.project | 81 - .../resources/sleepTest/sleepTest.c | 6 - .../oprofile/launch/tests/TestLaunching.java | 113 - .../tests/TestLaunchingExternalProject.java | 118 - .../oprofile/launch/tests/TestSetup.java | 169 - .../tests/utils/LaunchTestingOptions.java | 29 - .../utils/OprofileTestingEventConfigTab.java | 103 - ...ngOprofileLaunchConfigurationDelegate.java | 61 - .../.gitignore | 5 - .../.project | 34 - .../.settings/org.eclipse.jdt.core.prefs | 104 - .../META-INF/MANIFEST.MF | 33 - .../about.html | 36 - .../build.properties | 10 - .../icons/event_tab.gif | Bin 617 -> 0 bytes .../icons/global_tab.gif | Bin 362 -> 0 bytes .../icons/profile_manual_run.png | Bin 720 -> 0 bytes .../icons/profile_run.png | Bin 604 -> 0 bytes .../plugin.properties | 33 - .../plugin.xml | 80 - .../pom.xml | 26 - .../launch/OprofileLaunchMessages.java | 32 - .../oprofile/launch/OprofileLaunchPlugin.java | 92 - .../configuration/AbstractEventConfigTab.java | 1417 ----- .../configuration/EventConfigCache.java | 95 - .../launch/configuration/LaunchOptions.java | 185 - .../launch/configuration/OprofileCounter.java | 300 - .../configuration/OprofileEventConfigTab.java | 69 - .../OprofileLaunchConfigurationTabGroup.java | 23 - .../configuration/OprofileSetupTab.java | 371 -- ...ctOprofileLaunchConfigurationDelegate.java | 404 -- .../OprofileLaunchConfigurationDelegate.java | 87 - .../launching/OprofileLaunchShortcut.java | 65 - .../oprofile/launch/oprofilelaunch.properties | 84 - .../.gitignore | 5 - .../build.properties | 5 - .../feature.properties | 16 - .../feature.xml | 53 - .../p2.inf | 3 - .../pom.xml | 64 - .../.classpath | 7 - .../.gitignore | 5 - .../.project | 34 - .../.settings/org.eclipse.jdt.core.prefs | 99 - .../META-INF/MANIFEST.MF | 25 - .../about.html | 36 - .../build.properties | 10 - .../icons/event_tab.gif | Bin 617 -> 0 bytes .../icons/global_tab.gif | Bin 362 -> 0 bytes .../icons/profile_run.png | Bin 604 -> 0 bytes .../plugin.properties | 23 - .../plugin.xml | 35 - .../pom.xml | 17 - ...fileRemoteLaunchConfigurationTabGroup.java | 28 - ...fileRemoteLaunchConfigurationDelegate.java | 92 - .../.classpath | 7 - .../.gitignore | 5 - .../.settings/org.eclipse.jdt.core.prefs | 95 - .../META-INF/MANIFEST.MF | 16 - .../about.html | 36 - .../build.properties | 9 - .../plugin.properties | 14 - .../pom.xml | 26 - .../resources/test_model-data.xml | 88 - .../test_model-data_multiple_image.xml | 239 - .../resources/test_model-data_nodepimage.xml | 46 - .../linuxtools/oprofile/tests/TestPlugin.java | 60 - .../oprofile/tests/TestingOpModelEvent.java | 76 - .../oprofile/tests/TestingOpModelEvent2.java | 76 - .../oprofile/tests/TestingOpModelEvent3.java | 75 - .../oprofile/tests/TestingOpModelEvent4.java | 32 - .../oprofile/tests/TestingOpModelRoot.java | 40 - .../.classpath | 7 - .../.gitignore | 5 - .../.project | 28 - .../.settings/org.eclipse.jdt.core.prefs | 99 - .../.settings/org.eclipse.jdt.ui.prefs | 54 - .../META-INF/MANIFEST.MF | 13 - .../about.html | 36 - .../build.properties | 6 - .../plugin.properties | 14 - .../pom.xml | 36 - .../oprofile/ui/tests/TestUiDataModel.java | 681 --- .../.classpath | 7 - .../.gitignore | 5 - .../.project | 34 - .../.settings/org.eclipse.jdt.core.prefs | 117 - .../META-INF/MANIFEST.MF | 25 - .../about.html | 36 - .../build.properties | 10 - .../icons/annotate.png | Bin 450 -> 0 bytes .../icons/dependent.gif | Bin 364 -> 0 bytes .../icons/dump.gif | Bin 245 -> 0 bytes .../icons/error.png | Bin 378 -> 0 bytes .../icons/event.gif | Bin 617 -> 0 bytes .../icons/image.gif | Bin 357 -> 0 bytes .../icons/oprofile_view.png | Bin 604 -> 0 bytes .../icons/sample.gif | Bin 561 -> 0 bytes .../icons/session.gif | Bin 372 -> 0 bytes .../icons/symbol.gif | Bin 89 -> 0 bytes .../plugin.properties | 31 - .../plugin.xml | 23 - .../pom.xml | 26 - .../oprofile/ui/OprofileUiMessages.java | 35 - .../oprofile/ui/OprofileUiPlugin.java | 147 - .../oprofile/ui/oprofileui.properties | 51 - .../internal/oprofile/ui/view/OcountView.java | 90 - .../oprofile/ui/view/OprofileView.java | 177 - .../ui/view/OprofileViewContentProvider.java | 59 - .../view/OprofileViewDeleteSessionAction.java | 79 - .../view/OprofileViewDoubleClickListener.java | 92 - .../ui/view/OprofileViewLabelProvider.java | 43 - .../ui/view/OprofileViewLogReaderAction.java | 163 - .../ui/view/OprofileViewRefreshAction.java | 31 - .../OprofileViewSaveDefaultSessionAction.java | 177 - .../ui/view/OprofileViewSortAction.java | 54 - .../oprofile/ui/model/IUiModelElement.java | 52 - .../oprofile/ui/model/UiModelDependent.java | 111 - .../oprofile/ui/model/UiModelError.java | 78 - .../oprofile/ui/model/UiModelEvent.java | 104 - .../oprofile/ui/model/UiModelImage.java | 131 - .../oprofile/ui/model/UiModelRoot.java | 136 - .../oprofile/ui/model/UiModelSample.java | 112 - .../oprofile/ui/model/UiModelSession.java | 124 - .../oprofile/ui/model/UiModelSorting.java | 69 - .../oprofile/ui/model/UiModelSymbol.java | 173 - oprofile/pom.xml | 43 - .../feature.xml | 2 +- .../pom.xml | 4 +- perf/org.eclipse.linuxtools.perf.doc/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.perf.tests/pom.xml | 2 +- perf/org.eclipse.linuxtools.perf/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- perf/org.eclipse.linuxtools.perf/pom.xml | 2 +- .../linuxtools/internal/perf/PerfCore.java | 2 +- .../linuxtools/internal/perf/PerfPlugin.java | 3 +- perf/pom.xml | 2 +- pom.xml | 34 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 19 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.binutils/pom.xml | 2 +- .../STCSourceNotFoundEditorInput.java | 6 +- .../link2source/STLink2SourceSupport.java | 27 +- .../feature.xml | 5 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 72 + .../META-INF/MANIFEST.MF | 8 +- .../pom.xml | 4 +- .../charts/actions/ChartAction.java | 18 +- .../charts/actions/SaveChartAction.java | 228 - .../charts/provider/IChartField.java | 2 + .../dataviewers/charts/Activator.java | 3 +- .../{ChartDialog.java => ChartDialog2.java} | 14 +- .../charts/view}/ChartFactory.java | 30 +- .../dataviewers/charts/view/ChartView.java | 35 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 9 +- .../pom.xml | 4 +- .../dataviewers/piechart/PieChart.java | 19 +- .../piechart/PieChartPaintListener.java | 12 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../actions/STCollapseAllTreeAction.java | 9 +- .../actions/STCollapseSelectionAction.java | 7 +- .../actions/STDataViewersSortAction.java | 7 +- .../actions/STExpandAllTreeAction.java | 9 +- .../actions/STExpandSelectionAction.java | 7 +- .../actions/STExportToCSVAction.java | 7 +- .../actions/STHideShowColAction.java | 13 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../plugin.xml | 2 +- .../pom.xml | 2 +- .../launch/CProfilingOptionsTab.java | 6 +- .../profiling/launch/ProfileLaunchPlugin.java | 5 +- .../profiling/launch/RemoteProxyCMainTab.java | 12 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 1 - .../.settings/org.eclipse.jdt.core.prefs | 95 - .../META-INF/MANIFEST.MF | 1 - .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../profiling/ui/ProfileUIPlugin.java | 5 +- .../profiling/ui/CProjectBuildHelpers.java | 3 + .../profiling/ui/ProfileUIUtils.java | 14 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../linuxtools/rdt/proxy/tests/AllTests.java | 3 - .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.rdt.proxy/pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../remote/proxy/tests/AbstractProxyTest.java | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.ssh.proxy/pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- profiling/pom.xml | 2 +- releng/container-build/Dockerfile | 41 + .../category.xml | 66 +- .../pom.xml | 2 +- .../category.xml | 17 +- .../pom.xml | 2 +- releng/org.eclipse.linuxtools.target/.project | 6 - .../linuxtools-e4.12.target | 100 - .../linuxtools-e4.13.target | 100 - .../linuxtools-e4.16.target | 110 + .../linuxtools-e4.17.target | 125 + .../linuxtools-e4.18.target | 125 + releng/org.eclipse.linuxtools.target/pom.xml | 8 +- releng/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- rpm/org.eclipse.linuxtools.rpm.core/pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../form/tests/ICreaterepoTestConstants.java | 3 +- .../wizard/tests/CreaterepoWizardTest.java | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../internal/rpm/createrepo/Activator.java | 3 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 3 +- .../pom.xml | 2 +- .../internal/rpm/ui/editor/Activator.java | 3 +- .../SpecfileElementHyperlinkDetector.java | 3 +- rpm/org.eclipse.linuxtools.rpm.ui/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- rpm/org.eclipse.linuxtools.rpm.ui/pom.xml | 2 +- .../rpm/ui/NewProjectCreationPage.java | 7 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- rpm/org.eclipse.linuxtools.rpmstubby/pom.xml | 2 +- .../rpmstubby/parser/PythonEggParser.java | 6 +- rpm/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 16 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../callgraph/core/SystemTapView.java | 21 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.callgraph/pom.xml | 2 +- .../internal/callgraph/CallgraphView.java | 4 +- .../treeviewer/StapTreeLabelProvider.java | 14 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 17 +- .../META-INF/MANIFEST.MF | 5 +- .../plugin.xml | 37 - .../pom.xml | 2 +- .../graphing/ui/GraphingUIPlugin.java | 7 +- .../charts/AbstractChartWithAxisBuilder.java | 14 +- .../graphing/ui/charts/AreaChartBuilder.java | 6 +- .../graphing/ui/charts/BarChart.java | 12 +- .../graphing/ui/charts/BarChartBuilder.java | 12 +- .../graphing/ui/charts/LineChartBuilder.java | 36 +- .../graphing/ui/charts/PieChartBuilder.java | 8 +- .../ui/charts/ScatterChartBuilder.java | 8 +- .../listeners/BarChartMouseMoveListener.java | 10 +- .../ChartWithAxisMouseMoveListener.java | 10 +- .../listeners/PieChartMouseMoveListener.java | 6 +- .../ToolTipChartMouseMoveListener.java | 8 +- .../ui/handlers/SaveGraphImageHandler.java | 70 - .../graphing/ui/GraphDisplaySet.java | 12 +- .../ui/charts/AbstractChartBuilder.java | 14 +- .../AbstractChartMouseMoveListener.java | 8 +- .../graphing/ui/widgets/GraphComposite.java | 4 +- .../ui/widgets/GraphDiscreteXControl.java | 8 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 4 +- .../pom.xml | 2 +- .../swtbot/TestCreateSystemtapScript.java | 10 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../internal/systemtap/ui/ide/IDEPlugin.java | 10 +- .../SystemTapScriptGraphOptionsTab.java | 6 +- ...SystemTapScriptLaunchConfigurationTab.java | 5 +- .../launcher/SystemTapScriptOptionsTab.java | 6 +- .../systemtap/ui/ide/views/BrowserView.java | 5 +- systemtap/pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 84 +- .../.settings/org.eclipse.jdt.ui.prefs | 8 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.linuxtools.vagrant.ui/pom.xml | 2 +- .../OpenVagrantfileCommandHandler.java | 7 +- vagrant/pom.xml | 6 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 21 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../cachegrind/CachegrindLabelProvider.java | 10 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../valgrind/launch/ValgrindLaunchPlugin.java | 5 +- .../valgrind/launch/ValgrindOptionsTab.java | 39 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 5 +- .../pom.xml | 2 +- .../massif/tests/ChartExportTest.java | 13 +- .../valgrind/massif/tests/ChartTests.java | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../.settings/org.eclipse.jdt.ui.prefs | 19 +- .../META-INF/MANIFEST.MF | 6 +- .../pom.xml | 2 +- .../massif/MassifTreeLabelProvider.java | 7 +- .../valgrind/massif/MassifViewPart.java | 36 +- .../valgrind/massif/charting/ChartEditor.java | 30 +- .../massif/charting/ChartEditorInput.java | 8 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../feature.xml | 2 +- .../pom.xml | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../editor/wizards/NewSuppressionWizard.java | 4 +- .../.classpath | 8 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 9 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 2 +- .../valgrind/ui/CoreMessagesViewer.java | 6 +- valgrind/pom.xml | 2 +- 979 files changed, 5355 insertions(+), 31995 deletions(-) rename oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/AllLaunchTests.java => containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo2.java (50%) create mode 100644 containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerMount.java create mode 100644 containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerMount.java rename {oprofile/org.eclipse.linuxtools.oprofile.remote-feature => containers/org.eclipse.linuxtools.docker.editor.ls-feature}/.project (84%) rename {oprofile/org.eclipse.linuxtools.oprofile-feature => containers/org.eclipse.linuxtools.docker.editor.ls-feature}/build.properties (50%) create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.properties create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.xml rename {oprofile/org.eclipse.linuxtools.oprofile-feature => containers/org.eclipse.linuxtools.docker.editor.ls-feature}/pom.xml (73%) rename containers/{org.eclipse.linuxtools.docker.editor => org.eclipse.linuxtools.docker.editor.ls.tests}/.classpath (67%) rename {oprofile/org.eclipse.linuxtools.oprofile.core.tests => containers/org.eclipse.linuxtools.docker.editor.ls.tests}/.project (91%) create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.jdt.core.prefs create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.pde.prefs create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/META-INF/MANIFEST.MF create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/build.properties create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/pom.xml create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls.tests/src/org/eclipse/linuxtools/docker/editor/ls/tests/TestLanguageServers.java rename {oprofile/org.eclipse.linuxtools.oprofile.launch => containers/org.eclipse.linuxtools.docker.editor.ls}/.classpath (95%) create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/.gitignore rename {oprofile/org.eclipse.linuxtools.oprofile.tests => containers/org.eclipse.linuxtools.docker.editor.ls}/.project (91%) create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.core.prefs create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.ui.prefs create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.pde.prefs create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/META-INF/MANIFEST.MF create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/build.properties create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/grammars/Dockerfile.tmLanguage rename containers/{org.eclipse.linuxtools.docker.editor => org.eclipse.linuxtools.docker.editor.ls}/icons/dockerfile.png (100%) create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/plugin.xml create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/pom.xml create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/DockerfileLanguageServer.java create mode 100644 containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/InitializeLaunchConfigurations.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/.gitignore delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/.project delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.core.prefs delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.m2e.core.prefs delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/META-INF/MANIFEST.MF delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/about.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/about.ini delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ADD.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ARG.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/CMD.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/COPY.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENTRYPOINT.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENV.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/EXPOSE.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/FROM.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/HEALTHCHECK.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/LABEL.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/MAINTAINER.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ONBUILD.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/RUN.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/SHELL.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/USER.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/VOLUME.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/WORKDIR.html delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/assets/instructions.txt delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/build.properties delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/icons/about_docker.png delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/plugin.xml delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/pom.xml delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Activator.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerConfiguration.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerDocumentProvider.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerEditor.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerHover.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerPresentationReconciler.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Messages.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProcessor.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProposal.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/messages.properties delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerCommentScanner.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerInstructionScanner.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerPartitionScanner.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/InstructionWordRule.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxColors.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxProblemReporter.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxReconcilingStrategy.java delete mode 100644 containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/util/AssetLoader.java rename gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/{Activator.java => Constants.java} (54%) create mode 100644 gprof/org.eclipse.linuxtools.gprof.test/bigtest_gprof_input/gmon.out create mode 100644 gprof/org.eclipse.linuxtools.gprof.test/foocpp_gprof_input/gmon.out create mode 100644 gprof/org.eclipse.linuxtools.gprof.test/foox_gprof_input/gmon.out create mode 100644 gprof/org.eclipse.linuxtools.gprof.test/partially-pg-build_gprof_input/gmon.out delete mode 100644 oprofile/eclipse-oprofile.metainfo.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile-feature/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile-feature/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile-feature/feature.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile-feature/feature.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile-feature/p2.inf delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/0/event delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/1/event delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/cpu_type delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_counter.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_umask.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_ok.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_0ctrs.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_expected.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_raw.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_expected.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_multiple_image.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_raw.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_sessions.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/AllCoreTests.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsPreParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestDataModel.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestInfoParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataPreParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestSessionsParse.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/p2.inf delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/IOpxmlProvider.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/Oprofile.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileCorePlugin.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileProperties.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpEvent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpInfo.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpUnitMask.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonEvent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonOptions.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/LinuxOpxmlProvider.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/OpxmlRunner.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelEvent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelImage.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelRoot.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSample.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSession.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSymbol.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/oprofile.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/AbstractDataAdapter.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/EventIdCache.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OprofileSAXHandler.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OpxmlConstants.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/XMLProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventAdapter.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventsProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/DefaultsProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/EventListProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/InfoAdapter.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/OpInfoProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/DependentProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataAdapter.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SamplesProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SymbolsProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionManager.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionsProcessor.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Example-Project.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Updating-This-Document.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/User-Guide.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Callgraph_timing_submenu.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_dependent.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_event.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_image.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_sample.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_session.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_symbol.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_event_timer.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_eventconfig.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_config.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_prefs.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_dialog.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_shortcut.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_original_submenu.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_proj_prefs.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_tab.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Remote-oprofile.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-global_config.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-installscript_error_dialog.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-one-click_launch.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-opcontrol_consolehelper.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_event_timer.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_eventconfig.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_global_differences.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_save_session.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_view_full.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofiled_log_reader.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-remote-oprofile.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/book.css delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/build-helper.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/doc/notices.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/images/home.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/images/next.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/images/prev.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/toc-doc.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.doc/toc.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.cproject delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/primeTest.c delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.cproject delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/sleepTest.c delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunching.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunchingExternalProject.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestSetup.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/LaunchTestingOptions.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/OprofileTestingEventConfigTab.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/TestingOprofileLaunchConfigurationDelegate.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/icons/event_tab.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/icons/global_tab.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_manual_run.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_run.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchMessages.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchPlugin.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/AbstractEventConfigTab.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/EventConfigCache.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/LaunchOptions.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileCounter.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileLaunchConfigurationTabGroup.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileSetupTab.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/AbstractOprofileLaunchConfigurationDelegate.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchConfigurationDelegate.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchShortcut.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/oprofilelaunch.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/p2.inf delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote-feature/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/event_tab.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/global_tab.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/profile_run.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/configuration/OprofileRemoteLaunchConfigurationTabGroup.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/launching/OprofileRemoteLaunchConfigurationDelegate.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_multiple_image.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_nodepimage.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestPlugin.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent2.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent3.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent4.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelRoot.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui.tests/src/org/eclipse/linuxtools/oprofile/ui/tests/TestUiDataModel.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/.classpath delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/.gitignore delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/.project delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.core.prefs delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/META-INF/MANIFEST.MF delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/about.html delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/build.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/annotate.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dependent.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dump.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/error.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/event.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/image.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/oprofile_view.png delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/sample.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/session.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/icons/symbol.gif delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/pom.xml delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiMessages.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiPlugin.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/oprofileui.properties delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OcountView.java delete mode 100755 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileView.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewContentProvider.java delete mode 100755 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDeleteSessionAction.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDoubleClickListener.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLabelProvider.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLogReaderAction.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewRefreshAction.java delete mode 100755 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSaveDefaultSessionAction.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSortAction.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/IUiModelElement.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelDependent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelError.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelEvent.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelImage.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelRoot.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSample.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSession.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSorting.java delete mode 100644 oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSymbol.java delete mode 100644 oprofile/pom.xml rename {oprofile/org.eclipse.linuxtools.oprofile.core => profiling/org.eclipse.linuxtools.binutils}/.settings/org.eclipse.jdt.ui.prefs (84%) create mode 100644 profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.ui.prefs delete mode 100755 profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/SaveChartAction.java rename profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/{ChartDialog.java => ChartDialog2.java} (97%) mode change 100755 => 100644 rename profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/{dataviewers/charts/provider => internal/dataviewers/charts/view}/ChartFactory.java (88%) rename profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/{ => internal}/dataviewers/piechart/PieChart.java (92%) rename profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/{ => internal}/dataviewers/piechart/PieChartPaintListener.java (97%) delete mode 100644 profiling/org.eclipse.linuxtools.profiling.ui.capability/.settings/org.eclipse.jdt.core.prefs create mode 100644 releng/container-build/Dockerfile delete mode 100644 releng/org.eclipse.linuxtools.target/linuxtools-e4.12.target delete mode 100644 releng/org.eclipse.linuxtools.target/linuxtools-e4.13.target create mode 100644 releng/org.eclipse.linuxtools.target/linuxtools-e4.16.target create mode 100644 releng/org.eclipse.linuxtools.target/linuxtools-e4.17.target create mode 100644 releng/org.eclipse.linuxtools.target/linuxtools-e4.18.target rename {containers/org.eclipse.linuxtools.docker.editor => systemtap/org.eclipse.linuxtools.callgraph.core}/.settings/org.eclipse.jdt.ui.prefs (85%) rename {oprofile/org.eclipse.linuxtools.oprofile.ui => systemtap/org.eclipse.linuxtools.systemtap.graphing.ui}/.settings/org.eclipse.jdt.ui.prefs (81%) delete mode 100644 systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/handlers/SaveGraphImageHandler.java rename {oprofile/org.eclipse.linuxtools.oprofile.launch => valgrind/org.eclipse.linuxtools.valgrind.massif}/.settings/org.eclipse.jdt.ui.prefs (83%) diff --git a/changelog/org.eclipse.linuxtools.changelog-feature/feature.xml b/changelog/org.eclipse.linuxtools.changelog-feature/feature.xml index a5440a0e6..d01021f5a 100644 --- a/changelog/org.eclipse.linuxtools.changelog-feature/feature.xml +++ b/changelog/org.eclipse.linuxtools.changelog-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.changelog" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/changelog/org.eclipse.linuxtools.changelog-feature/pom.xml b/changelog/org.eclipse.linuxtools.changelog-feature/pom.xml index 5ff90e378..dd1845bbc 100644 --- a/changelog/org.eclipse.linuxtools.changelog-feature/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools ChangeLog Feature</name> diff --git a/changelog/org.eclipse.linuxtools.changelog.c-feature/feature.xml b/changelog/org.eclipse.linuxtools.changelog.c-feature/feature.xml index 471037aab..43deccf70 100644 --- a/changelog/org.eclipse.linuxtools.changelog.c-feature/feature.xml +++ b/changelog/org.eclipse.linuxtools.changelog.c-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.changelog.c" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/changelog/org.eclipse.linuxtools.changelog.c-feature/pom.xml b/changelog/org.eclipse.linuxtools.changelog.c-feature/pom.xml index 39aa731cf..5a183650b 100644 --- a/changelog/org.eclipse.linuxtools.changelog.c-feature/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.c-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.c</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools ChangeLog Feature for C/C++</name> diff --git a/changelog/org.eclipse.linuxtools.changelog.core/.classpath b/changelog/org.eclipse.linuxtools.changelog.core/.classpath index 43b986286..1db08c6b4 100644 --- a/changelog/org.eclipse.linuxtools.changelog.core/.classpath +++ b/changelog/org.eclipse.linuxtools.changelog.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/changelog/org.eclipse.linuxtools.changelog.core/.settings/org.eclipse.jdt.core.prefs b/changelog/org.eclipse.linuxtools.changelog.core/.settings/org.eclipse.jdt.core.prefs index adbfd21c9..19f2f53c0 100644 --- a/changelog/org.eclipse.linuxtools.changelog.core/.settings/org.eclipse.jdt.core.prefs +++ b/changelog/org.eclipse.linuxtools.changelog.core/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -112,4 +114,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/changelog/org.eclipse.linuxtools.changelog.core/META-INF/MANIFEST.MF b/changelog/org.eclipse.linuxtools.changelog.core/META-INF/MANIFEST.MF index 276c50a20..05636d895 100644 --- a/changelog/org.eclipse.linuxtools.changelog.core/META-INF/MANIFEST.MF +++ b/changelog/org.eclipse.linuxtools.changelog.core/META-INF/MANIFEST.MF @@ -19,7 +19,7 @@ Require-Bundle: org.eclipse.team.ui, org.eclipse.core.resources, org.eclipse.ui.genericeditor;bundle-version="1.0.0" Export-Package: org.eclipse.linuxtools.changelog.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Eclipse-ExtensibleAPI: true Automatic-Module-Name: org.eclipse.linuxtools.changelog.core diff --git a/changelog/org.eclipse.linuxtools.changelog.core/pom.xml b/changelog/org.eclipse.linuxtools.changelog.core/pom.xml index ea704402c..438a9ca90 100644 --- a/changelog/org.eclipse.linuxtools.changelog.core/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.core</artifactId> diff --git a/changelog/org.eclipse.linuxtools.changelog.cparser/.classpath b/changelog/org.eclipse.linuxtools.changelog.cparser/.classpath index 43b986286..1db08c6b4 100644 --- a/changelog/org.eclipse.linuxtools.changelog.cparser/.classpath +++ b/changelog/org.eclipse.linuxtools.changelog.cparser/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/changelog/org.eclipse.linuxtools.changelog.cparser/.settings/org.eclipse.jdt.core.prefs b/changelog/org.eclipse.linuxtools.changelog.cparser/.settings/org.eclipse.jdt.core.prefs index 84f4e5be6..95b447668 100644 --- a/changelog/org.eclipse.linuxtools.changelog.cparser/.settings/org.eclipse.jdt.core.prefs +++ b/changelog/org.eclipse.linuxtools.changelog.cparser/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -78,6 +79,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -109,4 +111,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/changelog/org.eclipse.linuxtools.changelog.cparser/META-INF/MANIFEST.MF b/changelog/org.eclipse.linuxtools.changelog.cparser/META-INF/MANIFEST.MF index 2794f8fcb..e394f855a 100644 --- a/changelog/org.eclipse.linuxtools.changelog.cparser/META-INF/MANIFEST.MF +++ b/changelog/org.eclipse.linuxtools.changelog.cparser/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 2.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Require-Bundle: org.eclipse.cdt.core;bundle-version="5.2.0", org.eclipse.cdt.ui;bundle-version="5.2.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.changelog.core;bundle-version="2.6.3" Import-Package: org.eclipse.core.resources Automatic-Module-Name: org.eclipse.linuxtools.changelog.cparser diff --git a/changelog/org.eclipse.linuxtools.changelog.cparser/pom.xml b/changelog/org.eclipse.linuxtools.changelog.cparser/pom.xml index f37715bd0..a0fc72274 100644 --- a/changelog/org.eclipse.linuxtools.changelog.cparser/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.cparser/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.cparser</artifactId> diff --git a/changelog/org.eclipse.linuxtools.changelog.doc/pom.xml b/changelog/org.eclipse.linuxtools.changelog.doc/pom.xml index 58d64c465..c5a848e9d 100644 --- a/changelog/org.eclipse.linuxtools.changelog.doc/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.doc/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.doc</artifactId> diff --git a/changelog/org.eclipse.linuxtools.changelog.java-feature/feature.xml b/changelog/org.eclipse.linuxtools.changelog.java-feature/feature.xml index 53f18e6d9..064b7b5b6 100644 --- a/changelog/org.eclipse.linuxtools.changelog.java-feature/feature.xml +++ b/changelog/org.eclipse.linuxtools.changelog.java-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.changelog.java" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/changelog/org.eclipse.linuxtools.changelog.java-feature/pom.xml b/changelog/org.eclipse.linuxtools.changelog.java-feature/pom.xml index 497811130..efa667fba 100644 --- a/changelog/org.eclipse.linuxtools.changelog.java-feature/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.java-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.java</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools ChangeLog Feature for Java</name> diff --git a/changelog/org.eclipse.linuxtools.changelog.javaparser/.classpath b/changelog/org.eclipse.linuxtools.changelog.javaparser/.classpath index 43b986286..1db08c6b4 100644 --- a/changelog/org.eclipse.linuxtools.changelog.javaparser/.classpath +++ b/changelog/org.eclipse.linuxtools.changelog.javaparser/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/changelog/org.eclipse.linuxtools.changelog.javaparser/.settings/org.eclipse.jdt.core.prefs b/changelog/org.eclipse.linuxtools.changelog.javaparser/.settings/org.eclipse.jdt.core.prefs index b693e57d0..74720a961 100644 --- a/changelog/org.eclipse.linuxtools.changelog.javaparser/.settings/org.eclipse.jdt.core.prefs +++ b/changelog/org.eclipse.linuxtools.changelog.javaparser/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -78,6 +79,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -109,4 +111,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/changelog/org.eclipse.linuxtools.changelog.javaparser/META-INF/MANIFEST.MF b/changelog/org.eclipse.linuxtools.changelog.javaparser/META-INF/MANIFEST.MF index b9161a178..b666d71c0 100644 --- a/changelog/org.eclipse.linuxtools.changelog.javaparser/META-INF/MANIFEST.MF +++ b/changelog/org.eclipse.linuxtools.changelog.javaparser/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 2.7.0.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="3.3.0", org.eclipse.jdt.ui;bundle-version="3.3.0" Bundle-Vendor: %Bundle-Vendor -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.changelog.core;bundle-version="2.6.3" Automatic-Module-Name: org.eclipse.linuxtools.changelog.parsers.java diff --git a/changelog/org.eclipse.linuxtools.changelog.javaparser/pom.xml b/changelog/org.eclipse.linuxtools.changelog.javaparser/pom.xml index b5df7d89a..f9f688c5c 100644 --- a/changelog/org.eclipse.linuxtools.changelog.javaparser/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.javaparser/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.parsers.java</artifactId> diff --git a/changelog/org.eclipse.linuxtools.changelog.tests/.classpath b/changelog/org.eclipse.linuxtools.changelog.tests/.classpath index 43b986286..1db08c6b4 100644 --- a/changelog/org.eclipse.linuxtools.changelog.tests/.classpath +++ b/changelog/org.eclipse.linuxtools.changelog.tests/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/changelog/org.eclipse.linuxtools.changelog.tests/.settings/org.eclipse.jdt.core.prefs b/changelog/org.eclipse.linuxtools.changelog.tests/.settings/org.eclipse.jdt.core.prefs index 89403a779..649554d9b 100644 --- a/changelog/org.eclipse.linuxtools.changelog.tests/.settings/org.eclipse.jdt.core.prefs +++ b/changelog/org.eclipse.linuxtools.changelog.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/changelog/org.eclipse.linuxtools.changelog.tests/META-INF/MANIFEST.MF b/changelog/org.eclipse.linuxtools.changelog.tests/META-INF/MANIFEST.MF index 42174e87b..0b8f2271c 100644 --- a/changelog/org.eclipse.linuxtools.changelog.tests/META-INF/MANIFEST.MF +++ b/changelog/org.eclipse.linuxtools.changelog.tests/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.jdt.ui, org.junit;bundle-version="4.8.1" Fragment-Host: org.eclipse.linuxtools.changelog.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.cdt.core, org.eclipse.cdt.core.model, diff --git a/changelog/org.eclipse.linuxtools.changelog.tests/pom.xml b/changelog/org.eclipse.linuxtools.changelog.tests/pom.xml index e417303ea..6ad37c1e2 100644 --- a/changelog/org.eclipse.linuxtools.changelog.tests/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.tests</artifactId> diff --git a/changelog/org.eclipse.linuxtools.changelog.ui.tests/.classpath b/changelog/org.eclipse.linuxtools.changelog.ui.tests/.classpath index 43b986286..1db08c6b4 100644 --- a/changelog/org.eclipse.linuxtools.changelog.ui.tests/.classpath +++ b/changelog/org.eclipse.linuxtools.changelog.ui.tests/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/changelog/org.eclipse.linuxtools.changelog.ui.tests/.settings/org.eclipse.jdt.core.prefs b/changelog/org.eclipse.linuxtools.changelog.ui.tests/.settings/org.eclipse.jdt.core.prefs index f08a6e7a0..d885a09e5 100644 --- a/changelog/org.eclipse.linuxtools.changelog.ui.tests/.settings/org.eclipse.jdt.core.prefs +++ b/changelog/org.eclipse.linuxtools.changelog.ui.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/changelog/org.eclipse.linuxtools.changelog.ui.tests/META-INF/MANIFEST.MF b/changelog/org.eclipse.linuxtools.changelog.ui.tests/META-INF/MANIFEST.MF index 84565c82f..d5a5b2706 100644 --- a/changelog/org.eclipse.linuxtools.changelog.ui.tests/META-INF/MANIFEST.MF +++ b/changelog/org.eclipse.linuxtools.changelog.ui.tests/META-INF/MANIFEST.MF @@ -9,5 +9,5 @@ Require-Bundle: org.eclipse.swtbot.go, Fragment-Host: org.eclipse.linuxtools.changelog.core Import-Package: org.eclipse.core.resources, org.eclipse.jdt.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Automatic-Module-Name: org.eclipse.linuxtools.changelog.ui.tests diff --git a/changelog/org.eclipse.linuxtools.changelog.ui.tests/pom.xml b/changelog/org.eclipse.linuxtools.changelog.ui.tests/pom.xml index 976a1ebbf..e1a1f3057 100644 --- a/changelog/org.eclipse.linuxtools.changelog.ui.tests/pom.xml +++ b/changelog/org.eclipse.linuxtools.changelog.ui.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-changelog-parent</artifactId> <groupId>org.eclipse.linuxtools.changelog</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.changelog.ui.tests</artifactId> diff --git a/changelog/pom.xml b/changelog/pom.xml index f6fae0e88..0979807ed 100644 --- a/changelog/pom.xml +++ b/changelog/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.changelog</groupId> diff --git a/containers/org.eclipse.linuxtools.docker-feature/build.properties b/containers/org.eclipse.linuxtools.docker-feature/build.properties index 155886c3e..ad437bffa 100644 --- a/containers/org.eclipse.linuxtools.docker-feature/build.properties +++ b/containers/org.eclipse.linuxtools.docker-feature/build.properties @@ -4,5 +4,4 @@ bin.includes = feature.xml,\ src.includes = feature.xml,\ feature.properties,\ build.properties,\ - .classpath,\ .project diff --git a/containers/org.eclipse.linuxtools.docker-feature/feature.xml b/containers/org.eclipse.linuxtools.docker-feature/feature.xml index d65a5874f..b7ef3fac4 100644 --- a/containers/org.eclipse.linuxtools.docker-feature/feature.xml +++ b/containers/org.eclipse.linuxtools.docker-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.docker.feature" label="%featureName" - version="4.4.0.qualifier" + version="5.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> @@ -23,6 +23,10 @@ <update label="Linux Tools Docker Update Site" url="http://download.eclipse.org/linuxtools/update-docker"/> </url> + <includes + id="org.eclipse.linuxtools.docker.editor.ls.feature" + version="0.0.0"/> + <plugin id="org.eclipse.linuxtools.docker.core" download-size="0" @@ -44,11 +48,4 @@ version="0.0.0" unpack="false"/> - <plugin - id="org.eclipse.linuxtools.docker.editor" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - </feature> diff --git a/containers/org.eclipse.linuxtools.docker-feature/pom.xml b/containers/org.eclipse.linuxtools.docker-feature/pom.xml index 08b4c3976..3eefe5c20 100644 --- a/containers/org.eclipse.linuxtools.docker-feature/pom.xml +++ b/containers/org.eclipse.linuxtools.docker-feature/pom.xml @@ -14,12 +14,12 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> <name>Linux Tools Docker Tooling Feature</name> diff --git a/containers/org.eclipse.linuxtools.docker.core/.classpath b/containers/org.eclipse.linuxtools.docker.core/.classpath index cf36b5611..bc57d2383 100644 --- a/containers/org.eclipse.linuxtools.docker.core/.classpath +++ b/containers/org.eclipse.linuxtools.docker.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"/> <classpathentry kind="output" path="target/classes"/> diff --git a/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.core.prefs index e6aabf54e..fb282c74e 100644 --- a/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -112,7 +114,8 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 diff --git a/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.ui.prefs b/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.ui.prefs index 446b84724..51b731035 100644 --- a/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.ui.prefs +++ b/containers/org.eclipse.linuxtools.docker.core/.settings/org.eclipse.jdt.ui.prefs @@ -15,31 +15,40 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_functional_interfaces=true sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true sp_cleanup.format_source_code_changes_only=true sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false sp_cleanup.make_private_fields_final=true sp_cleanup.make_type_abstract_if_missing_method=false sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.objects_equals=false sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true sp_cleanup.remove_redundant_type_arguments=true -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -48,11 +57,14 @@ sp_cleanup.remove_unused_private_fields=true sp_cleanup.remove_unused_private_members=false sp_cleanup.remove_unused_private_methods=true sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=true sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false @@ -60,3 +72,5 @@ sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/containers/org.eclipse.linuxtools.docker.core/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.core/META-INF/MANIFEST.MF index 4c06d09e5..d7221c920 100644 --- a/containers/org.eclipse.linuxtools.docker.core/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.core/META-INF/MANIFEST.MF @@ -2,31 +2,35 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Docker Core Plugin Bundle-SymbolicName: org.eclipse.linuxtools.docker.core;singleton:=true -Bundle-Version: 4.4.0.qualifier +Bundle-Version: 5.1.0.qualifier Bundle-Activator: org.eclipse.linuxtools.docker.core.Activator Bundle-Vendor: Eclipse Linux Tools Require-Bundle: org.eclipse.core.runtime;bundle-version="3.12.0", org.eclipse.core.resources;bundle-version="3.9.0", - com.google.guava;bundle-version="21.0.0", + com.google.guava;bundle-version="27.1.0", org.eclipse.equinox.registry;bundle-version="0.0.0", org.eclipse.equinox.security, org.eclipse.osgi, - com.spotify.docker.client;bundle-version="[8.9.2,9.0.0)", - com.github.jnr.unixsocket;bundle-version="0.4.0", - com.github.jnr.enxio;bundle-version="0.5.0", - org.glassfish.jersey.core.jersey-client;bundle-version="2.14.0", - org.glassfish.jersey.media.jersey-media-json-jackson;bundle-version="2.14.0", - org.glassfish.jersey.core.jersey-common;bundle-version="2.14.0", + org.mandas.docker-client;bundle-version="3.2.1", + com.github.jnr.unixsocket;bundle-version="0.28.0", + com.github.jnr.enxio;bundle-version="0.25.0", + org.glassfish.jersey.core.jersey-client;bundle-version="2.30.1", + org.glassfish.jersey.media.jersey-media-json-jackson;bundle-version="2.30.1", + org.glassfish.jersey.core.jersey-common;bundle-version="2.30.1", + org.glassfish.jersey.containers.servlet;bundle-version="2.3.0.1", + org.glassfish.jersey.inject.jersey-hk2;bundle-version="2.3.0.1", org.eclipse.tm.terminal.view.core;bundle-version="4.0.0", org.eclipse.debug.core;bundle-version="3.10.100", - javax.xml.bind;bundle-version="2.2.0", - javax.xml.stream;bundle-version="1.0.1" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 + javax.annotation;bundle-version="1.3.5", + org.apache.httpcomponents.httpcore;bundle-version="4.4.12", + org.apache.httpcomponents.httpclient;bundle-version="4.5.10" +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.docker.core, org.eclipse.linuxtools.internal.docker.core;x-friends:="org.eclipse.linuxtools.docker.ui,org.eclipse.linuxtools.docker.ui.tests,org.eclipse.linuxtools.docker.integration.tests" -Import-Package: com.fasterxml.jackson.annotation;version="2.5.0", +Import-Package: com.fasterxml.jackson.annotation;version="2.10.3", javax.ws.rs;version="2.0.1", javax.ws.rs.core;version="2.0.1", + javax.xml.bind;version="2.3.3", javax.ws.rs.client;version="2.0.1" Automatic-Module-Name: org.eclipse.linuxtools.docker.core diff --git a/containers/org.eclipse.linuxtools.docker.core/pom.xml b/containers/org.eclipse.linuxtools.docker.core/pom.xml index 769686638..698d4524d 100644 --- a/containers/org.eclipse.linuxtools.docker.core/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.core/pom.xml @@ -4,10 +4,10 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.core</artifactId> <packaging>eclipse-plugin</packaging> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> </project> diff --git a/containers/org.eclipse.linuxtools.docker.core/resources/script-macosx.sh b/containers/org.eclipse.linuxtools.docker.core/resources/script-macosx.sh index 049a0d593..c60d0df0e 100755 --- a/containers/org.eclipse.linuxtools.docker.core/resources/script-macosx.sh +++ b/containers/org.eclipse.linuxtools.docker.core/resources/script-macosx.sh @@ -1,2 +1,2 @@ #!/usr/bin/env sh -$SHELL -i -l -c "env | grep DOCKER" +$SHELL -l -c "env | grep DOCKER" diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/AbstractRegistry.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/AbstractRegistry.java index 8509f1788..7655a97a7 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/AbstractRegistry.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/AbstractRegistry.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. - * + * Copyright (c) 2016, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -41,9 +41,8 @@ import org.eclipse.linuxtools.internal.docker.core.RepositoryTagV2; import org.eclipse.osgi.util.NLS; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.jackson.JacksonFeature; - -import com.spotify.docker.client.ObjectMapperProvider; -import com.spotify.docker.client.messages.ImageSearchResult; +import org.mandas.docker.client.ObjectMapperProvider; +import org.mandas.docker.client.messages.ImageSearchResult; /** * @since 2.0 @@ -69,7 +68,7 @@ public abstract class AbstractRegistry implements IRegistry { public abstract String getServerAddress(); /** - * + * * @return the server host (and optional port) to prepend to an image name * when pushing or pulling */ @@ -139,7 +138,7 @@ public abstract class AbstractRegistry implements IRegistry { WebTarget queryImagesResource; if (isVersion2()) { - final GenericType<ImageSearchResultV2> IMAGE_SEARCH_RESULT_LIST = new GenericType<ImageSearchResultV2>() { + final GenericType<ImageSearchResultV2> IMAGE_SEARCH_RESULT_LIST = new GenericType<>() { }; ImageSearchResultV2 cisr = null; queryImagesResource = client.target(getHTTPServerAddress()) @@ -161,7 +160,7 @@ public abstract class AbstractRegistry implements IRegistry { .collect(Collectors.toList())); } else { ImageSearchResultV1 pisr = null; - final GenericType<ImageSearchResultV1> IMAGE_SEARCH_RESULT_LIST = new GenericType<ImageSearchResultV1>() { + final GenericType<ImageSearchResultV1> IMAGE_SEARCH_RESULT_LIST = new GenericType<>() { }; int page = 0; try { @@ -211,7 +210,7 @@ public abstract class AbstractRegistry implements IRegistry { /** * Retrieves the list of tags for a given repository, assuming that the * target registry is Docker Hub. - * + * * @param client * the client to use * @param repository @@ -300,7 +299,7 @@ public abstract class AbstractRegistry implements IRegistry { /** * Retrieves the list of tags for a given repository, assuming that the * target registry is a registry v2 instance. - * + * * @param client * the client to use * @param repository @@ -316,7 +315,7 @@ public abstract class AbstractRegistry implements IRegistry { private List<IRepositoryTag> retrieveTagsFromRegistryV1(final Client client, final String repository) throws InterruptedException, ExecutionException { - final GenericType<Map<String, String>> REPOSITORY_TAGS_RESULT_LIST = new GenericType<Map<String, String>>() { + final GenericType<Map<String, String>> REPOSITORY_TAGS_RESULT_LIST = new GenericType<>() { }; final WebTarget queryTagsResource = client .target(getHTTPServerAddress()).path("v1") //$NON-NLS-1$ @@ -330,7 +329,7 @@ public abstract class AbstractRegistry implements IRegistry { /** * Retrieves the list of tags for a given repository, assuming that the * target registry is a registry v1 instance. - * + * * @param client * the client to use * @param repository @@ -346,7 +345,7 @@ public abstract class AbstractRegistry implements IRegistry { private List<IRepositoryTag> retrieveTagsFromRegistryV2(final Client client, final String repository) throws InterruptedException, ExecutionException { - final GenericType<RepositoryTagV2> REPOSITORY_TAGS_RESULT_LIST = new GenericType<RepositoryTagV2>() { + final GenericType<RepositoryTagV2> REPOSITORY_TAGS_RESULT_LIST = new GenericType<>() { }; final WebTarget queryTagsResource = client .target(getHTTPServerAddress()).path("v2") //$NON-NLS-1$ diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/DockerException.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/DockerException.java index 57f7ded01..12fad3b96 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/DockerException.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/DockerException.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -12,38 +12,65 @@ *******************************************************************************/ package org.eclipse.linuxtools.docker.core; +import org.mandas.docker.client.exceptions.DockerRequestException; + public class DockerException extends Exception { private static final long serialVersionUID = 1L; - private String JSON_MESSAGE_PREFIX = "{\"message\":\""; //$NON-NLS-1$ - private String JSON_MESSAGE_SUFFIX = "\"}"; //$NON-NLS-1$ + private static String JSON_MESSAGE_PREFIX = "{\"message\":\""; //$NON-NLS-1$ + private static String JSON_MESSAGE_SUFFIX = "\"}"; //$NON-NLS-1$ public DockerException(final String message) { super(message); } public DockerException(final String message, final Throwable cause) { - super(message, cause); + super(calculateMessage(message, cause), cause); } public DockerException(final Throwable cause) { - super(cause); + super(calculateMessage(null, cause), cause); } @Override public String getMessage() { - String s = super.getMessage(); - // Bug 499917 - temporarily massage any message we get back from docker - // client if it is in JSON format. This code can be removed once docker - // client has fixed itself to work with error messages from docker - // 1.12.0 and beyond. - if (s.startsWith(JSON_MESSAGE_PREFIX)) { - s = s.substring(JSON_MESSAGE_PREFIX.length()); - s = s.replaceAll(JSON_MESSAGE_SUFFIX, ""); //$NON-NLS-1$ - return s; - } return super.getMessage(); } + static private String calculateMessage(final String message, final Throwable cause) { + Throwable dre = cause; + // Search for DockerRequestException + while (dre != null && !(dre instanceof DockerRequestException)) { + dre = dre.getCause(); + } + + // Handle DockerRequestException + if (dre != null) { + // Bug 499917 - temporarily massage any message we get back from + // docker client if it is in JSON format. This code can be removed + // once docker client has fixed itself to work with error messages + // from docker 1.12.0 and beyond. + DockerRequestException re = (DockerRequestException) dre; + String s = re.getResponseBody(); + if (s.startsWith(JSON_MESSAGE_PREFIX)) { + s = s.substring(JSON_MESSAGE_PREFIX.length()); + s = s.replaceAll(JSON_MESSAGE_SUFFIX, ""); //$NON-NLS-1$ + if (message != null) { + return message + "; " + s; + } else { + return s; + } + } + } + + // As it's not possible to select the super-constructor Throwable's + // behavior must be simulated + if ((message == null) && (cause != null)) { + return cause.toString(); + } else { + return message; + } + } + } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnection.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnection.java index fcc164911..364e0e86c 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnection.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnection.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -23,7 +23,7 @@ import org.eclipse.linuxtools.internal.docker.core.DockerContainerRefreshManager import org.eclipse.linuxtools.internal.docker.core.TCPConnectionSettings; import org.eclipse.linuxtools.internal.docker.core.UnixSocketConnectionSettings; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.exceptions.DockerCertificateException; public interface IDockerConnection { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnectionInfo.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnectionInfo.java index 88c975dcb..c5ef0bac1 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnectionInfo.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerConnectionInfo.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. - * + * Copyright (c) 2016, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -40,12 +40,14 @@ public interface IDockerConnectionInfo { * @return the DockerRootDir */ String getDockerRootDir(); - + /** * @return the executionDriver + * @deprecated this will be removed in Docker Tooling 5.0.0 */ + @Deprecated String getExecutionDriver(); - + /** * @return the fileDescriptors */ @@ -70,17 +72,17 @@ public interface IDockerConnectionInfo { * @return the initSha1 */ String getInitSha1(); - + /** * @return the IndexServerAddress */ String getIndexServerAddress(); - + /** * @return the IPv4Forwarding flag */ boolean isIPv4Forwarding(); - + /** * @return the kernelVersion */ @@ -90,7 +92,7 @@ public interface IDockerConnectionInfo { * @return the Labels */ List<String> getLabels(); - + /** * @return number of CPUs */ @@ -100,17 +102,17 @@ public interface IDockerConnectionInfo { * @return total memory */ long getTotalMemory(); - + /** * @return VM name */ String getName(); - + /** * @return VM ID */ String getId(); - + /** * @return the storageDriver */ diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerExit.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerExit.java index b89525809..93d11619e 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerExit.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerExit.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo.java index ff05b7d34..65aa178c6 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/AllLaunchTests.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo2.java similarity index 50% rename from oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/AllLaunchTests.java rename to containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo2.java index ade92644e..3ec289821 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/AllLaunchTests.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerInfo2.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * + * Copyright (c) 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -8,15 +8,19 @@ * SPDX-License-Identifier: EPL-2.0 * * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation + * Red Hat - Initial Contribution *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.launch.tests; +package org.eclipse.linuxtools.docker.core; + +import java.util.List; + +/** + * @since 4.7 + * @author jjohnstn + * + */ +public interface IDockerContainerInfo2 { + + List<IDockerContainerMount> mounts(); -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -@RunWith(Suite.class) -@Suite.SuiteClasses({ - TestLaunching.class, TestSetup.class, TestLaunchingExternalProject.class -}) -public class AllLaunchTests { } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerMount.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerMount.java new file mode 100644 index 000000000..28fa894eb --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerMount.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.linuxtools.docker.core; + +/** + * @since 4.7 + * + */ +public interface IDockerContainerMount { + + String type(); + + String name(); + + String source(); + + String destination(); + + String driver(); + + String mode(); + + Boolean rw(); + + String propagation(); + +} diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerState.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerState.java index 571aef126..c33182f5f 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerState.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/docker/core/IDockerContainerState.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ContainerFileProxy.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ContainerFileProxy.java index 207625f14..95d1246e4 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ContainerFileProxy.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ContainerFileProxy.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. - * + * Copyright (c) 2016, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -12,11 +12,14 @@ *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.core; +import org.eclipse.core.runtime.Path; + public class ContainerFileProxy { private final String path; private final String name; private final String link; + private final String target; private final boolean isFolder; private final boolean isLink; @@ -26,7 +29,8 @@ public class ContainerFileProxy { this.name = name; this.isFolder = isFolder; this.isLink = false; - this.link = this.path; + this.link = null; + this.target = this.path; } public ContainerFileProxy(String directory, String name, boolean isFolder, @@ -35,7 +39,10 @@ public class ContainerFileProxy { this.name = name; this.isFolder = isFolder; this.isLink = isLink; - this.link = (link == null ? this.path : link); + this.link = link; + this.target = (link.startsWith("/") ? link + : new Path(this.path).removeLastSegments(1).append(link) + .toPortableString()); } public String getFullPath() { @@ -60,6 +67,10 @@ public class ContainerFileProxy { return link; } + public String getTarget() { + return target; + } + public String getName() { return name; } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DefaultDockerConnectionSettingsFinder.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DefaultDockerConnectionSettingsFinder.java index 63192cfc9..61fbc15c0 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DefaultDockerConnectionSettingsFinder.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DefaultDockerConnectionSettingsFinder.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -35,8 +35,8 @@ import org.eclipse.linuxtools.docker.core.IDockerConnectionSettings; import org.eclipse.linuxtools.docker.core.IDockerConnectionSettingsFinder; import org.eclipse.linuxtools.docker.core.IDockerConnectionSettingsProvider; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * A utility class that looks for candidate {@link IDockerConnection}s on the @@ -80,7 +80,7 @@ public class DefaultDockerConnectionSettingsFinder return client.info().name(); } } catch (DockerCertificateException - | com.spotify.docker.client.exceptions.DockerException + | org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { // ignore and return null } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioDeviceRate.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioDeviceRate.java index 5699f1f48..7652f49a0 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioDeviceRate.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioDeviceRate.java @@ -1,8 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerBlkioDeviceRate; -import com.spotify.docker.client.messages.HostConfig.BlkioDeviceRate; +import org.mandas.docker.client.messages.HostConfig.BlkioDeviceRate; public class DockerBlkioDeviceRate implements IDockerBlkioDeviceRate { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioWeightDevice.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioWeightDevice.java index b9306aff5..7663375d1 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioWeightDevice.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerBlkioWeightDevice.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerBlkioWeightDevice; -import com.spotify.docker.client.messages.HostConfig.BlkioWeightDevice; +import org.mandas.docker.client.messages.HostConfig.BlkioWeightDevice; public class DockerBlkioWeightDevice implements IDockerBlkioWeightDevice { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactory.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactory.java index e79f40060..dd53622df 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactory.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactory.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -13,19 +13,24 @@ package org.eclipse.linuxtools.internal.docker.core; +import static java.util.Collections.singletonMap; + import java.io.File; import java.net.URI; import org.eclipse.linuxtools.docker.core.IDockerConnectionSettings; import org.eclipse.linuxtools.docker.core.IDockerConnectionSettings.BindingType; import org.eclipse.linuxtools.docker.core.IRegistryAccount; +import org.mandas.docker.client.DefaultDockerClient; +import org.mandas.docker.client.DefaultDockerClient.Builder; +import org.mandas.docker.client.DockerCertificates; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.auth.FixedRegistryAuthSupplier; +import org.mandas.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.messages.RegistryAuth; +import org.mandas.docker.client.messages.RegistryConfigs; -import com.spotify.docker.client.DefaultDockerClient; -import com.spotify.docker.client.DefaultDockerClient.Builder; -import com.spotify.docker.client.DockerCertificates; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.messages.RegistryAuth; +import com.google.common.base.MoreObjects; /** * Factory for {@link DockerClient}. Decoupling from {@link DockerConnection} @@ -36,7 +41,7 @@ public class DockerClientFactory { /** * Creates a new {@link DockerClient} from the given * {@link IDockerConnectionSettings}. - * + * * @param connectionSettings * the connection settings * @return the {@link DockerClient} @@ -52,7 +57,7 @@ public class DockerClientFactory { /** * Creates a new {@link DockerClient} from the given * {@link IDockerConnectionSettings}. - * + * * @param connectionSettings * the connection settings * @return the {@link DockerClient} or <code>null</code> if the connection @@ -92,7 +97,14 @@ public class DockerClientFactory { } if (registryAccount != null) { - builder.registryAuth(buildAuthentication(registryAccount)); + // mimic spotify: + // https://github.com/spotify/docker-client/blob/master/src/main/java/com/spotify/docker/client/DefaultDockerClient.java#L3140 + RegistryAuth registryAuth = buildAuthentication(registryAccount); + final RegistryConfigs configs = RegistryConfigs.create(singletonMap( + MoreObjects.firstNonNull(registryAuth.serverAddress(), ""), + registryAuth)); + builder.registryAuthSupplier( + new FixedRegistryAuthSupplier(registryAuth, configs)); } return builder.build(); } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConfParameter.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConfParameter.java index e0a9cacbc..5f8f3a67f 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConfParameter.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConfParameter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerConfParameter; -import com.spotify.docker.client.messages.HostConfig.LxcConfParameter; +import org.mandas.docker.client.messages.HostConfig.LxcConfParameter; public class DockerConfParameter implements IDockerConfParameter { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java index 07bef1e64..7d8862a63 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat Inc. and others. - * + * Copyright (c) 2014, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -35,6 +35,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.ws.rs.ProcessingException; @@ -42,7 +44,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.ListenerList; -import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; @@ -97,43 +99,44 @@ import org.eclipse.tm.terminal.view.core.TerminalServiceFactory; import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService; import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener; import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient.AttachParameter; +import org.mandas.docker.client.DockerClient.BuildParam; +import org.mandas.docker.client.DockerClient.ExecCreateParam; +import org.mandas.docker.client.DockerClient.LogsParam; +import org.mandas.docker.client.LogStream; +import org.mandas.docker.client.exceptions.ContainerNotFoundException; +import org.mandas.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.exceptions.DockerTimeoutException; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.ContainerChange; +import org.mandas.docker.client.messages.ContainerConfig; +import org.mandas.docker.client.messages.ContainerCreation; +import org.mandas.docker.client.messages.ContainerExit; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.ExecCreation; +import org.mandas.docker.client.messages.HostConfig; +import org.mandas.docker.client.messages.HostConfig.LxcConfParameter; +import org.mandas.docker.client.messages.Image; +import org.mandas.docker.client.messages.ImageInfo; +import org.mandas.docker.client.messages.ImageSearchResult; +import org.mandas.docker.client.messages.Info; +import org.mandas.docker.client.messages.Ipam; +import org.mandas.docker.client.messages.IpamConfig; +import org.mandas.docker.client.messages.Network; +import org.mandas.docker.client.messages.NetworkConfig; +import org.mandas.docker.client.messages.PortBinding; +import org.mandas.docker.client.messages.RegistryAuth; +import org.mandas.docker.client.messages.Version; +import org.mandas.docker.client.messages.Volume; +import org.mandas.docker.client.messages.VolumeList; import com.google.common.collect.ImmutableMap; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.DockerClient.AttachParameter; -import com.spotify.docker.client.DockerClient.BuildParam; -import com.spotify.docker.client.DockerClient.ExecCreateParam; -import com.spotify.docker.client.DockerClient.LogsParam; -import com.spotify.docker.client.LogStream; -import com.spotify.docker.client.exceptions.ContainerNotFoundException; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.exceptions.DockerTimeoutException; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.ContainerChange; -import com.spotify.docker.client.messages.ContainerConfig; -import com.spotify.docker.client.messages.ContainerCreation; -import com.spotify.docker.client.messages.ContainerExit; -import com.spotify.docker.client.messages.ContainerInfo; -import com.spotify.docker.client.messages.ExecCreation; -import com.spotify.docker.client.messages.HostConfig; -import com.spotify.docker.client.messages.HostConfig.LxcConfParameter; -import com.spotify.docker.client.messages.Image; -import com.spotify.docker.client.messages.ImageInfo; -import com.spotify.docker.client.messages.ImageSearchResult; -import com.spotify.docker.client.messages.Info; -import com.spotify.docker.client.messages.Ipam; -import com.spotify.docker.client.messages.Network; -import com.spotify.docker.client.messages.NetworkConfig; -import com.spotify.docker.client.messages.PortBinding; -import com.spotify.docker.client.messages.RegistryAuth; -import com.spotify.docker.client.messages.Version; -import com.spotify.docker.client.messages.Volume; -import com.spotify.docker.client.messages.VolumeList; /** - * A connection to a Docker daemon. The connection may rely on Unix Socket or TCP connection (using the REST API). + * A connection to a Docker daemon. The connection may rely on Unix Socket or TCP connection (using the REST API). * All low-level communication is delegated to a wrapped {@link DockerClient}. - * + * * */ public class DockerConnection @@ -152,7 +155,7 @@ public class DockerConnection /** * Creates a new {@link DockerConnection} using a Unix socket. - * + * * @param unixSocketConnectionSettings * the connection settings. * @return a new {@link DockerConnection} @@ -165,7 +168,7 @@ public class DockerConnection /** * Creates a {@link DockerConnection} using a TCP connection. - * + * * @param tcpConnectionSettings * the {@link TCPConnectionSettings} * @return a new {@link DockerConnection} @@ -308,7 +311,7 @@ public class DockerConnection } /** * Change the default {@link DockerClientFactory} - * + * * @param dockerClientFactory * the new {@link DockerClientFactory} to use when opening a * connection. @@ -373,7 +376,7 @@ public class DockerConnection String socket = path.replaceAll("unix://", ""); //$NON-NLS-1$ //$NON-NLS-2$ java.io.File f = new java.io.File(socket); if (!f.exists()) { - throw new com.spotify.docker.client.exceptions.DockerException( + throw new org.mandas.docker.client.exceptions.DockerException( NLS.bind(Messages.Docker_Daemon_No_Unix_Socket, socket)); } @@ -386,7 +389,7 @@ public class DockerConnection Messages.Docker_Daemon_Ping_Failure, this.getName())); } setState(EnumDockerConnectionState.ESTABLISHED); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException | IllegalArgumentException e) { setState(EnumDockerConnectionState.CLOSED); throw new DockerPingConnectionException(NLS.bind( @@ -395,10 +398,9 @@ public class DockerConnection } @Override - protected void finalize() throws Throwable { + protected void finalize() { this.finalizing = true; close(); - super.finalize(); } @Override @@ -434,14 +436,14 @@ public class DockerConnection final Info info = this.client.info(); final Version version = this.client.version(); return new DockerConnectionInfo(info, version); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { throw new DockerException(Messages.Docker_General_Info_Failure, e); } } - + @Override public String getName() { if (name != null && !name.isEmpty()) { @@ -524,7 +526,7 @@ public class DockerConnection try { Version version = client.version(); return new DockerVersion(this, version); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { throw new DockerException(Messages.Docker_General_Info_Failure, e); } @@ -542,7 +544,7 @@ public class DockerConnection volumeList.add(v); } } - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage()); } catch (InterruptedException e) { return Collections.emptyList(); @@ -568,7 +570,7 @@ public class DockerConnection * Get a copy of the client to use in parallel threads for long-standing * operations such as logging or waiting until finished. The user of the * copy should close it when the operation is complete. - * + * * @return copy of client * @throws DockerException * - general Docker client exception @@ -742,11 +744,11 @@ public class DockerConnection } } while (follow && !stop); listContainers(); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { Activator.logErrorMessage( ProcessMessages.getString("Monitor_Logs_Exception"), e); //$NON-NLS-1$ throw new InterruptedException(); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | IOException e) { Activator.logErrorMessage( ProcessMessages.getString("Monitor_Logs_Exception"), e); //$NON-NLS-1$ @@ -831,7 +833,7 @@ public class DockerConnection new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e)); } - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause() @@ -908,7 +910,7 @@ public class DockerConnection Messages.Docker_Connection_Timeout, e)); close(); } - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { if (isOpen() && e.getCause() != null && e.getCause().getCause() != null @@ -924,7 +926,7 @@ public class DockerConnection /** * Sorts the given values using the given comparator and returns the result * in a {@link List} - * + * * @param values * the values to sort * @param comparator @@ -954,11 +956,11 @@ public class DockerConnection try { final ContainerInfo info = client.inspectContainer(id); return new DockerContainerInfo(info); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { Activator.logErrorMessage( ProcessMessages.getString("Container_Info_Exception"), e); //$NON-NLS-1$ return null; - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { Activator.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, ProcessMessages.getFormattedString( @@ -976,13 +978,20 @@ public class DockerConnection try { final ImageInfo info = this.client.inspectImage(id); return new DockerImageInfo(info); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { Activator.logErrorMessage( ProcessMessages.getString("Image_Info_Exception"), e); //$NON-NLS-1$ return null; - } catch (com.spotify.docker.client.exceptions.ImageNotFoundException e) { + } catch (org.mandas.docker.client.exceptions.ImageNotFoundException e) { + // we might have an id which contains a registry which is invalid + // for inspectImage() so + // see if we can find a local image with matching tag + IDockerImage image = getImageByTag(id); + if (image != null) { + return getImageInfo(image.id()); + } return null; - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { Activator.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, ProcessMessages.getFormattedString( @@ -1131,15 +1140,15 @@ public class DockerConnection nativeImage.created(), nativeImage.size(), nativeImage.virtualSize(), imageQualifier)); } - } catch (com.spotify.docker.client.exceptions.DockerTimeoutException e) { + } catch (org.mandas.docker.client.exceptions.DockerTimeoutException e) { if (isOpen()) { Activator.log( new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e)); } - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause() @@ -1166,7 +1175,7 @@ public class DockerConnection /** * Resolves the {@link DockerImageQualifier} for the given * {@code nativeImage} in the context of all {@code nativeImages} - * + * * @param nativeImage * the image to analyze * @param nativeImages @@ -1241,9 +1250,9 @@ public class DockerConnection DockerProgressHandler d = new DockerProgressHandler(handler); client.pull(id, d); listImages(); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1258,9 +1267,9 @@ public class DockerConnection final DockerProgressHandler d = new DockerProgressHandler(handler); client.pull(imageId, d); listImages(); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1279,7 +1288,7 @@ public class DockerConnection } } return results; - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { throw new DockerException(e); } @@ -1291,9 +1300,9 @@ public class DockerConnection try { DockerProgressHandler d = new DockerProgressHandler(handler); client.push(name, d); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1307,9 +1316,9 @@ public class DockerConnection .getClient(this.connectionSettings, info); final DockerProgressHandler d = new DockerProgressHandler(handler); client.push(name, d); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | DockerCertificateException e) { DockerException f = new DockerException(e); throw f; @@ -1321,9 +1330,9 @@ public class DockerConnection InterruptedException { try { client.removeImage(name, true, false); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1334,9 +1343,9 @@ public class DockerConnection InterruptedException { try { client.removeImage(tag, false, false); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1351,7 +1360,7 @@ public class DockerConnection /** * Adds a tag to an existing image while specifying the <code>force</code> * flag. - * + * * @param name * the image id * @param newTag @@ -1369,9 +1378,9 @@ public class DockerConnection final boolean force) throws DockerException, InterruptedException { try { client.tag(name, newTag, force); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { DockerException f = new DockerException(e); throw f; } @@ -1388,9 +1397,9 @@ public class DockerConnection String res = getClientCopy().build(p, d, BuildParam.create("forcerm", "true")); //$NON-NLS-1$ //$NON-NLS-2$ return res; - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | IOException e) { DockerException f = new DockerException(e); throw f; @@ -1408,9 +1417,9 @@ public class DockerConnection String res = getClientCopy().build(p, name, d, BuildParam.create("forcerm", "true")); //$NON-NLS-1$ $NON-NLS-2$ return res; - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | IOException e) { DockerException f = new DockerException(e); throw f; @@ -1419,7 +1428,7 @@ public class DockerConnection /** * Builds an {@link IDockerImage} - * + * * @param path * path to the build context * @param name @@ -1446,9 +1455,9 @@ public class DockerConnection String res = getClientCopy().build(p, name, d, getBuildParameters(buildOptions)); return res; - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | IOException e) { DockerException f = new DockerException(e); throw f; @@ -1457,7 +1466,7 @@ public class DockerConnection /** * Builds an {@link IDockerImage} - * + * * @param path * path to the build context * @param name @@ -1486,9 +1495,9 @@ public class DockerConnection String res = getClientCopy().build(p, name, dockerFileName, d, getBuildParameters(buildOptions)); return res; - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | IOException e) { DockerException f = new DockerException(e); throw f; @@ -1499,7 +1508,7 @@ public class DockerConnection * Converts the given {@link Map} of build options into an array of * {@link BuildParameter} when the build options are set a value different * from the default value. - * + * * @param buildOptions * the build options * @return an array of relevant {@link BuildParameter}, an empty array if @@ -1538,7 +1547,7 @@ public class DockerConnection // Currently we have to save all clouds instead of just this one DockerConnectionManager.getInstance().saveConnections(); } - + @Override public String createContainer(final IDockerContainerConfig c, final IDockerHostConfig hc) throws DockerException, @@ -1645,7 +1654,7 @@ public class DockerConnection builder = builder.env(c.env()); } if (c.volumes() != null) { - builder = builder.volumes(c.volumes()); + builder = builder.volumes(c.volumes().keySet()); } if (c.entrypoint() != null) { builder = builder.entrypoint(c.entrypoint()); @@ -1666,9 +1675,9 @@ public class DockerConnection return id; } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e); } } @@ -1689,9 +1698,9 @@ public class DockerConnection listContainers(); } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1711,9 +1720,9 @@ public class DockerConnection listContainers(); // update container list } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { // Permit kill to fail silently even on non-running containers - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1727,9 +1736,9 @@ public class DockerConnection listContainers(); // update container list } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1761,9 +1770,9 @@ public class DockerConnection listContainers(); // update container list } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1777,9 +1786,9 @@ public class DockerConnection listContainers(); // update container list } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1828,18 +1837,18 @@ public class DockerConnection } } // list of containers needs to be refreshed once the container started, to reflect it new state. - listContainers(); + listContainers(); } catch (ContainerNotFoundException e) { // if we get here, it means that the command failed...the actual // message is buried in the throwable cause and isn't actually // clearly stated so report there was a problem starting the command throw new DockerException(DockerMessages.getFormattedString( "DockerStartContainer.error", getCmdString(containerInfo))); //$NON-NLS-1$ - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { if (e.status() != 304) { throw new DockerException(e.getMessage()); } - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1882,11 +1891,11 @@ public class DockerConnection // clearly stated so report there was a problem starting the command throw new DockerException(DockerMessages.getFormattedString( "DockerStartContainer.error", getCmdString(containerInfo))); //$NON-NLS-1$ - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { if (e.status() != 304) { throw new DockerException(e.getMessage()); } - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e); } } @@ -1924,9 +1933,9 @@ public class DockerConnection listContainers(); } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -1944,9 +1953,9 @@ public class DockerConnection // FIXME: are we refreshing the list of images twice ? listImages(); getImages(true); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException + } catch (org.mandas.docker.client.exceptions.DockerException | InterruptedException e) { throw new DockerException(e.getMessage(), e.getCause()); } @@ -1959,7 +1968,7 @@ public class DockerConnection try { DockerClient copy = getClientCopy(); stream = copy.archiveContainer(id, path); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } return stream; @@ -1972,7 +1981,7 @@ public class DockerConnection DockerClient clientCopy = (DockerClient) token; try { stream = clientCopy.archiveContainer(id, path); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } return stream; @@ -1989,7 +1998,7 @@ public class DockerConnection containerChanges.add(new DockerContainerChange(change.path(), change.kind())); } - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } return containerChanges; @@ -2035,7 +2044,7 @@ public class DockerConnection .getPath(directory); copy.copyToContainer(dirPath, id, path); copy.close(); /* dispose of client copy now that we are done */ - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2047,9 +2056,11 @@ public class DockerConnection DockerClient copy = (DockerClient) token; java.nio.file.Path dirPath = FileSystems.getDefault() .getPath(directory); - copy.copyToContainer(dirPath, id, path); + boolean isWin = Platform.getOS().equals(Platform.OS_WIN32); + copy.copyToContainer(dirPath, id, + isWin ? path.replace('\\', '/') : path); copy.close(); /* dispose of client copy now that we are done */ - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2065,7 +2076,7 @@ public class DockerConnection .email(new String(cfg.getEmail())) .serverAddress(new String(cfg.getServerAddress())).build(); return client.auth(authConfig); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2124,9 +2135,9 @@ public class DockerConnection } } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2142,7 +2153,7 @@ public class DockerConnection LogsParam.stdout(), LogsParam.stderr()); stream.attach(out, err); stream.close(); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2155,7 +2166,7 @@ public class DockerConnection LogsParam.follow(), LogsParam.stdout(), LogsParam.stderr()); stream.attach(out, err); stream.close(); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2173,9 +2184,9 @@ public class DockerConnection return exit; } catch (ContainerNotFoundException e) { throw new DockerContainerNotFoundException(e); - } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { + } catch (org.mandas.docker.client.exceptions.DockerRequestException e) { throw new DockerException(e.getResponseBody()); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2255,49 +2266,31 @@ public class DockerConnection try { DockerClient copyClient = getClientCopy(); final ExecCreation execCreation = copyClient.execCreate(id, - new String[] { "/bin/sh", "-c", "ls -l -F -L -Q " + path }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + new String[] { "/bin/sh", "-c", "ls -l -F -Q " + path }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ ExecCreateParam.attachStdout(), ExecCreateParam.attachStderr()); final String execId = execCreation.id(); final LogStream pty_stream = copyClient.execStart(execId); + String lastLine = ""; //$NON-NLS-1$ try { while (pty_stream.hasNext()) { ByteBuffer b = pty_stream.next().content(); byte[] buffer = new byte[b.remaining()]; b.get(buffer); - String s = new String(buffer); + String s = lastLine + new String(buffer); String[] lines = s.split("\\r?\\n"); //$NON-NLS-1$ - for (String line : lines) { - if (line.trim().startsWith("total")) //$NON-NLS-1$ - continue; // ignore the total line - String[] token = line.split("\\s+"); //$NON-NLS-1$ - boolean isDirectory = token[0].startsWith("d"); //$NON-NLS-1$ - boolean isLink = token[0].startsWith("l"); //$NON-NLS-1$ - if (token.length > 8) { - // last token depends on whether we have a link or not - String link = null; - if (isLink) { - String linkname = token[token.length - 1]; - if (linkname.endsWith("/")) { //$NON-NLS-1$ - linkname = linkname.substring(0, linkname.length() - 1); - isDirectory = true; - } - IPath linkPath = new Path(path); - linkPath = linkPath.append(linkname); - link = linkPath.toString(); - String name = token[token.length - 3]; - childList.add(new ContainerFileProxy(path, name, - isDirectory, isLink, link)); - } else { - String name = token[token.length - 1]; - // remove quotes and any indicator char - name = name.substring(1, name.length() - - (name.endsWith("\"") ? 1 : 2)); - childList.add(new ContainerFileProxy(path, name, - isDirectory)); - } - } + if (lines.length > 0) { + lastLine = lines[lines.length - 1]; + } else { + lastLine = ""; //$NON-NLS-1$ } + for (int i = 0; i < lines.length - 1; ++i) { + String line = lines[i]; + processDirectoryLine(line, path, childList); + } + } + if (!lastLine.isEmpty()) { + processDirectoryLine(lastLine, path, childList); } } finally { if (pty_stream != null) @@ -2306,11 +2299,62 @@ public class DockerConnection copyClient.close(); } } catch (Exception e) { + if (e.getCause() instanceof IOException) { + // ugly hack as we often get Connection reset by peer exceptions + // so retry + return readContainerDirectory(id, path); + } // e.printStackTrace(); } return childList; } + private String[] tokenize(String line) { + String regex = "(\"[^\"]*\"/?)|(\\S+)"; + List<String> result = new ArrayList<>(); + + Matcher m = Pattern.compile(regex).matcher(line); + while (m.find()) { + if (m.group(1) != null) { + result.add(m.group(1)); + } else { + result.add(m.group(2)); + } + } + return result.toArray(new String[0]); + } + + private void processDirectoryLine(String line, String path, + List<ContainerFileProxy> childList) { + if (line.trim().startsWith("total")) //$NON-NLS-1$ + return; // ignore the total line + String[] token = tokenize(line); + boolean isDirectory = token[0].startsWith("d"); //$NON-NLS-1$ + boolean isLink = token[0].startsWith("l"); //$NON-NLS-1$ + if (token.length > 8) { + // Non-Link ends with "filename" + // Link ends with "filename" -> "Target" + String name = token[token.length - (isLink ? 3 : 1)]; + // remove quotes and any indicator char + name = name.substring(1, + name.length() - (name.endsWith("\"") ? 1 : 2)); + + if (isLink) { + String linkname = token[token.length - 1]; + if (linkname.endsWith("/")) { //$NON-NLS-1$ + isDirectory = true; + } + linkname = linkname.substring(1, + linkname.length() - (linkname.endsWith("\"") ? 1 : 2)); + + childList.add(new ContainerFileProxy(path, name, isDirectory, + isLink, linkname)); + } else { + childList.add(new ContainerFileProxy(path, name, isDirectory)); + } + } + } + public void execShell(final String id) throws DockerException { try { final ExecCreation execCreation = client.execCreate(id, @@ -2358,9 +2402,9 @@ public class DockerConnection OutputStream tout = noBlockingOutputStream( HttpHijackWorkaround.getOutputStream(pty_stream, getUri())); InputStream tin = HttpHijackWorkaround.getInputStream(pty_stream); - + TerminalOutputMonitorListener monitor = new TerminalOutputMonitorListener(out); - + // org.eclipse.tm.terminal.connector.ssh.controls.SshWizardConfigurationPanel Map<String, Object> properties = new HashMap<>(); properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, @@ -2446,21 +2490,23 @@ public class DockerConnection try { Ipam.Builder ipamBuilder = Ipam.builder() .driver(cfg.ipam().driver()); - List<IDockerIpamConfig> ipamCfgs = cfg.ipam().config(); - for (IDockerIpamConfig ipamCfg : ipamCfgs) { - ipamBuilder = ipamBuilder.config(ipamCfg.subnet(), - ipamCfg.ipRange(), ipamCfg.gateway()); + List<IDockerIpamConfig> idockerIpamCfgs = cfg.ipam().config(); + List<IpamConfig> ipamCfgs = new ArrayList<>(); + for (IDockerIpamConfig ipamCfg : idockerIpamCfgs) { + ipamCfgs.add(IpamConfig.create(ipamCfg.subnet(), + ipamCfg.ipRange(), ipamCfg.gateway())); } + ipamBuilder = ipamBuilder.config(ipamCfgs); Ipam ipam = ipamBuilder.build(); NetworkConfig.Builder networkConfigBuilder = NetworkConfig.builder() .name(cfg.name()).driver(cfg.driver()).ipam(ipam); networkConfigBuilder.options(cfg.options()); NetworkConfig networkConfig = networkConfigBuilder.build(); - com.spotify.docker.client.messages.NetworkCreation creation = client + org.mandas.docker.client.messages.NetworkCreation creation = client .createNetwork(networkConfig); return new DockerNetworkCreation(creation); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2471,7 +2517,7 @@ public class DockerConnection try { Network n = client.inspectNetwork(networkId); return new DockerNetwork(n); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2486,7 +2532,7 @@ public class DockerConnection networks.add(new DockerNetwork(n)); } return networks; - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2496,7 +2542,7 @@ public class DockerConnection throws DockerException, InterruptedException { try { client.removeNetwork(networkId); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2506,7 +2552,7 @@ public class DockerConnection throws DockerException, InterruptedException { try { client.connectToNetwork(id, networkId); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } @@ -2516,7 +2562,7 @@ public class DockerConnection throws DockerException, InterruptedException { try { client.disconnectFromNetwork(id, networkId); - } catch (com.spotify.docker.client.exceptions.DockerException e) { + } catch (org.mandas.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionInfo.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionInfo.java index 43dde8ab8..b65ad04b0 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionInfo.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionInfo.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -18,9 +18,8 @@ import java.util.List; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IDockerConnectionInfo; - -import com.spotify.docker.client.messages.Info; -import com.spotify.docker.client.messages.Version; +import org.mandas.docker.client.messages.Info; +import org.mandas.docker.client.messages.Version; /** * Info about a given {@link IDockerConnection} @@ -29,7 +28,6 @@ public class DockerConnectionInfo implements IDockerConnectionInfo { private final int containers; private final boolean debug; - private final String executionDriver; private final int fileDescriptors; private final int goroutines; private final int images; @@ -52,11 +50,10 @@ public class DockerConnectionInfo implements IDockerConnectionInfo { private final boolean ipv4Forwarding; private final List<String> labels; private final String dockerRootDir; - + public DockerConnectionInfo(final Info info, final Version version) { this.containers = info != null ? info.containers() : -1; this.debug = info != null ? info.debug() : false; - this.executionDriver = info != null ? info.executionDriver() : null; this.fileDescriptors = info != null ? info.fileDescriptors() : -1; this.goroutines = info != null ? info.goroutines() : -1; this.images = info != null ? info.images() : -1; @@ -86,7 +83,7 @@ public class DockerConnectionInfo implements IDockerConnectionInfo { : null; this.labels = info != null ? info.labels() : null; this.dockerRootDir = info != null ? info.dockerRootDir() : null; - + } @Override @@ -104,11 +101,6 @@ public class DockerConnectionInfo implements IDockerConnectionInfo { return debug; } - @Override - public String getExecutionDriver() { - return executionDriver; - } - @Override public int getFileDescriptors() { return fileDescriptors; @@ -217,4 +209,10 @@ public class DockerConnectionInfo implements IDockerConnectionInfo { return dockerRootDir; } + @Override + @Deprecated + public String getExecutionDriver() { + return null; + } + } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainer.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainer.java index 7bf3910cd..58ed1505a 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainer.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -21,8 +21,8 @@ import org.eclipse.linuxtools.docker.core.IDockerContainer; import org.eclipse.linuxtools.docker.core.IDockerContainerInfo; import org.eclipse.linuxtools.docker.core.IDockerPortMapping; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.Container; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.Container; public class DockerContainer implements IDockerContainer, IAdaptable { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerConfig.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerConfig.java index 6030a9c3d..1c182bd75 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerConfig.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -23,8 +23,8 @@ import java.util.TreeSet; import org.eclipse.linuxtools.docker.core.IDockerContainerConfig; -import com.spotify.docker.client.messages.ContainerConfig; -import com.spotify.docker.client.messages.HostConfig; +import org.mandas.docker.client.messages.ContainerConfig; +import org.mandas.docker.client.messages.HostConfig; public class DockerContainerConfig implements IDockerContainerConfig { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerExit.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerExit.java index 84bec82ac..82b40d810 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerExit.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerExit.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -16,15 +16,15 @@ import org.eclipse.linuxtools.docker.core.IDockerContainerExit; public class DockerContainerExit implements IDockerContainerExit { - private Integer statusCode; + private Long statusCode; - public DockerContainerExit(Integer statusCode) { - this.statusCode = statusCode; + public DockerContainerExit(Long long1) { + this.statusCode = long1; } @Override public Integer statusCode() { - return statusCode; + return Integer.valueOf(statusCode.intValue()); } } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerInfo.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerInfo.java index 1a1850244..335756190 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerInfo.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerInfo.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -12,19 +12,23 @@ *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.core; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.eclipse.linuxtools.docker.core.IDockerContainerConfig; import org.eclipse.linuxtools.docker.core.IDockerContainerInfo; +import org.eclipse.linuxtools.docker.core.IDockerContainerInfo2; +import org.eclipse.linuxtools.docker.core.IDockerContainerMount; import org.eclipse.linuxtools.docker.core.IDockerContainerState; import org.eclipse.linuxtools.docker.core.IDockerHostConfig; import org.eclipse.linuxtools.docker.core.IDockerNetworkSettings; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.ContainerMount; -import com.spotify.docker.client.messages.ContainerInfo; - -public class DockerContainerInfo implements IDockerContainerInfo { +public class DockerContainerInfo + implements IDockerContainerInfo, IDockerContainerInfo2 { private String id; private Date created; @@ -43,8 +47,7 @@ public class DockerContainerInfo implements IDockerContainerInfo { private String execDriver; private String processLabel; private String mountLabel; - private Map<String, String> volumes; - private Map<String, Boolean> volumesRW; + private List<IDockerContainerMount> mounts; public DockerContainerInfo (final ContainerInfo info) { this.id = info != null ? info.id() : null; @@ -68,8 +71,14 @@ public class DockerContainerInfo implements IDockerContainerInfo { this.execDriver = info != null ? info.execDriver() : null; this.processLabel = info != null ? info.processLabel() : null; this.mountLabel = info != null ? info.mountLabel() : null; - this.volumes = info != null ? info.volumes() : null; - this.volumesRW = info != null ? info.volumesRw() : null; + if (info.mounts() != null) { + this.mounts = new ArrayList<>(); + for (ContainerMount mount : info.mounts()) { + this.mounts.add(new DockerContainerMount(mount)); + } + } else { + this.mounts = null; + } } @Override @@ -158,13 +167,20 @@ public class DockerContainerInfo implements IDockerContainerInfo { } @Override + public List<IDockerContainerMount> mounts() { + return mounts; + } + + @Override + @Deprecated public Map<String, String> volumes() { - return volumes; + return null; } @Override + @Deprecated public Map<String, Boolean> volumesRW() { - return volumesRW; + return null; } } diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerMount.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerMount.java new file mode 100644 index 000000000..11deeb675 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerMount.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.linuxtools.internal.docker.core; + +import org.eclipse.linuxtools.docker.core.IDockerContainerMount; +import org.mandas.docker.client.messages.ContainerMount; + +public class DockerContainerMount implements IDockerContainerMount { + + private String name; + private String source; + private String destination; + private String type; + private String driver; + private String mode; + private Boolean rw; + private String propagation; + + public DockerContainerMount(final ContainerMount mount) { + this.name = mount.name(); + this.source = mount.source(); + this.destination = mount.destination(); + this.type = mount.type(); + this.driver = mount.driver(); + this.mode = mount.mode(); + this.rw = mount.rw(); + this.propagation = mount.propagation(); + } + + @Override + public String type() { + return type; + } + + @Override + public String name() { + return name; + } + + @Override + public String source() { + return source; + } + + @Override + public String destination() { + return destination; + } + + @Override + public String driver() { + return driver; + } + + @Override + public String mode() { + return mode; + } + + @Override + public Boolean rw() { + return rw; + } + + @Override + public String propagation() { + return propagation; + } + +} diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerRefreshManager.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerRefreshManager.java index da79291c1..19399f6ee 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerRefreshManager.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerRefreshManager.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2019 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -58,7 +58,7 @@ public class DockerContainerRefreshManager implements IDockerContainerListener { final List<IDockerContainer> dclist) { if (!this.refreshThreadMap.containsKey(connection)) { long refreshRateInSeconds = Platform.getPreferencesService() - .getLong("org.eclipse.linuxtools.docker.ui", //$NON-NLS-1$ + .getLong("org.eclipse.linuxtools.docker.ui", //$NON-NLS-1$ "containerRefreshTime", DEFAULT_REFRESH_TIME, null); //$NON-NLS-1$ final ContainerRefreshThread rt = new ContainerRefreshThread( connection, @@ -71,7 +71,7 @@ public class DockerContainerRefreshManager implements IDockerContainerListener { /** * Stops and remove the {@link ContainerRefreshThread} associated with the * given {@link IDockerConnection}. - * + * * @param connection * the connection that was monitored */ @@ -80,13 +80,13 @@ public class DockerContainerRefreshManager implements IDockerContainerListener { if (this.refreshThreadMap.containsKey(connection)) { final ContainerRefreshThread containerRefreshThread = refreshThreadMap.get(connection); containerRefreshThread.stopMonitoring(); - final ContainerRefreshThread removed = this.refreshThreadMap.remove(connection); + this.refreshThreadMap.remove(connection); } } /** * Method to reset the refresh rate for updating container lists - * + * * @param seconds * - time to wait between refreshes */ diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerState.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerState.java index 5e4fc43a4..8975a0e3e 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerState.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerContainerState.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,8 +15,7 @@ package org.eclipse.linuxtools.internal.docker.core; import java.util.Date; import org.eclipse.linuxtools.docker.core.IDockerContainerState; - -import com.spotify.docker.client.messages.ContainerState; +import org.mandas.docker.client.messages.ContainerState; public class DockerContainerState implements IDockerContainerState { @@ -24,7 +23,7 @@ public class DockerContainerState implements IDockerContainerState { private final Boolean running; private final Boolean paused; private final Boolean restarting; - private final Integer exitCode; + private final Long exitCode; private final Date startDate; private final Date finishDate; @@ -47,12 +46,12 @@ public class DockerContainerState implements IDockerContainerState { public Boolean restarting() { return restarting; } - + @Override public Boolean paused() { return paused; } - + @Override public Integer pid() { return pid; @@ -60,7 +59,7 @@ public class DockerContainerState implements IDockerContainerState { @Override public Integer exitCode() { - return exitCode; + return Integer.valueOf(exitCode.intValue()); } @Override diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerDevice.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerDevice.java index 52aecc34c..119bd1560 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerDevice.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerDevice.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2019, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerDevice; -import com.spotify.docker.client.messages.Device; +import org.mandas.docker.client.messages.Device; public class DockerDevice implements IDockerDevice { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerHostConfig.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerHostConfig.java index 9f43fe1be..c95f8587e 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerHostConfig.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerHostConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -29,13 +29,13 @@ import org.eclipse.linuxtools.docker.core.IDockerPortBinding; import org.eclipse.linuxtools.docker.core.IDockerRestartPolicy; import org.eclipse.linuxtools.docker.core.IDockerUlimit; -import com.spotify.docker.client.messages.Device; -import com.spotify.docker.client.messages.HostConfig; -import com.spotify.docker.client.messages.HostConfig.BlkioDeviceRate; -import com.spotify.docker.client.messages.HostConfig.BlkioWeightDevice; -import com.spotify.docker.client.messages.HostConfig.LxcConfParameter; -import com.spotify.docker.client.messages.HostConfig.Ulimit; -import com.spotify.docker.client.messages.PortBinding; +import org.mandas.docker.client.messages.Device; +import org.mandas.docker.client.messages.HostConfig; +import org.mandas.docker.client.messages.HostConfig.BlkioDeviceRate; +import org.mandas.docker.client.messages.HostConfig.BlkioWeightDevice; +import org.mandas.docker.client.messages.HostConfig.LxcConfParameter; +import org.mandas.docker.client.messages.HostConfig.Ulimit; +import org.mandas.docker.client.messages.PortBinding; public class DockerHostConfig implements IDockerHostConfig { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImage.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImage.java index 6192fdf89..7670fac09 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImage.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImage.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -50,7 +50,7 @@ public class DockerImage implements IDockerImage, IAdaptable { + "(\\:(?<tag>" + TAG + "))?"); //$NON-NLS-1$ //$NON-NLS-2$ // SimpleDateFormat is not thread-safe, so give one to each thread - private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>() { + private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$ @@ -141,7 +141,7 @@ public class DockerImage implements IDockerImage, IAdaptable { * {@code repoTags}, assuming that the given repoTags elements have the * following format: {@code [org/]repo[:tag]}. Tags are sorted by their * natural order. - * + * * @param repoTags * the list of repo/tags to analyze * @return the tags indexed by org/repo @@ -170,7 +170,7 @@ public class DockerImage implements IDockerImage, IAdaptable { /** * Extracts the list of tags in the given repo/tags, assuming that the given * repoTags elements have the following format: {@code [org/]repo[:tag]}. - * + * * @param repoTags * the repo/tags list to analyze * @return the list of tags or empty list if none was found. @@ -194,7 +194,7 @@ public class DockerImage implements IDockerImage, IAdaptable { /** * Extracts the tag in the given repo/tag, assuming that the given repoTag * element has the following format: {@code [org/]repo[:tag]}. - * + * * @param repoTag * the repo/tag to analyze * @return the tag or null if none was found. @@ -213,7 +213,7 @@ public class DockerImage implements IDockerImage, IAdaptable { /** * Extracts the tag in the given repo/tag, assuming that the given repoTag * element has the following format: {@code [org/]repo[:tag]} - * + * * @param repoTag * the repo/tag to analyze * @return the tag or <code>null</code> if none was found. @@ -232,7 +232,7 @@ public class DockerImage implements IDockerImage, IAdaptable { /** * Duplicates the given {@code image} into as many {@link IDockerImage} has * it has distinct repoTags entries - * + * * @param image * the source image * @return a {@link Stream} of duplicate {@link IDockerImage} @@ -373,7 +373,7 @@ public class DockerImage implements IDockerImage, IAdaptable { /** * Appends the <code>latest</code> tag to the given {@code imageName} - * + * * @param imageName * the image name to check * @return the image name with the <code>latest</code> tag if none was set diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImageInfo.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImageInfo.java index facebbc25..6719f54c2 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImageInfo.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerImageInfo.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -17,7 +17,7 @@ import java.util.Date; import org.eclipse.linuxtools.docker.core.IDockerContainerConfig; import org.eclipse.linuxtools.docker.core.IDockerImageInfo; -import com.spotify.docker.client.messages.ImageInfo; +import org.mandas.docker.client.messages.ImageInfo; public class DockerImageInfo implements IDockerImageInfo { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpam.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpam.java index 9f53872bd..8470f3c55 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpam.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpam.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -18,8 +18,8 @@ import java.util.List; import org.eclipse.linuxtools.docker.core.IDockerIpam; import org.eclipse.linuxtools.docker.core.IDockerIpamConfig; -import com.spotify.docker.client.messages.Ipam; -import com.spotify.docker.client.messages.IpamConfig; +import org.mandas.docker.client.messages.Ipam; +import org.mandas.docker.client.messages.IpamConfig; public class DockerIpam implements IDockerIpam { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpamConfig.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpamConfig.java index 880995b94..c56e01178 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpamConfig.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerIpamConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerIpamConfig; -import com.spotify.docker.client.messages.IpamConfig; +import org.mandas.docker.client.messages.IpamConfig; public class DockerIpamConfig implements IDockerIpamConfig { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerLogConfig.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerLogConfig.java index 6c6bedf30..c218955ed 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerLogConfig.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerLogConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2019, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,7 @@ import java.util.Map; import org.eclipse.linuxtools.docker.core.IDockerLogConfig; -import com.spotify.docker.client.messages.LogConfig; +import org.mandas.docker.client.messages.LogConfig; public class DockerLogConfig implements IDockerLogConfig { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetwork.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetwork.java index 6e5946fc6..04afc2b05 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetwork.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetwork.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -19,7 +19,7 @@ import org.eclipse.linuxtools.docker.core.IDockerIpam; import org.eclipse.linuxtools.docker.core.IDockerNetwork; import org.eclipse.linuxtools.docker.core.IDockerNetworkContainer; -import com.spotify.docker.client.messages.Network; +import org.mandas.docker.client.messages.Network; public class DockerNetwork implements IDockerNetwork { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkConfig.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkConfig.java index 91f9a276c..2c6846197 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkConfig.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -17,7 +17,7 @@ import java.util.Map; import org.eclipse.linuxtools.docker.core.IDockerIpam; import org.eclipse.linuxtools.docker.core.IDockerNetworkConfig; -import com.spotify.docker.client.messages.NetworkConfig; +import org.mandas.docker.client.messages.NetworkConfig; public class DockerNetworkConfig implements IDockerNetworkConfig { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkContainer.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkContainer.java index fc5ec315f..aa1461fbb 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkContainer.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerNetworkContainer; -import com.spotify.docker.client.messages.Network; +import org.mandas.docker.client.messages.Network; public class DockerNetworkContainer implements IDockerNetworkContainer { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkCreation.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkCreation.java index d675cbe71..4a923af20 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkCreation.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkCreation.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerNetworkCreation; -import com.spotify.docker.client.messages.NetworkCreation; +import org.mandas.docker.client.messages.NetworkCreation; public class DockerNetworkCreation implements IDockerNetworkCreation { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkSettings.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkSettings.java index a0a921552..45b8d9cae 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkSettings.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerNetworkSettings.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -22,8 +22,8 @@ import java.util.Map.Entry; import org.eclipse.linuxtools.docker.core.IDockerNetworkSettings; import org.eclipse.linuxtools.docker.core.IDockerPortBinding; -import com.spotify.docker.client.messages.NetworkSettings; -import com.spotify.docker.client.messages.PortBinding; +import org.mandas.docker.client.messages.NetworkSettings; +import org.mandas.docker.client.messages.PortBinding; public class DockerNetworkSettings implements IDockerNetworkSettings { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerPortBinding.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerPortBinding.java index efd76a566..1f6997b08 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerPortBinding.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerPortBinding.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerPortBinding; -import com.spotify.docker.client.messages.PortBinding; +import org.mandas.docker.client.messages.PortBinding; public class DockerPortBinding implements IDockerPortBinding { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerProgressHandler.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerProgressHandler.java index de47d2a39..25129bc3d 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerProgressHandler.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerProgressHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,10 +14,10 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerProgressHandler; -import com.spotify.docker.client.ProgressHandler; -import com.spotify.docker.client.exceptions.DockerException; -import com.spotify.docker.client.messages.ProgressDetail; -import com.spotify.docker.client.messages.ProgressMessage; +import org.mandas.docker.client.ProgressHandler; +import org.mandas.docker.client.exceptions.DockerException; +import org.mandas.docker.client.messages.ProgressDetail; +import org.mandas.docker.client.messages.ProgressMessage; public class DockerProgressHandler implements ProgressHandler { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerRestartPolicy.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerRestartPolicy.java index a591e759f..5e6166464 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerRestartPolicy.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerRestartPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2019, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerRestartPolicy; -import com.spotify.docker.client.messages.HostConfig.RestartPolicy; +import org.mandas.docker.client.messages.HostConfig.RestartPolicy; public class DockerRestartPolicy implements IDockerRestartPolicy { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerUlimit.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerUlimit.java index 75b4d4936..96b42db03 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerUlimit.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerUlimit.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2019, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerUlimit; -import com.spotify.docker.client.messages.HostConfig.Ulimit; +import org.mandas.docker.client.messages.HostConfig.Ulimit; public class DockerUlimit implements IDockerUlimit { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVersion.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVersion.java index 5623557db..c930bd888 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVersion.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVersion.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -15,8 +15,8 @@ package org.eclipse.linuxtools.internal.docker.core; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IDockerVersion; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.Version; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.Version; public class DockerVersion implements IDockerVersion { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVolume.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVolume.java index 34d41443a..7d4547af7 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVolume.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerVolume.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Red Hat. + * Copyright (c) 2019, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,7 @@ import java.util.Map; import org.eclipse.linuxtools.docker.core.IDockerVolume; -import com.spotify.docker.client.messages.Volume; +import org.mandas.docker.client.messages.Volume; public class DockerVolume implements IDockerVolume { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/HttpHijackWorkaround.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/HttpHijackWorkaround.java index e163ca86c..b71b12413 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/HttpHijackWorkaround.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/HttpHijackWorkaround.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -26,8 +26,8 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.linuxtools.docker.core.Activator; import org.osgi.framework.Bundle; -import com.spotify.docker.client.LogReader; -import com.spotify.docker.client.LogStream; +import org.mandas.docker.client.LogReader; +import org.mandas.docker.client.LogStream; /** * This is a workaround for lack of HTTP Hijacking support in Apache @@ -51,10 +51,10 @@ public class HttpHijackWorkaround { "in", //$NON-NLS-1$ "wrappedStream", //$NON-NLS-1$ "in", //$NON-NLS-1$ - "instream" //$NON-NLS-1$ + "inStream" //$NON-NLS-1$ }; final String[] declared = new String[] { - "com.spotify.docker.client.DefaultLogStream", + "org.mandas.docker.client.DefaultLogStream", LogReader.class.getName(), "org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream", //$NON-NLS-1$ "org.glassfish.jersey.message.internal.EntityInputStream", //$NON-NLS-1$ @@ -121,13 +121,13 @@ public class HttpHijackWorkaround { } /* - * We could add API for this in com.spotify.docker.client since there is + * We could add API for this in org.mandas.docker.client since there is * access to the underlying InputStream but better wait and see what * happens with the HTTP Hijacking situation. */ public static InputStream getInputStream(LogStream stream) { final String[] fields = new String[] { "reader", "stream" }; //$NON-NLS-1$ //$NON-NLS-2$ - final String[] declared = new String[] { "com.spotify.docker.client.DefaultLogStream", LogReader.class.getName()}; + final String[] declared = new String[] { "org.mandas.docker.client.DefaultLogStream", LogReader.class.getName()}; List<String[]> list = new LinkedList<>(); for (int i = 0; i < fields.length; i++) { @@ -155,7 +155,7 @@ public class HttpHijackWorkaround { /* * Avoid explicitly depending on certain classes that are requirements - * of the docker-client library (com.spotify.docker.client). + * of the docker-client library (org.mandas.docker.client). */ private static Class<?> loadClass(String key, String [] bundles) { try { diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV1.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV1.java index 66f9f2cc3..88341db56 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV1.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV1.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -21,7 +21,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; -import com.spotify.docker.client.messages.ImageSearchResult; +import org.mandas.docker.client.messages.ImageSearchResult; /** * Binding for Image Search Results from a Registry V1. diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV2.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV2.java index 00cb5f426..951e86786 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV2.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ImageSearchResultV2.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. - * + * Copyright (c) 2016, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -18,14 +18,15 @@ import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; import java.util.ArrayList; import java.util.List; +import org.mandas.docker.client.messages.ImageSearchResult; + import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; -import com.spotify.docker.client.messages.ImageSearchResult; /** * Binding for Image Search Results from a Registry V2. - * + * * Currently the returned image search results lack the same degree of * information returned from the V1 registries. */ @@ -49,7 +50,7 @@ public class ImageSearchResultV2 { .add("results", getRepositories()).toString(); //$NON-NLS-1$ } - private class ImageResultV2 extends ImageSearchResult { + private class ImageResultV2 implements ImageSearchResult { private String name; diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ProcessMessages.properties b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ProcessMessages.properties index fd66ff1c8..0641cebea 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ProcessMessages.properties +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/ProcessMessages.properties @@ -17,7 +17,7 @@ Process_Monitor_Exception=Failed to monitor process Monitor_Logs_Exception=Failed to monitor container logs Settings_Detection_Exception=Failed to retrieve connection settings Container_Info_Exception=Failed to retrieve container info -Image_Info_exception=Failed to retrieve image info +Image_Info_Exception=Failed to retrieve image info Container_Inspect_Exception=Failed to inspect container: ''{0}'' Image_Inspect_Exception=Failed to inspect image: ''{0}'' diff --git a/containers/org.eclipse.linuxtools.docker.docs/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.docs/META-INF/MANIFEST.MF index 324c998ea..09d128620 100644 --- a/containers/org.eclipse.linuxtools.docker.docs/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.docs/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.linuxtools.docker.docs;singleton:=true -Bundle-Version: 4.4.0.qualifier +Bundle-Version: 5.1.0.qualifier Bundle-Vendor: %providerName Require-Bundle: org.eclipse.help Bundle-Localization: plugin diff --git a/containers/org.eclipse.linuxtools.docker.docs/pom.xml b/containers/org.eclipse.linuxtools.docker.docs/pom.xml index e6b53feb3..32f6bab57 100644 --- a/containers/org.eclipse.linuxtools.docker.docs/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.docs/pom.xml @@ -15,11 +15,11 @@ <parent> <artifactId>org.eclipse.linuxtools.docker</artifactId> <groupId>org.eclipse.linuxtools</groupId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.docs</artifactId> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> <name>Linux Tools Docker Tooling Documentation Plug-in</name> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.project b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/.project similarity index 84% rename from oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.project rename to containers/org.eclipse.linuxtools.docker.editor.ls-feature/.project index a19ed7078..f77d163e3 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.project +++ b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>org.eclipse.linuxtools.oprofile.remote-feature</name> + <name>org.eclipse.linuxtools.docker.editor.ls-feature</name> <comment></comment> <projects> </projects> diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/build.properties b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/build.properties similarity index 50% rename from oprofile/org.eclipse.linuxtools.oprofile-feature/build.properties rename to containers/org.eclipse.linuxtools.docker.editor.ls-feature/build.properties index e2782da3e..c8e4e44fc 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/build.properties +++ b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/build.properties @@ -1,6 +1,6 @@ bin.includes = feature.xml,\ + feature.properties +src.includes = build.properties,\ feature.properties,\ - p2.inf -src.includes = feature.properties,\ feature.xml,\ - ChangeLog + .project diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.properties b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.properties new file mode 100644 index 000000000..be4209015 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.properties @@ -0,0 +1,10 @@ +# features.properties +# contains externalized strings for feature.xml +# "%foo" in feature.xml corresponds to the key "foo" in this file +# java.io.Properties file (ISO 8859-1 with "\" escapes) +# This file should be translated. + +featureProvider=Eclipse Linux Tools +featureName=Docker Tooling Editor +featureDescription=The Docker Tooling Editor feature provides content assist and syntax highlighting when editing Dockerfiles. +copyright=Copyright 2019, 2020 Red Hat, Inc. diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.xml b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.xml new file mode 100644 index 000000000..904ad6bd8 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/feature.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="org.eclipse.linuxtools.docker.editor.ls.feature" + label="%featureName" + version="5.1.0.qualifier" + provider-name="%featureProvider" + license-feature="org.eclipse.license" + license-feature-version="0.0.0"> + + <description url="http://www.eclipse.org/linuxtools"> + %featureDescription + </description> + + <copyright url="http://www.redhat.com"> + %copyright + </copyright> + + <license url="%licenseURL"> + %license + </license> + + <url> + <update label="Linux Tools Docker Update Site" url="http://download.eclipse.org/linuxtools/update-docker"/> + </url> + + <plugin + id="org.eclipse.linuxtools.docker.editor.ls" + download-size="0" + install-size="0" + version="0.0.0"/> + +</feature> diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/pom.xml b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/pom.xml similarity index 73% rename from oprofile/org.eclipse.linuxtools.oprofile-feature/pom.xml rename to containers/org.eclipse.linuxtools.docker.editor.ls-feature/pom.xml index efb06bb02..d63a5f498 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.editor.ls-feature/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (C) 2011, 2018 Red Hat, Inc. + Copyright (C) 2019, 2020 Red Hat, Inc. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 @@ -11,18 +11,17 @@ <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> + <groupId>org.eclipse.linuxtools</groupId> + <artifactId>org.eclipse.linuxtools.docker</artifactId> + <version>5.1.0</version> </parent> - <artifactId>org.eclipse.linuxtools.oprofile.feature</artifactId> + <artifactId>org.eclipse.linuxtools.docker.editor.ls.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> - <name>Linux Tools OProfile Integration Feature</name> + <name>Linux Tools Docker Tooling Editor Feature</name> <build> <plugins> @@ -36,11 +35,6 @@ <goals> <goal>source-feature</goal> </goals> - <configuration> - <excludes> - <plugin id="org.eclipse.linuxtools.oprofile.doc"/> - </excludes> - </configuration> </execution> </executions> </plugin> diff --git a/containers/org.eclipse.linuxtools.docker.editor/.classpath b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.classpath similarity index 67% rename from containers/org.eclipse.linuxtools.docker.editor/.classpath rename to containers/org.eclipse.linuxtools.docker.editor.ls.tests/.classpath index eca7bdba8..a42a828e0 100644 --- a/containers/org.eclipse.linuxtools.docker.editor/.classpath +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.project b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.project similarity index 91% rename from oprofile/org.eclipse.linuxtools.oprofile.core.tests/.project rename to containers/org.eclipse.linuxtools.docker.editor.ls.tests/.project index 775970bed..6831558a4 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.project +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>org.eclipse.linuxtools.oprofile.core.tests</name> + <name>org.eclipse.linuxtools.docker.editor.ls.tests</name> <comment></comment> <projects> </projects> @@ -22,7 +22,7 @@ </buildCommand> </buildSpec> <natures> - <nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.PluginNature</nature> </natures> </projectDescription> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..f2525a8b9 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.pde.prefs b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.pde.prefs new file mode 100644 index 000000000..2174e4fd5 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/.settings/org.eclipse.pde.prefs @@ -0,0 +1,34 @@ +compilers.f.unresolved-features=1 +compilers.f.unresolved-plugins=1 +compilers.incompatible-environment=1 +compilers.p.build=1 +compilers.p.build.bin.includes=1 +compilers.p.build.encodings=2 +compilers.p.build.java.compiler=2 +compilers.p.build.java.compliance=1 +compilers.p.build.missing.output=2 +compilers.p.build.output.library=1 +compilers.p.build.source.library=1 +compilers.p.build.src.includes=1 +compilers.p.deprecated=1 +compilers.p.discouraged-class=1 +compilers.p.internal=1 +compilers.p.missing-packages=2 +compilers.p.missing-version-export-package=2 +compilers.p.missing-version-import-package=2 +compilers.p.missing-version-require-bundle=2 +compilers.p.no-required-att=0 +compilers.p.no.automatic.module=1 +compilers.p.not-externalized-att=2 +compilers.p.service.component.without.lazyactivation=1 +compilers.p.unknown-attribute=1 +compilers.p.unknown-class=1 +compilers.p.unknown-element=1 +compilers.p.unknown-identifier=1 +compilers.p.unknown-resource=1 +compilers.p.unresolved-ex-points=0 +compilers.p.unresolved-import=0 +compilers.s.create-docs=false +compilers.s.doc-folder=doc +compilers.s.open-tags=1 +eclipse.preferences.version=1 diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/META-INF/MANIFEST.MF new file mode 100644 index 000000000..e3d3a5be4 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Tests +Bundle-SymbolicName: org.eclipse.linuxtools.docker.editor.ls.tests +Bundle-Version: 1.0.0.qualifier +Fragment-Host: org.eclipse.linuxtools.docker.editor.ls +Automatic-Module-Name: org.eclipse.linuxtools.docker.editor.ls.tests +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Require-Bundle: org.eclipse.core.resources, + org.junit, + org.eclipse.ui.workbench, + org.eclipse.equinox.preferences, + org.eclipse.ui.workbench.texteditor, + org.eclipse.equinox.common, + org.eclipse.ui.ide, + org.eclipse.jface.text, + org.eclipse.ui.tests.harness, + org.eclipse.swt diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/build.properties b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/build.properties new file mode 100644 index 000000000..b107977f4 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/build.properties @@ -0,0 +1,3 @@ +source.. = src/ +bin.includes = META-INF/,\ + . diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/pom.xml b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/pom.xml new file mode 100644 index 000000000..3b6c93ba5 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/pom.xml @@ -0,0 +1,25 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.eclipse.linuxtools</groupId> + <artifactId>org.eclipse.linuxtools.docker</artifactId> + <version>5.1.0</version> + </parent> + <artifactId>org.eclipse.linuxtools.docker.editor.ls.tests</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>eclipse-test-plugin</packaging> + <build> + <plugins> + <plugin> + <groupId>org.eclipse.tycho</groupId> + <artifactId>tycho-surefire-plugin</artifactId> + <version>${tycho-version}</version> + <configuration> + <useUIThread>true</useUIThread> + <useUIHarness>true</useUIHarness> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls.tests/src/org/eclipse/linuxtools/docker/editor/ls/tests/TestLanguageServers.java b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/src/org/eclipse/linuxtools/docker/editor/ls/tests/TestLanguageServers.java new file mode 100644 index 000000000..e872feff8 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls.tests/src/org/eclipse/linuxtools/docker/editor/ls/tests/TestLanguageServers.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2019 Red Hat Inc. and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial implementation + *******************************************************************************/ +package org.eclipse.linuxtools.docker.editor.ls.tests; + +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayInputStream; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.ide.IDE; +import org.eclipse.ui.preferences.ScopedPreferenceStore; +import org.eclipse.ui.tests.harness.util.DisplayHelper; +import org.eclipse.ui.texteditor.ITextEditor; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class TestLanguageServers { + + private IProject project; + + @Parameter + public String fileName; + + @Before + public void setUpProject() throws Exception { + ScopedPreferenceStore prefs = new ScopedPreferenceStore(InstanceScope.INSTANCE, "org.eclipse.lsp4e"); + prefs.putValue("org.eclipse.linuxtools.docker.editor.ls.server.logging.enabled", Boolean.toString(true)); + this.project = ResourcesPlugin.getWorkspace().getRoot().getProject(getClass().getName() + System.nanoTime()); + project.create(null); + project.open(null); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + for (IViewReference ref : activePage.getViewReferences()) { + activePage.hideView(ref); + } + } + + @After + public void deleteProjectAndCloseEditors() throws Exception { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false); + this.project.delete(true, null); + } + + @Parameters + public static Object[] data() { + return new Object[] { "test.dockerfile", "Dockerfile" }; + } + + @Test + public void testDiagnostics() throws Exception { + final IFile file = project.getFile(fileName); + file.create(new ByteArrayInputStream("".getBytes()), true, null); + ITextEditor editor = (ITextEditor) IDE + .openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file, "org.eclipse.ui.genericeditor.GenericEditor"); + editor.getDocumentProvider().getDocument(editor.getEditorInput()).set("MAINTAINER alex"); + assertTrue("Diagnostic not published", new DisplayHelper() { + @Override + protected boolean condition() { + try { + return file.findMarkers("org.eclipse.lsp4e.diagnostic", true, IResource.DEPTH_ZERO).length != 0; + } catch (CoreException e) { + return false; + } + } + }.waitForCondition(PlatformUI.getWorkbench().getDisplay(), 5000)); + } +} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/.classpath b/containers/org.eclipse.linuxtools.docker.editor.ls/.classpath similarity index 95% rename from oprofile/org.eclipse.linuxtools.oprofile.launch/.classpath rename to containers/org.eclipse.linuxtools.docker.editor.ls/.classpath index 43b986286..1db08c6b4 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/.classpath +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/.gitignore b/containers/org.eclipse.linuxtools.docker.editor.ls/.gitignore new file mode 100644 index 000000000..d1a09283b --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.gitignore @@ -0,0 +1 @@ +language-server diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/.project b/containers/org.eclipse.linuxtools.docker.editor.ls/.project similarity index 91% rename from oprofile/org.eclipse.linuxtools.oprofile.tests/.project rename to containers/org.eclipse.linuxtools.docker.editor.ls/.project index c8e31b70b..8a2f7d9eb 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/.project +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>org.eclipse.linuxtools.oprofile.tests</name> + <name>org.eclipse.linuxtools.docker.editor.ls</name> <comment></comment> <projects> </projects> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7adc0fb9a --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.ui.prefs b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 000000000..4d0957f02 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,72 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=true +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.pde.prefs b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.pde.prefs new file mode 100644 index 000000000..2174e4fd5 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/.settings/org.eclipse.pde.prefs @@ -0,0 +1,34 @@ +compilers.f.unresolved-features=1 +compilers.f.unresolved-plugins=1 +compilers.incompatible-environment=1 +compilers.p.build=1 +compilers.p.build.bin.includes=1 +compilers.p.build.encodings=2 +compilers.p.build.java.compiler=2 +compilers.p.build.java.compliance=1 +compilers.p.build.missing.output=2 +compilers.p.build.output.library=1 +compilers.p.build.source.library=1 +compilers.p.build.src.includes=1 +compilers.p.deprecated=1 +compilers.p.discouraged-class=1 +compilers.p.internal=1 +compilers.p.missing-packages=2 +compilers.p.missing-version-export-package=2 +compilers.p.missing-version-import-package=2 +compilers.p.missing-version-require-bundle=2 +compilers.p.no-required-att=0 +compilers.p.no.automatic.module=1 +compilers.p.not-externalized-att=2 +compilers.p.service.component.without.lazyactivation=1 +compilers.p.unknown-attribute=1 +compilers.p.unknown-class=1 +compilers.p.unknown-element=1 +compilers.p.unknown-identifier=1 +compilers.p.unknown-resource=1 +compilers.p.unresolved-ex-points=0 +compilers.p.unresolved-import=0 +compilers.s.create-docs=false +compilers.s.doc-folder=doc +compilers.s.open-tags=1 +eclipse.preferences.version=1 diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.editor.ls/META-INF/MANIFEST.MF new file mode 100644 index 000000000..d6bd14609 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Dockerfile Language Server Client +Bundle-SymbolicName: org.eclipse.linuxtools.docker.editor.ls;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: Eclipse +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Bundle-ActivationPolicy: lazy +Require-Bundle: org.eclipse.lsp4e;bundle-version="0.11.0", + org.eclipse.ui.genericeditor;bundle-version="1.0.0", + org.eclipse.ui, + org.eclipse.core.contenttype, + org.eclipse.tm4e.registry;bundle-version="0.1.0", + org.eclipse.tm4e.ui;bundle-version="0.1.0", + org.eclipse.core.runtime;bundle-version="3.13.0", + org.eclipse.wildwebdeveloper.embedder.node +Eclipse-BundleShape: dir +Automatic-Module-Name: org.eclipse.linuxtools.docker.editor.ls diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/build.properties b/containers/org.eclipse.linuxtools.docker.editor.ls/build.properties new file mode 100644 index 000000000..a76c9aa22 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/build.properties @@ -0,0 +1,8 @@ +source.. = src/ +output.. = target/classes/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + grammars/,\ + language-server/,\ + icons/ diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/grammars/Dockerfile.tmLanguage b/containers/org.eclipse.linuxtools.docker.editor.ls/grammars/Dockerfile.tmLanguage new file mode 100644 index 000000000..a4a7b7ae8 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/grammars/Dockerfile.tmLanguage @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>fileTypes</key> + <array> + <string>Dockerfile</string> + </array> + <key>name</key> + <string>Dockerfile</string> + <key>patterns</key> + <array> + <dict> + <key>captures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>keyword.other.special-method.dockerfile</string> + </dict> + <key>2</key> + <dict> + <key>name</key> + <string>keyword.other.special-method.dockerfile</string> + </dict> + </dict> + <key>match</key> + <string>^\s*\b(?i:(FROM))\b.*?\b(?i:(AS))\b</string> + </dict> + <dict> + <key>captures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>keyword.control.dockerfile</string> + </dict> + <key>2</key> + <dict> + <key>name</key> + <string>keyword.other.special-method.dockerfile</string> + </dict> + </dict> + <key>match</key> + <string>^\s*(?i:(ONBUILD)\s+)?(?i:(ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR))\s</string> + </dict> + <dict> + <key>captures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>keyword.operator.dockerfile</string> + </dict> + <key>2</key> + <dict> + <key>name</key> + <string>keyword.other.special-method.dockerfile</string> + </dict> + </dict> + <key>match</key> + <string>^\s*(?i:(ONBUILD)\s+)?(?i:(CMD|ENTRYPOINT))\s</string> + </dict> + <dict> + <key>begin</key> + <string>"</string> + <key>beginCaptures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>punctuation.definition.string.begin.dockerfile</string> + </dict> + </dict> + <key>end</key> + <string>"</string> + <key>endCaptures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>punctuation.definition.string.end.dockerfile</string> + </dict> + </dict> + <key>name</key> + <string>string.quoted.double.dockerfile</string> + <key>patterns</key> + <array> + <dict> + <key>match</key> + <string>\\.</string> + <key>name</key> + <string>constant.character.escaped.dockerfile</string> + </dict> + </array> + </dict> + <dict> + <key>begin</key> + <string>'</string> + <key>beginCaptures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>punctuation.definition.string.begin.dockerfile</string> + </dict> + </dict> + <key>end</key> + <string>'</string> + <key>endCaptures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>punctuation.definition.string.end.dockerfile</string> + </dict> + </dict> + <key>name</key> + <string>string.quoted.single.dockerfile</string> + <key>patterns</key> + <array> + <dict> + <key>match</key> + <string>\\.</string> + <key>name</key> + <string>constant.character.escaped.dockerfile</string> + </dict> + </array> + </dict> + <dict> + <key>captures</key> + <dict> + <key>1</key> + <dict> + <key>name</key> + <string>punctuation.whitespace.comment.leading.dockerfile</string> + </dict> + <key>2</key> + <dict> + <key>name</key> + <string>comment.line.number-sign.dockerfile</string> + </dict> + <key>3</key> + <dict> + <key>name</key> + <string>punctuation.definition.comment.dockerfile</string> + </dict> + </dict> + <key>comment</key> + <string>comment.line</string> + <key>match</key> + <string>^(\s*)((#).*$\n?)</string> + </dict> + </array> + <key>scopeName</key> + <string>source.dockerfile</string> + <key>uuid</key> + <string>a39d8795-59d2-49af-aa00-fe74ee29576e</string> +</dict> +</plist> diff --git a/containers/org.eclipse.linuxtools.docker.editor/icons/dockerfile.png b/containers/org.eclipse.linuxtools.docker.editor.ls/icons/dockerfile.png similarity index 100% rename from containers/org.eclipse.linuxtools.docker.editor/icons/dockerfile.png rename to containers/org.eclipse.linuxtools.docker.editor.ls/icons/dockerfile.png diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/plugin.xml b/containers/org.eclipse.linuxtools.docker.editor.ls/plugin.xml new file mode 100644 index 000000000..fef0e113d --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/plugin.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + <extension + point="org.eclipse.lsp4e.languageServer"> + <server + class="org.eclipse.linuxtools.docker.editor.ls.DockerfileLanguageServer" + id="org.eclipse.linuxtools.docker.editor.ls.server" + label="Dockerfile Language Server"> + </server> + <contentTypeMapping + contentType="org.eclipse.linuxtools.docker.editor.ls" + languageId="Dockerfile" + id="org.eclipse.linuxtools.docker.editor.ls.server"> + </contentTypeMapping> + </extension> + <extension + point="org.eclipse.ui.editors"> + <editorContentTypeBinding + contentTypeId="org.eclipse.linuxtools.docker.editor.ls" + editorId="org.eclipse.ui.genericeditor.GenericEditor"> + </editorContentTypeBinding> + </extension> + <extension + point="org.eclipse.core.contenttype.contentTypes"> + <content-type + base-type="org.eclipse.core.runtime.text" + file-extensions="Dockerfile,dockerfile" + file-names="Dockerfile" + id="org.eclipse.linuxtools.docker.editor.ls" + name="Dockerfile" + priority="normal"> + </content-type> + </extension> + <extension + point="org.eclipse.tm4e.registry.grammars"> + <grammar + path="grammars/Dockerfile.tmLanguage" + scopeName="source.dockerfile"> + </grammar> + <scopeNameContentTypeBinding + contentTypeId="org.eclipse.linuxtools.docker.editor.ls" + scopeName="source.dockerfile"> + </scopeNameContentTypeBinding> + </extension> + <extension + point="org.eclipse.ui.genericeditor.presentationReconcilers"> + <presentationReconciler + class="org.eclipse.tm4e.ui.text.TMPresentationReconciler" + contentType="org.eclipse.linuxtools.docker.editor.ls"> + </presentationReconciler> + </extension> + <extension point="org.eclipse.ui.genericeditor.icons"> + <icon contentType="org.eclipse.linuxtools.docker.editor.ls" icon="icons/dockerfile.png" /> + </extension> + +</plugin> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/pom.xml b/containers/org.eclipse.linuxtools.docker.editor.ls/pom.xml new file mode 100644 index 000000000..2679de9c1 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/pom.xml @@ -0,0 +1,53 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.eclipse.linuxtools</groupId> + <artifactId>org.eclipse.linuxtools.docker</artifactId> + <version>5.1.0</version> + </parent> + <artifactId>org.eclipse.linuxtools.docker.editor.ls</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>eclipse-plugin</packaging> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <version>3.1.0</version> + <configuration> + <filesets> + <fileset> + <directory>language-server/</directory> + </fileset> + </filesets> + </configuration> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <version>1.6.0</version> + <executions> + <execution> + <id>npm-install</id> + <goals> + <goal>exec</goal> + </goals> + <phase>generate-resources</phase> + <configuration> + <executable>npm</executable> + <arguments> + <arg>install</arg> + <arg>--no-bin-links</arg> + <arg>dockerfile-language-server-nodejs@0.1.1</arg> + </arguments> + <workingDirectory>language-server/</workingDirectory> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/DockerfileLanguageServer.java b/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/DockerfileLanguageServer.java new file mode 100644 index 000000000..3c7a84dfa --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/DockerfileLanguageServer.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2017 Red Hat Inc. and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.linuxtools.docker.editor.ls; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider; + +public class DockerfileLanguageServer extends ProcessStreamConnectionProvider { + + final static String PATH = "/language-server/node_modules/dockerfile-language-server-nodejs/lib/server.js"; //$NON-NLS-1$ + + public DockerfileLanguageServer() { + List<String> command = new ArrayList<> (); + try { + URL url = FileLocator.toFileURL(getClass().getResource(PATH)); + String resourcePath = new File (url.getPath()).getAbsolutePath(); + String nodePath = InitializeLaunchConfigurations.getNodeJsLocation(); + if (nodePath != null) { + command.add(nodePath); + command.add(resourcePath); + command.add("--stdio"); //$NON-NLS-1$ + setCommands(command); + setWorkingDirectory(System.getProperty("user.dir")); //$NON-NLS-1$ + } + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/InitializeLaunchConfigurations.java b/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/InitializeLaunchConfigurations.java new file mode 100644 index 000000000..6616f00c2 --- /dev/null +++ b/containers/org.eclipse.linuxtools.docker.editor.ls/src/org/eclipse/linuxtools/docker/editor/ls/InitializeLaunchConfigurations.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2016 Red Hat Inc. and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.linuxtools.docker.editor.ls; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.wildwebdeveloper.embedder.node.NodeJSManager; + +public class InitializeLaunchConfigurations { + + private static boolean alreadyWarned; + + public static String getNodeJsLocation() { + + File nodeJsRuntime = NodeJSManager.getNodeJsLocation(); + if (nodeJsRuntime != null) { + return nodeJsRuntime.getAbsolutePath(); + } + + String res = null; + String[] command = new String[] { "/bin/bash", "-c", "which node" }; + if (Platform.getOS().equals(Platform.OS_WIN32)) { + command = new String[] { "cmd", "/c", "where node" }; + } + + BufferedReader reader = null; + try { + Process p = Runtime.getRuntime().exec(command); + reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + res = reader.readLine(); + } catch (IOException e) { + // try other defaults + } + + // Try default install path as last resort + if (res == null && Platform.getOS().equals(Platform.OS_MACOSX)) { + res = "/usr/local/bin/node"; + } + + if (res != null && Files.exists(Paths.get(res))) { + return res; + } else if (!alreadyWarned) { + warnNodeJSMissing(); + alreadyWarned = true; + } + + return null; + } + + private static void warnNodeJSMissing() { + Display.getDefault().asyncExec(() -> { + MessageDialog.openWarning(Display.getCurrent().getActiveShell(), "Missing node.js", + "Could not find node.js. This will result in editors missing key features.\n" + + "Please make sure node.js is installed and that your PATH environement variable contains the location to the `node` executable."); + }); + } + +} diff --git a/containers/org.eclipse.linuxtools.docker.editor/.gitignore b/containers/org.eclipse.linuxtools.docker.editor/.gitignore deleted file mode 100644 index ae3c17260..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/containers/org.eclipse.linuxtools.docker.editor/.project b/containers/org.eclipse.linuxtools.docker.editor/.project deleted file mode 100644 index 909f0809e..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/.project +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.docker.editor</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <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> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 10035e535..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,106 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.m2e.core.prefs b/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1c..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/containers/org.eclipse.linuxtools.docker.editor/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.editor/META-INF/MANIFEST.MF deleted file mode 100644 index 39c26364a..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/META-INF/MANIFEST.MF +++ /dev/null @@ -1,17 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Dockerfile Editor -Bundle-SymbolicName: org.eclipse.linuxtools.docker.editor;singleton:=true -Bundle-Version: 1.0.0.qualifier -Bundle-Activator: org.eclipse.linuxtools.internal.docker.editor.Activator -Bundle-Vendor: Eclipse Linux Tools -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.core.resources, - org.eclipse.ui.editors, - org.eclipse.jface.text -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.linuxtools.internal.docker.editor;x-friends:="org.eclipse.linuxtools.docker.ui" -Import-Package: org.eclipse.ui.ide -Automatic-Module-Name: org.eclipse.linuxtools.docker.editor diff --git a/containers/org.eclipse.linuxtools.docker.editor/about.html b/containers/org.eclipse.linuxtools.docker.editor/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/about.ini b/containers/org.eclipse.linuxtools.docker.editor/about.ini deleted file mode 100644 index 68dc433ff..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/about.ini +++ /dev/null @@ -1,2 +0,0 @@ -featureImage=icons/about_docker.png -aboutText=Docker Editor: Eclipse Plugin for Editing Dockerfiles \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ADD.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ADD.html deleted file mode 100644 index 9285576a3..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ADD.html +++ /dev/null @@ -1,9 +0,0 @@ -<p> -<b>ADD</b> copies files, directories or remote file URLs from a source to a destination. -</p> -<br/> -<p> -<pre> -ADD hom* /mydir/ # adds all files starting with "hom" -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ARG.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ARG.html deleted file mode 100644 index ab7c668c6..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ARG.html +++ /dev/null @@ -1,13 +0,0 @@ -<p> -<b>ARG</b> defines a variable that users can pass at build-time to the builder with the docker build command using the --build-arg <varname>=<value> flag. If a user specifies a build argument that was not defined in the Dockerfile, the build outputs an error. -</p> -<br/> -<p> -<pre> -ARG user1 # Defines an build argument called 'user1' without any default values -ARG buildno # Defines an build argument called 'buildno' without any default values - -ARG user1=someuser # Defines and declares a default value for the build argument 'user1' -ARG buildno=123 # Defines and declares a default value for the build argument 'buildno' -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/CMD.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/CMD.html deleted file mode 100644 index 35ba85796..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/CMD.html +++ /dev/null @@ -1,23 +0,0 @@ -<p> -<b>CMD</b> provides defaults for an executing container -</p> -<br/> -<p> -There are three ways to specify a CMD: the (preferred) exec form -<br/> -<pre> -CMD ["executable", "param1", "param2"] -</pre> -<br/> -as default parameters to ENTRYPOINT: -<br/> -<pre> -CMD ["param1","param2"] -</pre> -<br/> -and in shell form -<br/> -<pre> -CMD command param1 param2 -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/COPY.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/COPY.html deleted file mode 100644 index fd4890c2d..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/COPY.html +++ /dev/null @@ -1,9 +0,0 @@ -<p> -<b>COPY</b> copies new files or directories from source and adds them to the filesystem of the container at the destination path -</p> -<br/> -<p> -<pre> -COPY hom* /mydir/ # adds all files starting with "hom" -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENTRYPOINT.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENTRYPOINT.html deleted file mode 100644 index 8e17e7458..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENTRYPOINT.html +++ /dev/null @@ -1,17 +0,0 @@ -<p> -<b>ENTRYPOINT</b> configures a container that will be run as an executable. -</p> -<br/> -<p> -There are two ways to specify an ENTRYPOINT: the (preferred) exec form -<br/> -<pre> -ENTRYPOINT ["executable", "param1", "param2"] -</pre> -<br/> -and the shell form: -<br/> -<pre> -ENTRYPOINT command param1 param2 -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENV.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENV.html deleted file mode 100644 index 7aff5fcbb..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ENV.html +++ /dev/null @@ -1,13 +0,0 @@ -<p> -<b>ENV</b> allows to declare environment variables. -</p> -<br/> -<p> -<pre> -ENV CATALINA_HOME /usr/local/tomcat -</pre> -<br/> -<pre> -ENV LC_ALL en_US.UTF-8 -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/EXPOSE.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/EXPOSE.html deleted file mode 100644 index 443f262cd..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/EXPOSE.html +++ /dev/null @@ -1,7 +0,0 @@ -<p> -<b>EXPOSE</b> specifies network ports on which the container will listen at runtime. -</p> -<br/> -<p> -EXPOSE 8080 -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/FROM.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/FROM.html deleted file mode 100644 index cff119cba..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/FROM.html +++ /dev/null @@ -1,20 +0,0 @@ -<p> -<b>FROM</b> sets the base image starting from which the image is built. -</p> -<br/> -<p> -<pre> -FROM image -</pre> -<br/> -<pre> -FROM image:tag -<pre> -<br/> -FROM image@digest -</pre> -</p> -<br/> -<p> -<b>FROM</b> must be the first non-comment instruction in the Dockerfile -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/HEALTHCHECK.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/HEALTHCHECK.html deleted file mode 100644 index 1efe13f2c..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/HEALTHCHECK.html +++ /dev/null @@ -1,7 +0,0 @@ -<p> -Specify the <b>HEALTHCHECK</b> of the Docker image. -</p> -<br/> -<p> -HEALTHCHECK --timeout=3s CMD curl -f http://localhost/ || exit 1 -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/LABEL.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/LABEL.html deleted file mode 100644 index 9055969bf..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/LABEL.html +++ /dev/null @@ -1,21 +0,0 @@ -<p> -<b>LABEL</b> adds meta-data to an image using one or more key-value pairs. -</p> -<br/> -<p> -<pre> -LABEL Description="Docker Image for running the R Service Bus" Vendor="Open Analytics NV" Version="6.2" -</pre> -<br/> -<pre> -LABEL com.example.label-without-value -LABEL com.example.label-with-value="foo" -LABEL version="1.0" -LABEL description="This text illustrates \ -that label-values can span multiple lines." -</pre> -</p> -<br/> -<p> -N.B. Image labels can be viewed using the <pre>docker inspect </pre> command. -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/MAINTAINER.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/MAINTAINER.html deleted file mode 100644 index d463e6eae..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/MAINTAINER.html +++ /dev/null @@ -1,7 +0,0 @@ -<p> -Specify the <b>MAINTAINER</b> of the Docker image. -</p> -<br/> -<p> -MAINTAINER "Tobias Verbeke" -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ONBUILD.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ONBUILD.html deleted file mode 100644 index 244566d95..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/ONBUILD.html +++ /dev/null @@ -1,10 +0,0 @@ -<p> -<b>ONBUILD</b> specifies a 'trigger' instruction executed when the image is used as the base for another build. -</p> -<br/> -<p> -<pre> -ONBUILD ADD . /app/src -ONBUILD RUN /usr/local/bin/python-build --dir /app/src -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/RUN.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/RUN.html deleted file mode 100644 index 02718342c..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/RUN.html +++ /dev/null @@ -1,17 +0,0 @@ -<p> -<b>RUN</b> executes any commands in a new layer on top of the current image and commits the results -</p> -<br/> -<p> -There are two ways to specify a RUN: the exec form -<br/> -<pre> -RUN ["executable", "param1", "param2"] -</pre> -<br/> -and the shell form: -<br/> -<pre> -RUN command param1 param2 -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/SHELL.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/SHELL.html deleted file mode 100644 index eb4eab17e..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/SHELL.html +++ /dev/null @@ -1,9 +0,0 @@ -<p> -<b>SHELL</b> allows overriding the default shell used for the shell form of commands. The JSON format is required: ["executable", "parameters"]. On Linux, the default is: ["/bin/sh", "-c"] whereas on Windows it is ["cmd", "/S", "/C"]. -</p> -<br/> -<p> -<pre> -SHELL ["powershell", "-command"] -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/USER.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/USER.html deleted file mode 100644 index 05a240906..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/USER.html +++ /dev/null @@ -1,9 +0,0 @@ -<p> -<b>USER</b> sets the user name or UID used when running the image. -</p> -<br/> -<p> -<pre> -USER jenkins -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/VOLUME.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/VOLUME.html deleted file mode 100644 index fcffb119b..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/VOLUME.html +++ /dev/null @@ -1,11 +0,0 @@ -<p> -<b>VOLUME</b> creates a mount point with the specified name -</p> -<br/> -<p> -<pre> -VOLUME ["/data"] # specified as a JSON array -VOLUME /var/log -VOLUME /var/log /var/db -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/WORKDIR.html b/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/WORKDIR.html deleted file mode 100644 index 724c58c1b..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/additional-info/WORKDIR.html +++ /dev/null @@ -1,9 +0,0 @@ -<p> -<b>WORKDIR</b> sets the working directory for all WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow -</p> -<br/> -<p> -<pre> -WORKDIR /opt/architect -</pre> -</p> diff --git a/containers/org.eclipse.linuxtools.docker.editor/assets/instructions.txt b/containers/org.eclipse.linuxtools.docker.editor/assets/instructions.txt deleted file mode 100644 index 8c0ffccc8..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/assets/instructions.txt +++ /dev/null @@ -1,17 +0,0 @@ -ADD -ARG -CMD -COPY -ENTRYPOINT -ENV -EXPOSE -FROM -HEALTHCHECK -LABEL -MAINTAINER -ONBUILD -RUN -SHELL -USER -VOLUME -WORKDIR diff --git a/containers/org.eclipse.linuxtools.docker.editor/build.properties b/containers/org.eclipse.linuxtools.docker.editor/build.properties deleted file mode 100644 index f4328738d..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/build.properties +++ /dev/null @@ -1,9 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - about.html,\ - icons/,\ - assets/,\ - about.ini diff --git a/containers/org.eclipse.linuxtools.docker.editor/icons/about_docker.png b/containers/org.eclipse.linuxtools.docker.editor/icons/about_docker.png deleted file mode 100644 index abf2ddd4b5d703c368c9f0462694c715d790bffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3193 zcmeHIU2IfE6rPzo_jiA~-FBt4K&pu)0R=-$Y6vY<OIsu*{Jpfq#2C=T2V=s659$N@ zU<f{0lSYEZ1Y_`pga=LZp#cq&rUVNmYTBAYf7tGBi@V*uyL<1Qx#PLrT6UZ5wlBPO zHuv7yIcL7}^PMwu{^*g;fKhKCgaU`U+K<Dx(R(xkZ&o*d89w^^T|H+J^3`|`Mi(#D zA>`kAsJ-oER{%HqC(<|?je_3O8=f;yb!-?|Grb!rS~Ep-O^sy*SBOL`Mliw>jYJ|s zh-FcQ$$AZ7jI$ZD`{Fe%vbi=j^W(?wS&mZycUe@)0DuyVmsBy9B%+4Gnx?9bu`cHq zcdlvx(4+CWTVoTLNR&HB(en8`k*RG2Tr;uk;PT{gGO5b4-|t_Mx>XH;@8geRpAL=+ z-Kfbfh`L71nVmQJ+>D(ymvIXdnbHdb!w;vXzdn6T_xXyY<@<m+4zq2SGp_1fHL$E= zBY<^3rwUVaE=k<BxNURJ3s{ukp(LAZfBU;%hcrcoP^cs=iHfZi=IMonW1nB*kveQU zb*e5L3(e1F5JrO6S~(^wfZX!s4_u%VRp{(nr#N?EBXEV8GZ4#-T<CXPad^kGhdW+_ zJg-a<EFmFGS!2`?np8t1q5GXc$kGf9NO}NK*{P~YQ&rfOB>^t%z=%i(!qU%z-)h=# z5g8Hs_wQF)Us(uNRh1ZEoaZeolg)Bf%LS{c>vGL-fz`yc6$oMGx`MG_SR|O`3%U$A ziKb06ZDt4W+#Q~dPe(G+ztQS!YR}~D{&#wV!2l4xbm0&}pb7_W4xSnpn+$)@=SPl> zkbs}}rV7FYF{|)bP{nf_h!V(#ZlDxJw#F2l-n)MF1+9MTw)%!G7Gs5S@*;3u_s;!4 zC#I&WtAc#<^O9i7$PKf(TgWOPVwb7ox8<3!%>EuBQ6yab{%<rH%`_hc1q%6bT{QHQ z6t3?zM_+vT^xz+NZ;t%+`hgZ{k!LRgGn<=D%t1-aOi#T#oaDYBR%FPntLR>v**U>o z;vEshRdvj448bi@B~%046sZ()`S#SqzTOUS$YBinGZGGmf&nkk;yW2CukHM|V@)lR zPXlBakfB;C>J)O%6w?1qT@XPn2-|UUc_<$(J@?H{rLA?}lBnoY(g&Jhe6Vi^dK~9D zn-j{hgi`b2g?Ix2K8gm$!m@eV^w2R;Q?ajJ3bePi7HK@0mP7!{&>-i&=trSiRaGNC zb=Py-&P-`DIqta+E<+tTOjs6z(ubsR-jJR-*Q9rM9t0wvpcc(m8UPWH(RcaE-j2?2 zxEc^glle2(A9&~>D;&{4047TO!ErMC(HkdgL2dP;yNm(AQDphrF9SJAqJ}Tv_y3c} zeIxNiCQqDv2=gW%ZZ`OdJ==Hh-er0mR2t<C6m~$=FeV?(M&k+SLBr?Uvgw)H>JU_v zL`ul3V4;$M!Zzr^!mR*Z2NYDuMp-i@M@3l;FN(5)^)0S9()FR0(b_OjCMl&$H#qsQ UXYco)d8>yG9%;Y&>YJbZ2OZEA_y7O^ diff --git a/containers/org.eclipse.linuxtools.docker.editor/plugin.xml b/containers/org.eclipse.linuxtools.docker.editor/plugin.xml deleted file mode 100644 index db215f032..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/plugin.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.4"?> -<plugin> - <extension - point="org.eclipse.core.contenttype.contentTypes"> - <content-type - base-type="org.eclipse.core.runtime.text" - file-extensions="dockerfile" - file-names="Dockerfile" - id="org.eclipse.linuxtools.dockerfile.content-type" - name="Dockerfile" - priority="high"> - </content-type> - </extension> - <extension - point="org.eclipse.ui.editors.documentProviders"> - <provider - class="org.eclipse.linuxtools.internal.docker.editor.DockerDocumentProvider" - extensions="dockerfile" - id="org.eclipse.linuxtools.docker.editor.documentProvider"> - </provider> - </extension> - <extension - point="org.eclipse.ui.genericeditor.presentationReconcilers"> - <presentationReconciler - class="org.eclipse.linuxtools.internal.docker.editor.DockerPresentationReconciler" - contentType="org.eclipse.linuxtools.dockerfile.content-type"> - </presentationReconciler> - </extension> - <extension point="org.eclipse.ui.genericeditor.contentAssistProcessors"> - <contentAssistProcessor - class="org.eclipse.linuxtools.internal.docker.editor.assist.CompletionProcessor" - contentType="org.eclipse.linuxtools.dockerfile.content-type"> - </contentAssistProcessor> - </extension> - <extension point="org.eclipse.ui.genericeditor.hoverProviders"> - <hoverProvider - class="org.eclipse.linuxtools.internal.docker.editor.DockerHover" - contentType="org.eclipse.linuxtools.dockerfile.content-type"> - </hoverProvider> - </extension> - <extension - point="org.eclipse.ui.editors"> - <editor - class="org.eclipse.linuxtools.internal.docker.editor.DockerEditor" - contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor" - default="false" - icon="icons/dockerfile.png" - id="org.eclipse.linuxtools.DockerEditor" - name="Dockerfile Editor"> - <contentTypeBinding - contentTypeId="org.eclipse.linuxtools.dockerfile.content-type"> - </contentTypeBinding> - </editor> - </extension> - <extension - point="org.eclipse.ui.themes"> - <themeElementCategory - id="org.eclipse.linuxtools.docker.editor.presentation" - label="Dockerfile"> - </themeElementCategory> - <colorDefinition - categoryId="org.eclipse.linuxtools.docker.editor.presentation" - id="org.eclipse.linuxtools.docker.editor.color.instruction" - label="Instruction" - value="0,128,0"> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.linuxtools.docker.editor.presentation" - id="org.eclipse.linuxtools.docker.editor.color.string" - label="String" - value="0,0,255"> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.linuxtools.docker.editor.presentation" - id="org.eclipse.linuxtools.docker.editor.color.comment" - label="Comment" - value="128,128,128"> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.linuxtools.docker.editor.presentation" - id="org.eclipse.linuxtools.docker.editor.color.variable" - label="Variable" - value="255,0,0"> - </colorDefinition> - </extension> - -</plugin> diff --git a/containers/org.eclipse.linuxtools.docker.editor/pom.xml b/containers/org.eclipse.linuxtools.docker.editor/pom.xml deleted file mode 100644 index 38c95d889..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/pom.xml +++ /dev/null @@ -1,13 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.eclipse.linuxtools</groupId> - <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> - </parent> - <artifactId>org.eclipse.linuxtools.docker.editor</artifactId> - <version>1.0.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - -</project> diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Activator.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Activator.java deleted file mode 100644 index 41f7038c5..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Activator.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.core.runtime.Status; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * The activator class controls the plug-in life cycle - */ -public class Activator extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "org.eclipse.linuxtools.docker.editor"; //$NON-NLS-1$ - - // The shared instance - private static Activator plugin; - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static Activator getDefault() { - return plugin; - } - - public static void log(int severity, String message, Throwable cause) { - getDefault().getLog().log(new Status(severity, PLUGIN_ID, message, cause)); - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerConfiguration.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerConfiguration.java deleted file mode 100644 index ff5e1e9cc..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerConfiguration.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextHover; -import org.eclipse.jface.text.contentassist.ContentAssistant; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContentAssistant; -import org.eclipse.jface.text.presentation.IPresentationReconciler; -import org.eclipse.jface.text.reconciler.IReconciler; -import org.eclipse.jface.text.reconciler.IReconcilingStrategy; -import org.eclipse.jface.text.reconciler.Reconciler; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.linuxtools.internal.docker.editor.assist.CompletionProcessor; -import org.eclipse.linuxtools.internal.docker.editor.syntax.SyntaxReconcilingStrategy; -import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; - -public class DockerConfiguration extends TextSourceViewerConfiguration { - - private DockerEditor editor; - private DockerHover hover; - - public DockerConfiguration(DockerEditor editor) { - this.editor = editor; - } - - @Override - public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { - return new DockerPresentationReconciler(); - } - - @Override - public IReconciler getReconciler(ISourceViewer sourceViewer) { - Reconciler reconciler = new Reconciler(); - IReconcilingStrategy strategy = new SyntaxReconcilingStrategy(editor); - reconciler.setReconcilingStrategy(strategy, IDocument.DEFAULT_CONTENT_TYPE); - return reconciler; - } - - @Override - public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { - ContentAssistant ca = new ContentAssistant(); - IContentAssistProcessor cap = new CompletionProcessor(); - ca.setContentAssistProcessor(cap, IDocument.DEFAULT_CONTENT_TYPE); - ca.setInformationControlCreator(getInformationControlCreator(sourceViewer)); - return ca; - } - - @Override - public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { - if (hover == null) { - hover = new DockerHover(); - } - return hover; - } - -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerDocumentProvider.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerDocumentProvider.java deleted file mode 100644 index 2ed4bef9f..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerDocumentProvider.java +++ /dev/null @@ -1,210 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.CharacterCodingException; -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CodingErrorAction; -import java.nio.charset.IllegalCharsetNameException; -import java.nio.charset.UnmappableCharacterException; -import java.nio.charset.UnsupportedCharsetException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentPartitioner; -import org.eclipse.jface.text.rules.FastPartitioner; -import org.eclipse.linuxtools.internal.docker.editor.scanner.DockerPartitionScanner; -import org.eclipse.osgi.util.NLS; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.editors.text.EditorsUI; -import org.eclipse.ui.editors.text.FileDocumentProvider; -import org.eclipse.ui.ide.FileStoreEditorInput; -import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel; - -public class DockerDocumentProvider extends FileDocumentProvider { - - @Override - protected IDocument createDocument(Object element) throws CoreException { - IDocument document = super.createDocument(element); - if (document != null) { - DockerPartitionScanner scanner = new DockerPartitionScanner(); - IDocumentPartitioner partitioner = new FastPartitioner(scanner, - DockerPartitionScanner.ALLOWED_CONTENT_TYPES); - partitioner.connect(document); - document.setDocumentPartitioner(partitioner); - } - return document; - } - - @Override - public String getEncoding(Object element) { - return Charset.defaultCharset().name(); - } - - @Override - public boolean isReadOnly(Object element) { - if (element instanceof FileStoreEditorInput) { - String path = ((FileStoreEditorInput) element).getURI().getPath(); - return !new File(path).canWrite(); - } else { - return super.isReadOnly(element); - } - } - - @Override - public boolean isModifiable(Object element) { - if (element instanceof FileStoreEditorInput) { - String path = ((FileStoreEditorInput) element).getURI().getPath(); - return new File(path).canWrite(); - } else { - return super.isModifiable(element); - } - } - - @Override - protected boolean setDocumentContent(IDocument document, IEditorInput editorInput, String encoding) - throws CoreException { - if (editorInput instanceof FileStoreEditorInput) { - String path = ((FileStoreEditorInput) editorInput).getURI().getPath(); - InputStream in; - try { - in = new FileInputStream(path); - } catch (FileNotFoundException e) { - return false; - } - super.setDocumentContent(document, in, encoding); - return true; - } else { - return super.setDocumentContent(document, editorInput, encoding); - } - } - - @Override - protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) - throws CoreException { - if (element instanceof FileStoreEditorInput) { - - String encoding = null; - - ElementInfo info = getElementInfo(element); - Path filePath = Paths.get(((FileStoreEditorInput) element).getURI()); - - encoding = getEncoding(element); - - Charset charset; - try { - charset = Charset.forName(encoding); - } catch (UnsupportedCharsetException ex) { - String message = NLS.bind(Messages.DockerDocumentProvider_encoding_not_supported, encoding); - IStatus s = new Status(IStatus.ERROR, EditorsUI.PLUGIN_ID, IStatus.OK, message, ex); - throw new CoreException(s); - } catch (IllegalCharsetNameException ex) { - String message = NLS.bind(Messages.DockerDocumentProvider_encoding_not_legal, encoding); - IStatus s = new Status(IStatus.ERROR, EditorsUI.PLUGIN_ID, IStatus.OK, message, ex); - throw new CoreException(s); - } - - CharsetEncoder encoder = charset.newEncoder(); - encoder.onMalformedInput(CodingErrorAction.REPLACE); - encoder.onUnmappableCharacter(CodingErrorAction.REPORT); - - InputStream stream; - - try { - byte[] bytes; - ByteBuffer byteBuffer = encoder.encode(CharBuffer.wrap(document.get())); - if (byteBuffer.hasArray()) - bytes = byteBuffer.array(); - else { - bytes = new byte[byteBuffer.limit()]; - byteBuffer.get(bytes); - } - stream = new ByteArrayInputStream(bytes, 0, byteBuffer.limit()); - } catch (CharacterCodingException ex) { - Assert.isTrue(ex instanceof UnmappableCharacterException); - String message = NLS.bind(Messages.DockerDocumentProvider_cannot_be_mapped - + Messages.DockerDocumentProvider_chars_not_supported, encoding); - IStatus s = new Status(IStatus.ERROR, EditorsUI.PLUGIN_ID, EditorsUI.CHARSET_MAPPING_FAILED, message, - null); - throw new CoreException(s); - } - - if (Files.exists(filePath)) { - // inform about the upcoming content change - fireElementStateChanging(element); - try (FileWriter fw = new FileWriter(filePath.toFile()); - InputStreamReader istream = new InputStreamReader(stream)) { - char[] bb = new char[1024]; - int nRead = istream.read(bb); - while (nRead > 0) { - fw.write(bb, 0, nRead); - nRead = istream.read(bb); - } - } catch (RuntimeException | IOException x) { - // inform about failure - fireElementStateChangeFailed(element); - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, x.getMessage())); - } - - // If here, the editor state will be flipped to "not dirty". - // Thus, the state changing flag will be reset. - - if (info != null) { - - ResourceMarkerAnnotationModel model = (ResourceMarkerAnnotationModel) info.fModel; - if (model != null) - model.updateMarkers(info.fDocument); - } - - } else { - try { - Files.createFile(filePath); - try (FileWriter fw = new FileWriter(filePath.toFile()); - InputStreamReader istream = new InputStreamReader(stream)) { - char[] bb = new char[1024]; - int nRead = istream.read(bb); - while (nRead > 0) { - fw.write(bb, 0, nRead); - nRead = istream.read(bb); - } - } catch (IOException x) { - throw x; - } - } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage())); - } finally { - monitor.done(); - } - } - - } else { - super.doSaveDocument(monitor, element, document, overwrite); - } - } - -} \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerEditor.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerEditor.java deleted file mode 100644 index fff9fab08..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerEditor.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.linuxtools.internal.docker.editor.syntax.SyntaxProblemReporter; -import org.eclipse.ui.editors.text.TextEditor; - -public class DockerEditor extends TextEditor { - - public DockerEditor() { - super(); - setSourceViewerConfiguration(new DockerConfiguration(this)); - setDocumentProvider(new DockerDocumentProvider()); - } - - @Override - public void doSave(IProgressMonitor progressMonitor) { - try { - IResource resource = getEditorInput().getAdapter(IResource.class); - IDocument document = getDocumentProvider().getDocument(getEditorInput()); - new SyntaxProblemReporter().checkAndApply(document, 0, document.getLength(), resource); - } catch (CoreException | BadLocationException e) { - Activator.log(IStatus.ERROR, "Failed to perform syntax check", e); - } - super.doSave(progressMonitor); - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerHover.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerHover.java deleted file mode 100644 index 96aa000b9..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerHover.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat Inc and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implmentation. - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.DefaultInformationControl; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IInformationControlCreator; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextHover; -import org.eclipse.jface.text.ITextHoverExtension; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Region; -import org.eclipse.linuxtools.internal.docker.editor.util.AssetLoader; - -public class DockerHover implements ITextHover, ITextHoverExtension { - - private AssetLoader loader; - - public DockerHover() { - loader = new AssetLoader(); - } - - @Override - public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { - String varName = null; - try { - varName = textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength()); - } catch (BadLocationException e) { - return null; - } - - return loader.getInfo(varName); - } - - @Override - public IRegion getHoverRegion(ITextViewer textViewer, int offset) { - return findWord(textViewer.getDocument(), offset); - } - - @Override - public IInformationControlCreator getHoverControlCreator() { - return parent -> new DefaultInformationControl(parent, false); - } - - private IRegion findWord(IDocument document, int offset) { - int start = -2; - int end = -1; - - try { - - int pos = offset; - char c; - - while (pos >= 0) { - c = document.getChar(pos); - if (!Character.isUnicodeIdentifierPart(c)) - break; - --pos; - } - - start = pos; - - pos = offset; - int length = document.getLength(); - - while (pos < length) { - c = document.getChar(pos); - if (!Character.isUnicodeIdentifierPart(c)) - break; - ++pos; - } - - end = pos; - - } catch (BadLocationException x) { - } - - if (start >= -1 && end > -1) { - if (start == offset && end == offset) - return new Region(offset, 0); - else if (start == offset) - return new Region(start, end - start); - else - return new Region(start + 1, end - start - 1); - } - - return null; - } - -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerPresentationReconciler.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerPresentationReconciler.java deleted file mode 100644 index 001fefb3e..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/DockerPresentationReconciler.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat Inc and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implmentation. - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.presentation.PresentationReconciler; -import org.eclipse.jface.text.rules.DefaultDamagerRepairer; -import org.eclipse.linuxtools.internal.docker.editor.scanner.DockerCommentScanner; -import org.eclipse.linuxtools.internal.docker.editor.scanner.DockerInstructionScanner; -import org.eclipse.linuxtools.internal.docker.editor.scanner.DockerPartitionScanner; - -public class DockerPresentationReconciler extends PresentationReconciler { - - public DockerPresentationReconciler() { - super(); - DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new DockerCommentScanner()); - this.setDamager(dr, DockerPartitionScanner.TYPE_COMMENT); - this.setRepairer(dr, DockerPartitionScanner.TYPE_COMMENT); - - dr = new DefaultDamagerRepairer(new DockerInstructionScanner()); - this.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); - this.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); - } - -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Messages.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Messages.java deleted file mode 100644 index 57eb66524..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/Messages.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - Initial Contribution - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor; - -import org.eclipse.osgi.util.NLS; - -public class Messages extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.linuxtools.internal.docker.editor.messages"; //$NON-NLS-1$ - public static String DockerDocumentProvider_cannot_be_mapped; - public static String DockerDocumentProvider_chars_not_supported; - public static String DockerDocumentProvider_encoding_not_legal; - public static String DockerDocumentProvider_encoding_not_supported; - static { - // initialize resource bundle - NLS.initializeMessages(BUNDLE_NAME, Messages.class); - } - - private Messages() { - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProcessor.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProcessor.java deleted file mode 100644 index df9ac06a2..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProcessor.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.assist; - -import java.util.ArrayList; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -import org.eclipse.linuxtools.internal.docker.editor.Activator; -import org.eclipse.linuxtools.internal.docker.editor.scanner.InstructionWordRule; -import org.eclipse.linuxtools.internal.docker.editor.util.AssetLoader; - -public class CompletionProcessor implements IContentAssistProcessor { - - private static final ICompletionProposal[] NO_COMPLETIONS = {}; - private static final IContextInformation[] NO_CONTEXTS = {}; - private static final char[] PROPOSAL_ACTIVATION_CHARS = {}; - private static final char[] INFO_ACTIVATION_CHARS = {}; - private AssetLoader assetLoader; - - public CompletionProcessor() { - assetLoader = new AssetLoader(); - } - - @Override - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { - try { - IDocument document = viewer.getDocument(); - ArrayList<ICompletionProposal> result = new ArrayList<>(); - - int lineNr = document.getLineOfOffset(offset); - int lineOffset = document.getLineOffset(lineNr); - - boolean isNewLine = (offset == 0) || (document.getChar(offset - 1) == '\n'); - if (isNewLine) { - for (String instr : InstructionWordRule.INSTRUCTIONS) - result.add(new CompletionProposal(instr, lineOffset, 0, assetLoader.getInfo(instr))); - } - - boolean isFirstWord = true; - for (int i = lineOffset; i < offset; i++) { - if (Character.isWhitespace(document.getChar(i))) - isFirstWord = false; - } - if (isFirstWord) { - String prefix = ""; - for (int i = lineOffset; i < offset; i++) - prefix += document.getChar(i); - for (String instr : InstructionWordRule.INSTRUCTIONS) { - if (instr.toLowerCase().startsWith(prefix.toLowerCase())) - result.add( - new CompletionProposal(instr, lineOffset, prefix.length(), assetLoader.getInfo(instr))); - } - } - - return result.toArray(new ICompletionProposal[result.size()]); - } catch (Exception e) { - Activator.getDefault().getLog() - .log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, "Failed to compute completion proposals", e)); - return NO_COMPLETIONS; - } - } - - @Override - public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) { - return NO_CONTEXTS; - } - - @Override - public char[] getCompletionProposalAutoActivationCharacters() { - return PROPOSAL_ACTIVATION_CHARS; - } - - @Override - public char[] getContextInformationAutoActivationCharacters() { - return INFO_ACTIVATION_CHARS; - } - - @Override - public String getErrorMessage() { - return ""; - } - - @Override - public IContextInformationValidator getContextInformationValidator() { - return null; - } - -} \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProposal.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProposal.java deleted file mode 100644 index 511e4a783..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/assist/CompletionProposal.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.assist; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.DefaultInformationControl; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IInformationControlCreator; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.ICompletionProposalExtension3; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; - -/** - * Based on {@link org.eclipse.jface.text.contentassist.CompletionProposal} with - * added functionality for showing additional information formatted as HTML. - */ -public class CompletionProposal implements ICompletionProposal, ICompletionProposalExtension3 { - - private String fReplacementString; - private int fReplacementOffset; - private int fReplacementLength; - - private String fAdditionalProposalInfo; - - public CompletionProposal(String replacementString, int replacementOffset, int replacementLength, - String additionalProposalInfo) { - this.fReplacementString = replacementString; - this.fReplacementOffset = replacementOffset; - this.fReplacementLength = replacementLength; - this.fAdditionalProposalInfo = additionalProposalInfo; - } - - @Override - public void apply(IDocument document) { - try { - document.replace(fReplacementOffset, fReplacementLength, fReplacementString); - } catch (BadLocationException x) { - // ignore - } - } - - @Override - public Point getSelection(IDocument document) { - return new Point(fReplacementOffset + fReplacementString.length(), 0); - } - - @Override - public String getDisplayString() { - return fReplacementString; - } - - @Override - public String getAdditionalProposalInfo() { - return fAdditionalProposalInfo; - } - - @Override - public IInformationControlCreator getInformationControlCreator() { - return shell -> new DefaultInformationControl(shell, true); - } - - @Override - public IContextInformation getContextInformation() { - return null; - } - - @Override - public Image getImage() { - return null; - } - - @Override - public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) { - return null; - } - - @Override - public int getPrefixCompletionStart(IDocument document, int completionOffset) { - return 0; - } - -} \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/messages.properties b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/messages.properties deleted file mode 100644 index e6ad7ef8e..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/messages.properties +++ /dev/null @@ -1,4 +0,0 @@ -DockerDocumentProvider_cannot_be_mapped=Some characters cannot be mapped using {0} character encoding. -DockerDocumentProvider_chars_not_supported=Either change the encoding or remove the characters which are not supported by the {0} character encoding. -DockerDocumentProvider_encoding_not_legal=Character encoding {0} is not a legal character encoding. -DockerDocumentProvider_encoding_not_supported=Character encoding {0} is not supported by this platform. diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerCommentScanner.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerCommentScanner.java deleted file mode 100644 index fc60be542..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerCommentScanner.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.scanner; - -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.rules.EndOfLineRule; -import org.eclipse.jface.text.rules.ICharacterScanner; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.RuleBasedScanner; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.linuxtools.internal.docker.editor.syntax.SyntaxColors; - -public class DockerCommentScanner extends RuleBasedScanner { - - public static final String COMMENT_SEQUENCE = "#"; - - public DockerCommentScanner() { - IToken token = new Token(new TextAttribute(SyntaxColors.getCommentColor())); - - IRule[] rules = new IRule[1]; - rules[0] = new EndOfLineRule(COMMENT_SEQUENCE, token) { - @Override - public IToken evaluate(ICharacterScanner scanner, boolean resume) { - if (getColumn() > 0) - return Token.UNDEFINED; - return super.evaluate(scanner, resume); - } - }; - - setRules(rules); - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerInstructionScanner.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerInstructionScanner.java deleted file mode 100644 index 2e6cd5493..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerInstructionScanner.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.scanner; - -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.rules.EndOfLineRule; -import org.eclipse.jface.text.rules.ICharacterScanner; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.RuleBasedScanner; -import org.eclipse.jface.text.rules.SingleLineRule; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.linuxtools.internal.docker.editor.syntax.SyntaxColors; - -public class DockerInstructionScanner extends RuleBasedScanner { - - public DockerInstructionScanner() { - IToken instructionToken = new Token(new TextAttribute(SyntaxColors.getInstructionColor())); - IToken stringToken = new Token(new TextAttribute(SyntaxColors.getStringColor())); - IToken varToken = new Token(new TextAttribute(SyntaxColors.getVariableColor())); - IToken commentToken = new Token(new TextAttribute(SyntaxColors.getCommentColor())); - - IRule[] rules = new IRule[5]; - rules[0] = new InstructionWordRule(instructionToken); - rules[1] = new SingleLineRule("\"", "\"", stringToken, '\\'); - rules[2] = new SingleLineRule("\'", "\'", stringToken, '\\'); - rules[3] = new SingleLineRule("${", "}", varToken, '\\'); - rules[4] = new EndOfLineRule("#", commentToken) { - @Override - public IToken evaluate(ICharacterScanner scanner, boolean resume) { - if (getColumn() > 0) - return Token.UNDEFINED; - return super.evaluate(scanner, resume); - } - }; - - setRules(rules); - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerPartitionScanner.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerPartitionScanner.java deleted file mode 100644 index ff403e794..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/DockerPartitionScanner.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.scanner; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.rules.EndOfLineRule; -import org.eclipse.jface.text.rules.IPredicateRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; -import org.eclipse.jface.text.rules.Token; - -/** - * This scanner partitions the document in two things: - * <ul> - * <li>Comments, of type TYPE_COMMENT</li> - * <li>Everything else, of type {@link IDocument#DEFAULT_CONTENT_TYPE}</li> - * </ul> - */ -public class DockerPartitionScanner extends RuleBasedPartitionScanner { - - public final static String TYPE_COMMENT = "__docker_comment"; - - public final static String[] ALLOWED_CONTENT_TYPES = { TYPE_COMMENT }; - - public DockerPartitionScanner() { - IToken commentToken = new Token(TYPE_COMMENT); - IPredicateRule[] rules = new IPredicateRule[1]; - rules[0] = new EndOfLineRule(DockerCommentScanner.COMMENT_SEQUENCE, commentToken); - setPredicateRules(rules); - } - -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/InstructionWordRule.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/InstructionWordRule.java deleted file mode 100644 index 44f1c36bc..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/scanner/InstructionWordRule.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.scanner; - -import java.io.IOException; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.IWordDetector; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.text.rules.WordRule; -import org.eclipse.linuxtools.internal.docker.editor.Activator; -import org.eclipse.linuxtools.internal.docker.editor.util.AssetLoader; - -public class InstructionWordRule extends WordRule { - - public static final String[] INSTRUCTIONS; - - private static final String INSTRUCTION_FILE_PATH = "assets/instructions.txt"; - - // Load instructions from the text file. - static { - String[] loadedInstructions = new String[0]; - try { - String contentsString = AssetLoader.loadAsset(INSTRUCTION_FILE_PATH); - String lineSeparator = (contentsString.contains("\r\n")) ? "\r\n" : "\n"; - loadedInstructions = contentsString.split(lineSeparator); - } catch (IOException e) { - Activator.log(IStatus.WARNING, - "No content assist available: error while reading instruction file: " + INSTRUCTION_FILE_PATH, e); - } - INSTRUCTIONS = loadedInstructions; - } - - public InstructionWordRule(IToken instructionToken) { - super(new InstructionWordDetector(), Token.UNDEFINED, true); - setColumnConstraint(0); - for (String instruction : INSTRUCTIONS) - addWord(instruction, instructionToken); - } - - private static class InstructionWordDetector implements IWordDetector { - - @Override - public boolean isWordStart(char c) { - return Character.isJavaIdentifierStart(c); - } - - @Override - public boolean isWordPart(char c) { - return Character.isJavaIdentifierPart(c); - } - - } -} \ No newline at end of file diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxColors.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxColors.java deleted file mode 100644 index 716d6875d..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxColors.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.syntax; - -import org.eclipse.swt.graphics.Color; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.themes.ITheme; - -public class SyntaxColors { - - private static final String COLOR_DEF_INSTRUCTION = "org.eclipse.linuxtools.docker.editor.color.instruction"; - private static final String COLOR_DEF_STRING = "org.eclipse.linuxtools.docker.editor.color.string"; - private static final String COLOR_DEF_COMMENT = "org.eclipse.linuxtools.docker.editor.color.comment"; - private static final String COLOR_DEF_VARIABLE = "org.eclipse.linuxtools.docker.editor.color.variable"; - - public static Color getInstructionColor() { - return getTheme().getColorRegistry().get(COLOR_DEF_INSTRUCTION); - } - - public static Color getStringColor() { - return getTheme().getColorRegistry().get(COLOR_DEF_STRING); - } - - public static Color getCommentColor() { - return getTheme().getColorRegistry().get(COLOR_DEF_COMMENT); - } - - public static Color getVariableColor() { - return getTheme().getColorRegistry().get(COLOR_DEF_VARIABLE); - } - - private static ITheme getTheme() { - return PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxProblemReporter.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxProblemReporter.java deleted file mode 100644 index da555e7f3..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxProblemReporter.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.syntax; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.linuxtools.internal.docker.editor.scanner.DockerCommentScanner; -import org.eclipse.linuxtools.internal.docker.editor.scanner.InstructionWordRule; - -public class SyntaxProblemReporter { - - private static final String LINE_SEP = System.getProperty("line.separator"); - - public void checkAndApply(IDocument document, int offset, int length, IResource resource) - throws CoreException, BadLocationException { - - // We can't do problem report when file is external (no IResource) - if (resource == null) { - return; - } - boolean fullScan = (offset == 0 && length == document.getLength()); - - // Clear any existing markers in the affected region. - IMarker[] markers = resource.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_ZERO); - List<IMarker> markersToDelete = new ArrayList<>(); - for (IMarker marker : markers) { - int markerLineNr = (Integer) marker.getAttribute(IMarker.LINE_NUMBER); - int regionLineNr = document.getLineOfOffset(offset); - if (fullScan || markerLineNr == regionLineNr) - markersToDelete.add(marker); - } - for (IMarker marker : markersToDelete) - marker.delete(); - - // Apply new problems as needed. - List<SyntaxProblem> problems = check(document, offset, length); - for (SyntaxProblem problem : problems) { - IMarker marker = resource.createMarker(IMarker.PROBLEM); - marker.setAttribute(IMarker.SEVERITY, problem.severity); - marker.setAttribute(IMarker.MESSAGE, problem.message); - marker.setAttribute(IMarker.LINE_NUMBER, document.getLineOfOffset(problem.offset)); - marker.setAttribute(IMarker.CHAR_START, problem.offset); - marker.setAttribute(IMarker.CHAR_END, problem.offset + problem.length); - } - } - - public List<SyntaxProblem> check(IDocument document, int offset, int length) throws BadLocationException { - String region = document.get(offset, length); - int lineCount = region.split(LINE_SEP).length; - int startingLineNr = document.getLineOfOffset(offset); - - List<SyntaxProblem> problems = new ArrayList<>(); - - for (int lineNr = startingLineNr; lineNr < startingLineNr + lineCount; lineNr++) { - int lineOffset = document.getLineOffset(lineNr); - int lineEnd = document.getLength(); - if (lineNr + startingLineNr + 1 < lineCount) - lineEnd = document.getLineOffset(lineNr + 1); - - int endOfFirstWord = 0; - for (; endOfFirstWord < lineEnd - lineOffset; endOfFirstWord++) { - if (Character.isWhitespace(document.getChar(lineOffset + endOfFirstWord))) - break; - } - - String firstWord = document.get(lineOffset, endOfFirstWord); - if (firstWord.trim().isEmpty()) - continue; - if (firstWord.trim().startsWith(DockerCommentScanner.COMMENT_SEQUENCE)) - continue; - - String matchingInstruction = null; - for (String instr : InstructionWordRule.INSTRUCTIONS) { - if (instr.equalsIgnoreCase(firstWord)) { - matchingInstruction = instr; - break; - } - } - - if (matchingInstruction == null) { - // Error: unknown instruction - problems.add(new SyntaxProblem(IMarker.SEVERITY_ERROR, lineOffset, firstWord.length(), - "Unknown instruction: " + firstWord)); - } else if (!matchingInstruction.equals(firstWord)) { - // Warning: case incorrect - problems.add(new SyntaxProblem(IMarker.SEVERITY_WARNING, lineOffset, firstWord.length(), - "Instructions should be upper case")); - } - } - - return problems; - } - - public static class SyntaxProblem { - public int severity; - public int offset; - public int length; - public String message; - - public SyntaxProblem(int severity, int offset, int length, String message) { - this.severity = severity; - this.offset = offset; - this.length = length; - this.message = message; - } - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxReconcilingStrategy.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxReconcilingStrategy.java deleted file mode 100644 index 1251f6083..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/syntax/SyntaxReconcilingStrategy.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.syntax; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.reconciler.DirtyRegion; -import org.eclipse.jface.text.reconciler.IReconcilingStrategy; -import org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension; -import org.eclipse.linuxtools.internal.docker.editor.Activator; -import org.eclipse.linuxtools.internal.docker.editor.DockerEditor; - -public class SyntaxReconcilingStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension { - - private DockerEditor editor; - private IDocument document; - - public SyntaxReconcilingStrategy(DockerEditor editor) { - this.editor = editor; - } - - @Override - public void setDocument(IDocument document) { - this.document = document; - } - - @Override - public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { - try { - IResource resource = editor.getEditorInput().getAdapter(IResource.class); - new SyntaxProblemReporter().checkAndApply(document, subRegion.getOffset(), subRegion.getLength(), resource); - } catch (CoreException | BadLocationException e) { - Activator.log(IStatus.ERROR, "Failed to perform syntax check", e); - } - } - - @Override - public void reconcile(IRegion partition) { - // Partition reconciling not supported. - } - - @Override - public void setProgressMonitor(IProgressMonitor monitor) { - // Monitoring not supported. - } - - @Override - public void initialReconcile() { - // Nothing to do. - } -} diff --git a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/util/AssetLoader.java b/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/util/AssetLoader.java deleted file mode 100644 index d0ddd473a..000000000 --- a/containers/org.eclipse.linuxtools.docker.editor/src/org/eclipse/linuxtools/internal/docker/editor/util/AssetLoader.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Open Analytics NV and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -package org.eclipse.linuxtools.internal.docker.editor.util; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.docker.editor.Activator; - -public class AssetLoader { - - private Map<String, String> additionalInfos = new HashMap<>(); - private static final String ADDITIONAL_INFO_PATH = "assets/additional-info"; - - public AssetLoader() { - additionalInfos = new HashMap<>(); - } - - public String getInfo(String instruction) { - if (additionalInfos.containsKey(instruction)) - return additionalInfos.get(instruction); - - String additionalInfo = ""; - String targetFile = ADDITIONAL_INFO_PATH + "/" + instruction + ".html"; - try { - additionalInfo = AssetLoader.loadAsset(targetFile); - } catch (IOException e) { - Activator.log(IStatus.WARNING, "Failed to load additional info file for instruction " + instruction, e); - } - - additionalInfos.put(instruction, additionalInfo); - return additionalInfo; - } - - public static String loadAsset(String path) throws IOException { - URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(path), null); - if (url == null) { - return null; - } else { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (InputStream input = url.openStream()) { - - byte[] buffer = new byte[4096]; - int len = 0; - do { - len = input.read(buffer, 0, buffer.length); - if (len > 0) - out.write(buffer, 0, len); - } while (len >= 0); - } - return new String(out.toByteArray()); - } - } -} diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/.classpath b/containers/org.eclipse.linuxtools.docker.integration.tests/.classpath index cc5ee2dc8..336abe9f4 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/.classpath +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"> <attributes> diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.integration.tests/.settings/org.eclipse.jdt.core.prefs index a698e5967..a58ebdcad 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,15 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.integration.tests/META-INF/MANIFEST.MF index 36576a95a..a8824bb02 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/META-INF/MANIFEST.MF @@ -24,16 +24,16 @@ Require-Bundle: org.junit, org.apache.commons.lang, org.eclipse.linuxtools.docker.core, org.mockito, - com.spotify.docker.client;bundle-version="[8.9.2,9.0.0)", + org.mandas.docker-client;bundle-version="3.2.1", org.eclipse.linuxtools.docker.ui.tests, org.eclipse.ui.console, org.eclipse.ui, org.eclipse.swt, - com.google.guava;bundle-version="21.0.0", - javax.xml.bind;bundle-version="2.2.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 + com.google.guava;bundle-version="21.0.0" +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy -Import-Package: org.eclipse.debug.core, +Import-Package: javax.xml.bind;version="2.3.3", + org.eclipse.debug.core, org.eclipse.linuxtools.docker.reddeer, org.eclipse.linuxtools.docker.reddeer.condition, org.eclipse.linuxtools.docker.reddeer.core.ui.wizards, @@ -42,7 +42,8 @@ Import-Package: org.eclipse.debug.core, org.eclipse.linuxtools.docker.reddeer.ui, org.eclipse.linuxtools.docker.reddeer.ui.resources, org.eclipse.linuxtools.docker.reddeer.utils, - org.hamcrest;version="1.3.0" + org.hamcrest;version="1.3.0", + javax.annotation;version="1.3.5" Automatic-Module-Name: org.eclipse.linuxtools.docker.integration.tests diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Local.launch b/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Local.launch index 081237cbd..aa48b6a97 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Local.launch +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Local.launch @@ -1,117 +1,486 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.reddeer.eclipse.ui.launcher.JunitLaunchConfig"> -<setAttribute key="additional_plugins"> -<setEntry value="com.spotify.docker.client:6.1.1.v20170301-1624:default:true"/> -<setEntry value="org.apache.httpcomponents.httpclient:4.5.2.v20170210-0925:default:true"/> -<setEntry value="org.apache.httpcomponents.httpcore:4.4.6.v20170210-0925:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.core:3.1.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.editor:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.integration.tests:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.reddeer:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap:1.2.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.ui.tests:2.1.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.ui:3.1.0.qualifier:default:true"/> -<setEntry value="org.slf4j.api:1.7.2.v20121108-1250:default:true"/> -</setAttribute> -<booleanAttribute key="append.args" value="true"/> -<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/> -<booleanAttribute key="askclear" value="false"/> -<booleanAttribute key="automaticAdd" value="true"/> -<booleanAttribute key="automaticValidate" value="true"/> -<stringAttribute key="bootstrap" value=""/> -<stringAttribute key="checked" value="[NONE]"/> -<booleanAttribute key="clearConfig" value="true"/> -<booleanAttribute key="clearws" value="true"/> -<booleanAttribute key="clearwslog" value="false"/> -<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/> -<booleanAttribute key="default" value="false"/> -<stringAttribute key="featureDefaultLocation" value="workspace"/> -<stringAttribute key="featurePluginResolution" value="workspace"/> -<booleanAttribute key="includeOptional" value="true"/> -<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/DockerAllBotTest.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<mapAttribute key="org.eclipse.debug.core.environmentVariables"> -<mapEntry key="DISPLAY" value=":2"/> -</mapAttribute> -<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> -<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> -<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> -<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.linuxtools.docker.integration.tests.DockerAllBotTest"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.linuxtools.docker.integration.tests"/> -<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DdockerMockito=false -DunixSocket=unix:///var/run/docker.sock -Dusage_reporting_enabled=false -DdockerHubUsername=test -DdockerHubEmail=test@test.com -DdockerHubPassword=password -DdockerComposePath=//testpath"/> -<stringAttribute key="pde.version" value="3.3"/> -<stringAttribute key="product" value="org.eclipse.platform.ide"/> -<stringAttribute key="rd.launch.property.rd.captureScreenshot" value="true"/> -<stringAttribute key="rd.launch.property.rd.closeShells" value="true"/> -<stringAttribute key="rd.launch.property.rd.closeWelcomeScreen" value="true"/> -<stringAttribute key="rd.launch.property.rd.disableMavenIndex" value="true"/> -<stringAttribute key="rd.launch.property.rd.logCollectorEnabled" value="true"/> -<stringAttribute key="rd.launch.property.rd.logLevel" value="ALL"/> -<stringAttribute key="rd.launch.property.rd.logMessageFilter" value="ALL"/> -<stringAttribute key="rd.launch.property.rd.openAssociatedPerspective" value="never"/> -<stringAttribute key="rd.launch.property.rd.pauseFailedTest" value="false"/> -<stringAttribute key="rd.launch.property.rd.timePeriodFactor" value="1.0"/> -<setAttribute key="selected_features"> -<setEntry value="org.eclipse.cdt.autotools:default"/> -<setEntry value="org.eclipse.cdt.gdb:default"/> -<setEntry value="org.eclipse.cdt.gnu.build:default"/> -<setEntry value="org.eclipse.cdt.gnu.debug:default"/> -<setEntry value="org.eclipse.cdt.gnu.dsf:default"/> -<setEntry value="org.eclipse.cdt.native:default"/> -<setEntry value="org.eclipse.cdt.platform:default"/> -<setEntry value="org.eclipse.cdt:default"/> -<setEntry value="org.eclipse.draw2d:default"/> -<setEntry value="org.eclipse.e4.rcp:default"/> -<setEntry value="org.eclipse.ecf.core.feature:default"/> -<setEntry value="org.eclipse.ecf.core.ssl.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.httpclient4.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.httpclient4.ssl.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.ssl.feature:default"/> -<setEntry value="org.eclipse.emf.common:default"/> -<setEntry value="org.eclipse.emf.ecore:default"/> -<setEntry value="org.eclipse.equinox.p2.core.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.user.ui:default"/> -<setEntry value="org.eclipse.help:default"/> -<setEntry value="org.eclipse.jgit:default"/> -<setEntry value="org.eclipse.launchbar:default"/> -<setEntry value="org.eclipse.license:default"/> -<setEntry value="org.eclipse.linuxtools.docker.feature:default"/> -<setEntry value="org.eclipse.platform:default"/> -<setEntry value="org.eclipse.ptp.rdt.sync:default"/> -<setEntry value="org.eclipse.rcp:default"/> -<setEntry value="org.eclipse.remote:default"/> -<setEntry value="org.eclipse.swtbot.eclipse:default"/> -<setEntry value="org.eclipse.swtbot.forms:default"/> -<setEntry value="org.eclipse.swtbot:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.local.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.ssh.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.telnet.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.control.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.view.feature:default"/> -<setEntry value="org.eclipse.zest:default"/> -<setEntry value="org.jboss.reddeer.eclipse.feature:default"/> -<setEntry value="org.jboss.reddeer.junit.extension.feature:default"/> -<setEntry value="org.jboss.reddeer.ui.feature:default"/> -</setAttribute> -<stringAttribute key="selected_target_plugins" value="com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-guava@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.github.jnr.constants@default:default,com.github.jnr.enxio@default:default,com.github.jnr.ffi@default:default,com.github.jnr.jffi.native@default:false,com.github.jnr.jffi@default:default,com.github.jnr.posix@default:default,com.github.jnr.unixsocket@default:default,com.google.gson@default:default,com.google.guava@default:default,com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.spotify.docker.client@default:true,com.sun.el@default:default,javaewah@default:default,javassist@default:default,javax.annotation@default:default,javax.el@default:default,javax.inject@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.ws.rs@default:default,javax.xml@default:default,jnr.x86asm@default:default,org.aopalliance@default:default,org.apache.ant@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.compress@default:default,org.apache.commons.io@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.lang3.source@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient*4.3.6.v201511171540@default:default,org.apache.httpcomponents.httpclient*4.5.2.v20161115-1643@default:default,org.apache.httpcomponents.httpcore*4.3.3.v201411290715@default:default,org.apache.httpcomponents.httpcore*4.4.4.v20161115-1643@default:default,org.apache.jasper.glassfish@default:default,org.apache.log4j@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.assertj@default:default,org.bouncycastle.bcpkix@default:default,org.bouncycastle.bcprov@default:default,org.cyberneko.html@default:default,org.eclipse.ant.core@default:default,org.eclipse.ant.launching@default:default,org.eclipse.ant.ui@default:default,org.eclipse.cdt.autotools.core@default:default,org.eclipse.cdt.autotools.docs@default:default,org.eclipse.cdt.autotools.ui@default:default,org.eclipse.cdt.build.gcc.core@default:default,org.eclipse.cdt.codan.checkers.ui@default:default,org.eclipse.cdt.codan.checkers@default:default,org.eclipse.cdt.codan.core.cxx@default:default,org.eclipse.cdt.codan.core@default:default,org.eclipse.cdt.codan.ui.cxx@default:default,org.eclipse.cdt.codan.ui@default:default,org.eclipse.cdt.core.linux.x86_64@default:false,org.eclipse.cdt.core.linux@default:false,org.eclipse.cdt.core.native@default:default,org.eclipse.cdt.core@default:default,org.eclipse.cdt.debug.core@default:default,org.eclipse.cdt.debug.ui@default:default,org.eclipse.cdt.doc.user@default:default,org.eclipse.cdt.dsf.gdb.ui@default:default,org.eclipse.cdt.dsf.gdb@default:default,org.eclipse.cdt.dsf.ui@default:default,org.eclipse.cdt.dsf@default:default,org.eclipse.cdt.gdb.ui@default:default,org.eclipse.cdt.gdb@default:default,org.eclipse.cdt.launch@default:default,org.eclipse.cdt.make.core@default:default,org.eclipse.cdt.make.ui@default:default,org.eclipse.cdt.managedbuilder.core@default:default,org.eclipse.cdt.managedbuilder.gnu.ui@default:default,org.eclipse.cdt.managedbuilder.ui@default:default,org.eclipse.cdt.native.serial@default:default,org.eclipse.cdt.remote.core@default:default,org.eclipse.cdt.ui@default:default,org.eclipse.cdt@default:default,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.externaltools@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.draw2d@default:default,org.eclipse.dstore.core@default:default,org.eclipse.dstore.extra@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.dialogs@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.swt.gtk@default:false,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient4@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.launcher.gtk.linux.x86_64@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.directorywatcher@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.extensionlocation@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.reconciler.dropins@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.p2.transport.ecf@default:default,org.eclipse.equinox.p2.ui.importexport@default:default,org.eclipse.equinox.p2.ui.sdk.scheduler@default:default,org.eclipse.equinox.p2.ui.sdk@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.gef@default:default,org.eclipse.help.base@default:default,org.eclipse.help.ui@default:default,org.eclipse.help.webapp@default:default,org.eclipse.help@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.junit.core@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jgit.archive@default:default,org.eclipse.jgit@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.launchbar.core@default:default,org.eclipse.launchbar.ui.controls@default:default,org.eclipse.launchbar.ui@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.pde.launching@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.pde.ui@default:default,org.eclipse.platform.doc.user@default:default,org.eclipse.platform@default:default,org.eclipse.ptp.rdt.sync.core@default:default,org.eclipse.ptp.rdt.sync.git.core@default:default,org.eclipse.ptp.rdt.sync.git.ui@default:default,org.eclipse.ptp.rdt.sync.ui@default:default,org.eclipse.rcp@default:default,org.eclipse.remote.console@default:default,org.eclipse.remote.core@default:default,org.eclipse.remote.doc.isv@default:default,org.eclipse.remote.jsch.core@default:default,org.eclipse.remote.jsch.ui@default:default,org.eclipse.remote.serial.core@default:default,org.eclipse.remote.serial.ui@default:default,org.eclipse.remote.telnet.core@default:default,org.eclipse.remote.telnet.ui@default:default,org.eclipse.remote.ui@default:default,org.eclipse.search@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.swtbot.e4.finder@default:default,org.eclipse.swtbot.eclipse.core@default:default,org.eclipse.swtbot.eclipse.finder@default:default,org.eclipse.swtbot.forms.finder@default:default,org.eclipse.swtbot.go@default:default,org.eclipse.swtbot.junit4_x@default:default,org.eclipse.swtbot.swt.finder@default:default,org.eclipse.team.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.tm.terminal.connector.local@default:default,org.eclipse.tm.terminal.connector.process@default:default,org.eclipse.tm.terminal.connector.serial@default:default,org.eclipse.tm.terminal.connector.ssh@default:default,org.eclipse.tm.terminal.connector.telnet@default:default,org.eclipse.tm.terminal.control@default:default,org.eclipse.tm.terminal.view.core@default:default,org.eclipse.tm.terminal.view.ui@default:default,org.eclipse.tools.templates.core@default:default,org.eclipse.tools.templates.ui@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.console@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro.quicklinks@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.monitoring@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.themes@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.eclipse.wb.core.lib@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.wst.internet.monitor.core@default:default,org.eclipse.wst.server.core@default:default,org.eclipse.wst.server.discovery@default:default,org.eclipse.wst.server.ui@default:default,org.eclipse.zest.core@default:default,org.eclipse.zest.layouts@default:default,org.glassfish.hk2.api@default:default,org.glassfish.hk2.locator@default:default,org.glassfish.hk2.osgi-resource-locator@default:default,org.glassfish.hk2.utils@default:default,org.glassfish.jersey.apache.connector@default:default,org.glassfish.jersey.bundles.repackaged.jersey-guava@default:default,org.glassfish.jersey.core.jersey-client@default:default,org.glassfish.jersey.core.jersey-common@default:default,org.glassfish.jersey.core.jersey-server@default:default,org.glassfish.jersey.ext.entityfiltering@default:default,org.glassfish.jersey.media.jersey-media-json-jackson@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.jboss.reddeer.common@default:default,org.jboss.reddeer.core@default:default,org.jboss.reddeer.direct@default:default,org.jboss.reddeer.eclipse@default:default,org.jboss.reddeer.gef@default:default,org.jboss.reddeer.go@default:default,org.jboss.reddeer.jface@default:default,org.jboss.reddeer.junit.extension@default:default,org.jboss.reddeer.junit@default:default,org.jboss.reddeer.requirements@default:default,org.jboss.reddeer.swt@default:default,org.jboss.reddeer.ui@default:default,org.jboss.reddeer.uiforms@default:default,org.jboss.reddeer.workbench@default:default,org.junit@default:default,org.mockito@default:default,org.objectweb.asm.analysis@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm.util@default:default,org.objectweb.asm@default:default,org.objenesis@default:default,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.slf4j.api*1.7.10.v20160921-1923@default:default,org.slf4j.api*1.7.2.v20121108-1250@default:default,org.slf4j.impl.log4j12@default:false,org.swtchart@default:default,org.tukaani.xz@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/> -<stringAttribute key="selected_workspace_plugins" value="org.eclipse.linuxtools.docker.core@default:default,org.eclipse.linuxtools.docker.docs@default:default,org.eclipse.linuxtools.docker.editor@default:default,org.eclipse.linuxtools.docker.integration.tests@default:default,org.eclipse.linuxtools.docker.reddeer@default:default,org.eclipse.linuxtools.docker.tests.hamcrest-wrap@default:default,org.eclipse.linuxtools.docker.ui.tests@default:default,org.eclipse.linuxtools.docker.ui@default:default"/> -<booleanAttribute key="show_selected_only" value="false"/> -<booleanAttribute key="tracing" value="false"/> -<booleanAttribute key="useCustomFeatures" value="true"/> -<booleanAttribute key="useDefaultConfig" value="true"/> -<booleanAttribute key="useDefaultConfigArea" value="false"/> -<booleanAttribute key="useProduct" value="false"/> + <setAttribute key="additional_plugins"> + <setEntry value="org.apache.httpcomponents.httpclient:4.5.10.v20200114-1512:default:true:default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore:4.4.12.v20200108-1212:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.core:5.0.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.integration.tests:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.reddeer:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap:1.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui.tests:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui:5.0.0.qualifier:default:true:default:default"/> + <setEntry value="org.slf4j.api:1.7.2.v20121108-1250:default:true:default:default"/> + </setAttribute> + <booleanAttribute key="append.args" value="true"/> + <stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/> + <booleanAttribute key="askclear" value="false"/> + <booleanAttribute key="automaticAdd" value="true"/> + <booleanAttribute key="automaticValidate" value="true"/> + <stringAttribute key="bootstrap" value=""/> + <stringAttribute key="checked" value="[NONE]"/> + <booleanAttribute key="clearConfig" value="true"/> + <booleanAttribute key="clearws" value="true"/> + <booleanAttribute key="clearwslog" value="false"/> + <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/> + <booleanAttribute key="default" value="false"/> + <stringAttribute key="featureDefaultLocation" value="workspace"/> + <stringAttribute key="featurePluginResolution" value="workspace"/> + <booleanAttribute key="includeOptional" value="true"/> + <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> + <listEntry value="/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/DockerAllBotTest.java"/> + </listAttribute> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> + <listEntry value="1"/> + </listAttribute> + <mapAttribute key="org.eclipse.debug.core.environmentVariables"> + <mapEntry key="DISPLAY" value=":2"/> + </mapAttribute> + <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> + <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> + <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> + <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> + <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> + <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.linuxtools.docker.integration.tests.DockerAllBotTest"/> + <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/> + <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.linuxtools.docker.integration.tests"/> + <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> + <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DdockerMockito=false -DunixSocket=unix:///var/run/docker.sock -Dusage_reporting_enabled=false -DdockerHubUsername=test -DdockerHubEmail=test@test.com -DdockerHubPassword=password -DdockerComposePath=//testpath"/> + <stringAttribute key="pde.version" value="3.3"/> + <stringAttribute key="product" value="org.eclipse.platform.ide"/> + <stringAttribute key="rd.launch.property.rd.captureScreenshot" value="true"/> + <stringAttribute key="rd.launch.property.rd.closeShells" value="true"/> + <stringAttribute key="rd.launch.property.rd.closeWelcomeScreen" value="true"/> + <stringAttribute key="rd.launch.property.rd.defaultKey" value="org.eclipse.reddeer.widget.key"/> + <stringAttribute key="rd.launch.property.rd.disableMavenIndex" value="true"/> + <stringAttribute key="rd.launch.property.rd.logCollectorEnabled" value="true"/> + <stringAttribute key="rd.launch.property.rd.logLevel" value="ALL"/> + <stringAttribute key="rd.launch.property.rd.logMessageFilter" value="ALL"/> + <stringAttribute key="rd.launch.property.rd.maximizeWorkbench" value="true"/> + <stringAttribute key="rd.launch.property.rd.openAssociatedPerspective" value="never"/> + <stringAttribute key="rd.launch.property.rd.pauseFailedTest" value="false"/> + <stringAttribute key="rd.launch.property.rd.timePeriodFactor" value="1.0"/> + <setAttribute key="selected_features"> + <setEntry value="org.eclipse.cdt.autotools:default"/> + <setEntry value="org.eclipse.cdt.gdb:default"/> + <setEntry value="org.eclipse.cdt.gnu.build:default"/> + <setEntry value="org.eclipse.cdt.gnu.debug:default"/> + <setEntry value="org.eclipse.cdt.gnu.dsf:default"/> + <setEntry value="org.eclipse.cdt.native:default"/> + <setEntry value="org.eclipse.cdt.platform:default"/> + <setEntry value="org.eclipse.cdt:default"/> + <setEntry value="org.eclipse.draw2d:default"/> + <setEntry value="org.eclipse.e4.rcp:default"/> + <setEntry value="org.eclipse.ecf.core.feature:default"/> + <setEntry value="org.eclipse.ecf.core.ssl.feature:default"/> + <setEntry value="org.eclipse.ecf.filetransfer.feature:default"/> + <setEntry value="org.eclipse.ecf.filetransfer.ssl.feature:default"/> + <setEntry value="org.eclipse.emf.common:default"/> + <setEntry value="org.eclipse.emf.ecore:default"/> + <setEntry value="org.eclipse.equinox.p2.core.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.extras.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.user.ui:default"/> + <setEntry value="org.eclipse.help:default"/> + <setEntry value="org.eclipse.jgit:default"/> + <setEntry value="org.eclipse.launchbar:default"/> + <setEntry value="org.eclipse.license:default"/> + <setEntry value="org.eclipse.linuxtools.docker.feature:default"/> + <setEntry value="org.eclipse.platform:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync:default"/> + <setEntry value="org.eclipse.rcp:default"/> + <setEntry value="org.eclipse.remote:default"/> + <setEntry value="org.eclipse.swtbot.eclipse:default"/> + <setEntry value="org.eclipse.swtbot.forms:default"/> + <setEntry value="org.eclipse.swtbot:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.local.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.ssh.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.telnet.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.control.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.view.feature:default"/> + <setEntry value="org.eclipse.zest:default"/> + </setAttribute> + <setAttribute key="selected_target_bundles"> + <setEntry value="com.fasterxml.jackson.core.jackson-annotations@default:default"/> + <setEntry value="com.fasterxml.jackson.core.jackson-core@default:default"/> + <setEntry value="com.fasterxml.jackson.core.jackson-databind@default:default"/> + <setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-guava@default:default"/> + <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default"/> + <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default"/> + <setEntry value="com.github.jnr.constants@default:default"/> + <setEntry value="com.github.jnr.enxio@default:default"/> + <setEntry value="com.github.jnr.ffi@default:default"/> + <setEntry value="com.github.jnr.jffi.native@default:false"/> + <setEntry value="com.github.jnr.jffi@default:default"/> + <setEntry value="com.github.jnr.posix@default:default"/> + <setEntry value="com.github.jnr.unixsocket@default:default"/> + <setEntry value="com.google.gson@default:default"/> + <setEntry value="com.google.guava@default:default"/> + <setEntry value="com.ibm.icu@default:default"/> + <setEntry value="com.jcraft.jsch@default:default"/> + <setEntry value="com.sun.el@default:default"/> + <setEntry value="javaewah@default:default"/> + <setEntry value="javassist@default:default"/> + <setEntry value="javax.annotation@default:default"/> + <setEntry value="javax.el@default:default"/> + <setEntry value="javax.inject@default:default"/> + <setEntry value="javax.servlet.jsp@default:default"/> + <setEntry value="javax.servlet@default:default"/> + <setEntry value="javax.ws.rs@default:default"/> + <setEntry value="javax.xml@default:default"/> + <setEntry value="jnr.x86asm@default:default"/> + <setEntry value="org.aopalliance@default:default"/> + <setEntry value="org.apache.ant@default:default"/> + <setEntry value="org.apache.batik.css@default:default"/> + <setEntry value="org.apache.batik.util.gui@default:default"/> + <setEntry value="org.apache.batik.util@default:default"/> + <setEntry value="org.apache.commons.beanutils@default:default"/> + <setEntry value="org.apache.commons.codec@default:default"/> + <setEntry value="org.apache.commons.compress@default:default"/> + <setEntry value="org.apache.commons.io@default:default"/> + <setEntry value="org.apache.commons.jxpath@default:default"/> + <setEntry value="org.apache.commons.lang3.source@default:default"/> + <setEntry value="org.apache.commons.lang3@default:default"/> + <setEntry value="org.apache.commons.lang@default:default"/> + <setEntry value="org.apache.commons.logging@default:default"/> + <setEntry value="org.apache.felix.gogo.command@default:default"/> + <setEntry value="org.apache.felix.gogo.runtime@default:default"/> + <setEntry value="org.apache.felix.gogo.shell@default:default"/> + <setEntry value="org.apache.httpcomponents.httpclient*4.3.6.v201511171540@default:default"/> + <setEntry value="org.apache.httpcomponents.httpclient*4.5.2.v20161115-1643@default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore*4.3.3.v201411290715@default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore*4.4.4.v20161115-1643@default:default"/> + <setEntry value="org.apache.jasper.glassfish@default:default"/> + <setEntry value="org.apache.log4j@default:default"/> + <setEntry value="org.apache.lucene.analysis@default:default"/> + <setEntry value="org.apache.lucene.core@default:default"/> + <setEntry value="org.apache.xerces@default:default"/> + <setEntry value="org.apache.xml.resolver@default:default"/> + <setEntry value="org.apache.xml.serializer@default:default"/> + <setEntry value="org.assertj@default:default"/> + <setEntry value="org.bouncycastle.bcpkix@default:default"/> + <setEntry value="org.bouncycastle.bcprov@default:default"/> + <setEntry value="org.cyberneko.html@default:default"/> + <setEntry value="org.eclipse.ant.core@default:default"/> + <setEntry value="org.eclipse.ant.launching@default:default"/> + <setEntry value="org.eclipse.ant.ui@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.core@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.docs@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.ui@default:default"/> + <setEntry value="org.eclipse.cdt.build.gcc.core@default:default"/> + <setEntry value="org.eclipse.cdt.codan.checkers.ui@default:default"/> + <setEntry value="org.eclipse.cdt.codan.checkers@default:default"/> + <setEntry value="org.eclipse.cdt.codan.core.cxx@default:default"/> + <setEntry value="org.eclipse.cdt.codan.core@default:default"/> + <setEntry value="org.eclipse.cdt.codan.ui.cxx@default:default"/> + <setEntry value="org.eclipse.cdt.codan.ui@default:default"/> + <setEntry value="org.eclipse.cdt.core.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.cdt.core.linux@default:false"/> + <setEntry value="org.eclipse.cdt.core.native@default:default"/> + <setEntry value="org.eclipse.cdt.core@default:default"/> + <setEntry value="org.eclipse.cdt.debug.core@default:default"/> + <setEntry value="org.eclipse.cdt.debug.ui@default:default"/> + <setEntry value="org.eclipse.cdt.doc.user@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.gdb.ui@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.gdb@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.ui@default:default"/> + <setEntry value="org.eclipse.cdt.dsf@default:default"/> + <setEntry value="org.eclipse.cdt.gdb.ui@default:default"/> + <setEntry value="org.eclipse.cdt.gdb@default:default"/> + <setEntry value="org.eclipse.cdt.launch@default:default"/> + <setEntry value="org.eclipse.cdt.make.core@default:default"/> + <setEntry value="org.eclipse.cdt.make.ui@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.core@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.gnu.ui@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.ui@default:default"/> + <setEntry value="org.eclipse.cdt.native.serial@default:default"/> + <setEntry value="org.eclipse.cdt.remote.core@default:default"/> + <setEntry value="org.eclipse.cdt.ui@default:default"/> + <setEntry value="org.eclipse.cdt@default:default"/> + <setEntry value="org.eclipse.compare.core@default:default"/> + <setEntry value="org.eclipse.compare@default:default"/> + <setEntry value="org.eclipse.core.commands@default:default"/> + <setEntry value="org.eclipse.core.contenttype@default:default"/> + <setEntry value="org.eclipse.core.databinding.beans@default:default"/> + <setEntry value="org.eclipse.core.databinding.observable@default:default"/> + <setEntry value="org.eclipse.core.databinding.property@default:default"/> + <setEntry value="org.eclipse.core.databinding@default:default"/> + <setEntry value="org.eclipse.core.expressions@default:default"/> + <setEntry value="org.eclipse.core.externaltools@default:default"/> + <setEntry value="org.eclipse.core.filebuffers@default:default"/> + <setEntry value="org.eclipse.core.filesystem.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.core.filesystem@default:default"/> + <setEntry value="org.eclipse.core.jobs@default:default"/> + <setEntry value="org.eclipse.core.net.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.core.net@default:default"/> + <setEntry value="org.eclipse.core.resources@default:default"/> + <setEntry value="org.eclipse.core.runtime@default:true"/> + <setEntry value="org.eclipse.core.variables@default:default"/> + <setEntry value="org.eclipse.debug.core@default:default"/> + <setEntry value="org.eclipse.debug.ui@default:default"/> + <setEntry value="org.eclipse.draw2d@default:default"/> + <setEntry value="org.eclipse.dstore.core@default:default"/> + <setEntry value="org.eclipse.dstore.extra@default:default"/> + <setEntry value="org.eclipse.e4.core.commands@default:default"/> + <setEntry value="org.eclipse.e4.core.contexts@default:default"/> + <setEntry value="org.eclipse.e4.core.di.annotations@default:default"/> + <setEntry value="org.eclipse.e4.core.di.extensions@default:default"/> + <setEntry value="org.eclipse.e4.core.di@default:default"/> + <setEntry value="org.eclipse.e4.core.services@default:default"/> + <setEntry value="org.eclipse.e4.emf.xpath@default:default"/> + <setEntry value="org.eclipse.e4.ui.bindings@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.core@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.swt.theme@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.di@default:default"/> + <setEntry value="org.eclipse.e4.ui.dialogs@default:default"/> + <setEntry value="org.eclipse.e4.ui.model.workbench@default:default"/> + <setEntry value="org.eclipse.e4.ui.services@default:default"/> + <setEntry value="org.eclipse.e4.ui.swt.gtk@default:false"/> + <setEntry value="org.eclipse.e4.ui.widgets@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.addons.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.renderers.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench3@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench@default:default"/> + <setEntry value="org.eclipse.ecf.filetransfer@default:default"/> + <setEntry value="org.eclipse.ecf.identity@default:default"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.httpclient4@default:default"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.ssl@default:false"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer@default:default"/> + <setEntry value="org.eclipse.ecf.ssl@default:false"/> + <setEntry value="org.eclipse.ecf@default:default"/> + <setEntry value="org.eclipse.emf.common@default:default"/> + <setEntry value="org.eclipse.emf.ecore.change@default:default"/> + <setEntry value="org.eclipse.emf.ecore.xmi@default:default"/> + <setEntry value="org.eclipse.emf.ecore@default:default"/> + <setEntry value="org.eclipse.equinox.app@default:default"/> + <setEntry value="org.eclipse.equinox.bidi@default:default"/> + <setEntry value="org.eclipse.equinox.common@2:true"/> + <setEntry value="org.eclipse.equinox.concurrent@default:default"/> + <setEntry value="org.eclipse.equinox.console@default:default"/> + <setEntry value="org.eclipse.equinox.ds@1:true"/> + <setEntry value="org.eclipse.equinox.event@default:default"/> + <setEntry value="org.eclipse.equinox.frameworkadmin.equinox@default:default"/> + <setEntry value="org.eclipse.equinox.frameworkadmin@default:default"/> + <setEntry value="org.eclipse.equinox.http.jetty@default:default"/> + <setEntry value="org.eclipse.equinox.http.registry@default:default"/> + <setEntry value="org.eclipse.equinox.http.servlet@default:default"/> + <setEntry value="org.eclipse.equinox.jsp.jasper.registry@default:default"/> + <setEntry value="org.eclipse.equinox.jsp.jasper@default:default"/> + <setEntry value="org.eclipse.equinox.launcher.gtk.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.equinox.launcher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.artifact.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.console@default:default"/> + <setEntry value="org.eclipse.equinox.p2.core@default:default"/> + <setEntry value="org.eclipse.equinox.p2.director.app@default:default"/> + <setEntry value="org.eclipse.equinox.p2.director@default:default"/> + <setEntry value="org.eclipse.equinox.p2.directorywatcher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.engine@default:default"/> + <setEntry value="org.eclipse.equinox.p2.extensionlocation@default:default"/> + <setEntry value="org.eclipse.equinox.p2.garbagecollector@default:default"/> + <setEntry value="org.eclipse.equinox.p2.jarprocessor@default:default"/> + <setEntry value="org.eclipse.equinox.p2.metadata.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.metadata@default:default"/> + <setEntry value="org.eclipse.equinox.p2.operations@default:default"/> + <setEntry value="org.eclipse.equinox.p2.publisher.eclipse@default:default"/> + <setEntry value="org.eclipse.equinox.p2.publisher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.reconciler.dropins@default:default"/> + <setEntry value="org.eclipse.equinox.p2.repository.tools@default:default"/> + <setEntry value="org.eclipse.equinox.p2.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.touchpoint.eclipse@default:default"/> + <setEntry value="org.eclipse.equinox.p2.touchpoint.natives@default:default"/> + <setEntry value="org.eclipse.equinox.p2.transport.ecf@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.importexport@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.sdk.scheduler@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.sdk@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui@default:default"/> + <setEntry value="org.eclipse.equinox.p2.updatechecker@default:default"/> + <setEntry value="org.eclipse.equinox.p2.updatesite@default:default"/> + <setEntry value="org.eclipse.equinox.preferences@default:default"/> + <setEntry value="org.eclipse.equinox.registry@default:default"/> + <setEntry value="org.eclipse.equinox.security.ui@default:default"/> + <setEntry value="org.eclipse.equinox.security@default:default"/> + <setEntry value="org.eclipse.equinox.simpleconfigurator.manipulator@default:default"/> + <setEntry value="org.eclipse.equinox.simpleconfigurator@1:true"/> + <setEntry value="org.eclipse.equinox.util@default:default"/> + <setEntry value="org.eclipse.gef@default:default"/> + <setEntry value="org.eclipse.help.base@default:default"/> + <setEntry value="org.eclipse.help.ui@default:default"/> + <setEntry value="org.eclipse.help.webapp@default:default"/> + <setEntry value="org.eclipse.help@default:default"/> + <setEntry value="org.eclipse.jdt.core.manipulation@default:default"/> + <setEntry value="org.eclipse.jdt.core@default:default"/> + <setEntry value="org.eclipse.jdt.debug.ui@default:default"/> + <setEntry value="org.eclipse.jdt.debug@default:default"/> + <setEntry value="org.eclipse.jdt.junit.core@default:default"/> + <setEntry value="org.eclipse.jdt.junit.runtime@default:default"/> + <setEntry value="org.eclipse.jdt.junit@default:default"/> + <setEntry value="org.eclipse.jdt.launching@default:default"/> + <setEntry value="org.eclipse.jdt.ui@default:default"/> + <setEntry value="org.eclipse.jetty.continuation@default:default"/> + <setEntry value="org.eclipse.jetty.http@default:default"/> + <setEntry value="org.eclipse.jetty.io@default:default"/> + <setEntry value="org.eclipse.jetty.security@default:default"/> + <setEntry value="org.eclipse.jetty.server@default:default"/> + <setEntry value="org.eclipse.jetty.servlet@default:default"/> + <setEntry value="org.eclipse.jetty.util@default:default"/> + <setEntry value="org.eclipse.jface.databinding@default:default"/> + <setEntry value="org.eclipse.jface.text@default:default"/> + <setEntry value="org.eclipse.jface@default:default"/> + <setEntry value="org.eclipse.jgit.archive@default:default"/> + <setEntry value="org.eclipse.jgit@default:default"/> + <setEntry value="org.eclipse.jsch.core@default:default"/> + <setEntry value="org.eclipse.jsch.ui@default:default"/> + <setEntry value="org.eclipse.launchbar.core@default:default"/> + <setEntry value="org.eclipse.launchbar.ui.controls@default:default"/> + <setEntry value="org.eclipse.launchbar.ui@default:default"/> + <setEntry value="org.eclipse.ltk.core.refactoring@default:default"/> + <setEntry value="org.eclipse.ltk.ui.refactoring@default:default"/> + <setEntry value="org.eclipse.osgi.compatibility.state@default:false"/> + <setEntry value="org.eclipse.osgi.services@default:default"/> + <setEntry value="org.eclipse.osgi.util@default:default"/> + <setEntry value="org.eclipse.osgi@-1:true"/> + <setEntry value="org.eclipse.pde.build@default:default"/> + <setEntry value="org.eclipse.pde.core@default:default"/> + <setEntry value="org.eclipse.pde.launching@default:default"/> + <setEntry value="org.eclipse.pde.runtime@default:default"/> + <setEntry value="org.eclipse.pde.ui@default:default"/> + <setEntry value="org.eclipse.platform.doc.user@default:default"/> + <setEntry value="org.eclipse.platform@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.core@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.git.core@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.git.ui@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.ui@default:default"/> + <setEntry value="org.eclipse.rcp@default:default"/> + <setEntry value="org.eclipse.remote.console@default:default"/> + <setEntry value="org.eclipse.remote.core@default:default"/> + <setEntry value="org.eclipse.remote.doc.isv@default:default"/> + <setEntry value="org.eclipse.remote.jsch.core@default:default"/> + <setEntry value="org.eclipse.remote.jsch.ui@default:default"/> + <setEntry value="org.eclipse.remote.serial.core@default:default"/> + <setEntry value="org.eclipse.remote.serial.ui@default:default"/> + <setEntry value="org.eclipse.remote.telnet.core@default:default"/> + <setEntry value="org.eclipse.remote.telnet.ui@default:default"/> + <setEntry value="org.eclipse.remote.ui@default:default"/> + <setEntry value="org.eclipse.search@default:default"/> + <setEntry value="org.eclipse.swt.gtk.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.swt@default:default"/> + <setEntry value="org.eclipse.swtbot.e4.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.eclipse.core@default:default"/> + <setEntry value="org.eclipse.swtbot.eclipse.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.forms.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.go@default:default"/> + <setEntry value="org.eclipse.swtbot.junit4_x@default:default"/> + <setEntry value="org.eclipse.swtbot.swt.finder@default:default"/> + <setEntry value="org.eclipse.team.core@default:default"/> + <setEntry value="org.eclipse.team.ui@default:default"/> + <setEntry value="org.eclipse.text@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.local@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.process@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.serial@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.ssh@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.telnet@default:default"/> + <setEntry value="org.eclipse.tm.terminal.control@default:default"/> + <setEntry value="org.eclipse.tm.terminal.view.core@default:default"/> + <setEntry value="org.eclipse.tm.terminal.view.ui@default:default"/> + <setEntry value="org.eclipse.tools.templates.core@default:default"/> + <setEntry value="org.eclipse.tools.templates.ui@default:default"/> + <setEntry value="org.eclipse.ui.browser@default:default"/> + <setEntry value="org.eclipse.ui.cheatsheets@default:default"/> + <setEntry value="org.eclipse.ui.console@default:default"/> + <setEntry value="org.eclipse.ui.editors@default:default"/> + <setEntry value="org.eclipse.ui.externaltools@default:default"/> + <setEntry value="org.eclipse.ui.forms@default:default"/> + <setEntry value="org.eclipse.ui.ide.application@default:default"/> + <setEntry value="org.eclipse.ui.ide@default:default"/> + <setEntry value="org.eclipse.ui.intro.quicklinks@default:default"/> + <setEntry value="org.eclipse.ui.intro.universal@default:default"/> + <setEntry value="org.eclipse.ui.intro@default:default"/> + <setEntry value="org.eclipse.ui.monitoring@default:default"/> + <setEntry value="org.eclipse.ui.navigator.resources@default:default"/> + <setEntry value="org.eclipse.ui.navigator@default:default"/> + <setEntry value="org.eclipse.ui.net@default:default"/> + <setEntry value="org.eclipse.ui.themes@default:default"/> + <setEntry value="org.eclipse.ui.trace@default:default"/> + <setEntry value="org.eclipse.ui.views.log@default:default"/> + <setEntry value="org.eclipse.ui.views.properties.tabbed@default:default"/> + <setEntry value="org.eclipse.ui.views@default:default"/> + <setEntry value="org.eclipse.ui.workbench.texteditor@default:default"/> + <setEntry value="org.eclipse.ui.workbench@default:default"/> + <setEntry value="org.eclipse.ui@default:default"/> + <setEntry value="org.eclipse.update.configurator@3:true"/> + <setEntry value="org.eclipse.wb.core.lib@default:default"/> + <setEntry value="org.eclipse.wst.common.core@default:default"/> + <setEntry value="org.eclipse.wst.internet.monitor.core@default:default"/> + <setEntry value="org.eclipse.wst.server.core@default:default"/> + <setEntry value="org.eclipse.wst.server.discovery@default:default"/> + <setEntry value="org.eclipse.wst.server.ui@default:default"/> + <setEntry value="org.eclipse.zest.core@default:default"/> + <setEntry value="org.eclipse.zest.layouts@default:default"/> + <setEntry value="org.glassfish.hk2.api@default:default"/> + <setEntry value="org.glassfish.hk2.locator@default:default"/> + <setEntry value="org.glassfish.hk2.osgi-resource-locator@default:default"/> + <setEntry value="org.glassfish.hk2.utils@default:default"/> + <setEntry value="org.glassfish.jersey.apache.connector@default:default"/> + <setEntry value="org.glassfish.jersey.bundles.repackaged.jersey-guava@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-client@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-common@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-server@default:default"/> + <setEntry value="org.glassfish.jersey.ext.entityfiltering@default:default"/> + <setEntry value="org.glassfish.jersey.media.jersey-media-json-jackson@default:default"/> + <setEntry value="org.hamcrest.core@default:default"/> + <setEntry value="org.hamcrest.library@default:default"/> + <setEntry value="org.jboss.reddeer.common@default:default"/> + <setEntry value="org.jboss.reddeer.core@default:default"/> + <setEntry value="org.jboss.reddeer.direct@default:default"/> + <setEntry value="org.jboss.reddeer.eclipse@default:default"/> + <setEntry value="org.jboss.reddeer.gef@default:default"/> + <setEntry value="org.jboss.reddeer.go@default:default"/> + <setEntry value="org.jboss.reddeer.jface@default:default"/> + <setEntry value="org.jboss.reddeer.junit.extension@default:default"/> + <setEntry value="org.jboss.reddeer.junit@default:default"/> + <setEntry value="org.jboss.reddeer.requirements@default:default"/> + <setEntry value="org.jboss.reddeer.swt@default:default"/> + <setEntry value="org.jboss.reddeer.ui@default:default"/> + <setEntry value="org.jboss.reddeer.uiforms@default:default"/> + <setEntry value="org.jboss.reddeer.workbench@default:default"/> + <setEntry value="org.junit@default:default"/> + <setEntry value="org.mandas.docker.client@default:true"/> + <setEntry value="org.mockito@default:default"/> + <setEntry value="org.objectweb.asm.analysis@default:default"/> + <setEntry value="org.objectweb.asm.tree@default:default"/> + <setEntry value="org.objectweb.asm.util@default:default"/> + <setEntry value="org.objectweb.asm@default:default"/> + <setEntry value="org.objenesis@default:default"/> + <setEntry value="org.sat4j.core@default:default"/> + <setEntry value="org.sat4j.pb@default:default"/> + <setEntry value="org.slf4j.api*1.7.10.v20160921-1923@default:default"/> + <setEntry value="org.slf4j.api*1.7.2.v20121108-1250@default:default"/> + <setEntry value="org.slf4j.impl.log4j12@default:false"/> + <setEntry value="org.swtchart@default:default"/> + <setEntry value="org.tukaani.xz@default:default"/> + <setEntry value="org.w3c.css.sac@default:default"/> + <setEntry value="org.w3c.dom.events@default:default"/> + <setEntry value="org.w3c.dom.smil@default:default"/> + <setEntry value="org.w3c.dom.svg@default:default"/> + </setAttribute> + <setAttribute key="selected_workspace_bundles"> + <setEntry value="org.eclipse.linuxtools.docker.core@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.docs@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.editor@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.integration.tests@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.reddeer@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui.tests@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui@default:default"/> + </setAttribute> + <booleanAttribute key="show_selected_only" value="false"/> + <booleanAttribute key="tracing" value="false"/> + <booleanAttribute key="useCustomFeatures" value="true"/> + <booleanAttribute key="useDefaultConfig" value="true"/> + <booleanAttribute key="useDefaultConfigArea" value="false"/> + <booleanAttribute key="useProduct" value="false"/> </launchConfiguration> diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Mockito.launch b/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Mockito.launch index 361936406..40eb1e067 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Mockito.launch +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/launchers/DockerAllBotTest Mockito.launch @@ -1,118 +1,486 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.reddeer.eclipse.ui.launcher.JunitLaunchConfig"> -<setAttribute key="additional_plugins"> -<setEntry value="com.spotify.docker.client:3.6.8.v20161117-2005:default:true"/> -<setEntry value="org.apache.httpcomponents.httpclient:4.5.2.v20161115-1643:default:true"/> -<setEntry value="org.apache.httpcomponents.httpcore:4.4.4.v20161115-1643:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.core:2.3.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.editor:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.integration.tests:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.reddeer:1.0.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap:1.2.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.ui.tests:2.1.0.qualifier:default:true"/> -<setEntry value="org.eclipse.linuxtools.docker.ui:2.3.0.qualifier:default:true"/> -<setEntry value="org.slf4j.api:1.7.10.v20160921-1923:default:true"/> -</setAttribute> -<booleanAttribute key="append.args" value="true"/> -<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/> -<booleanAttribute key="askclear" value="false"/> -<booleanAttribute key="automaticAdd" value="true"/> -<booleanAttribute key="automaticValidate" value="true"/> -<stringAttribute key="bootstrap" value=""/> -<stringAttribute key="checked" value="[NONE]"/> -<booleanAttribute key="clearConfig" value="true"/> -<booleanAttribute key="clearws" value="true"/> -<booleanAttribute key="clearwslog" value="false"/> -<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/> -<booleanAttribute key="default" value="false"/> -<stringAttribute key="featureDefaultLocation" value="workspace"/> -<stringAttribute key="featurePluginResolution" value="workspace"/> -<booleanAttribute key="includeOptional" value="true"/> -<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/DockerAllBotTest.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<mapAttribute key="org.eclipse.debug.core.environmentVariables"> -<mapEntry key="DISPLAY" value=":1"/> -</mapAttribute> -<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> -<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> -<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> -<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.linuxtools.docker.integration.tests.DockerAllBotTest"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.linuxtools.docker.integration.tests"/> -<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DdockerMockito=true -Dusage_reporting_enabled=false -DdockerHubUsername=test -DdockerHubEmail=test@test.com -DdockerHubPassword=password -DdockerComposePath=//testpath"/> -<stringAttribute key="pde.version" value="3.3"/> -<stringAttribute key="product" value="org.eclipse.platform.ide"/> -<stringAttribute key="rd.launch.property.rd.captureScreenshot" value="true"/> -<stringAttribute key="rd.launch.property.rd.closeShells" value="true"/> -<stringAttribute key="rd.launch.property.rd.closeWelcomeScreen" value="true"/> -<stringAttribute key="rd.launch.property.rd.disableMavenIndex" value="true"/> -<stringAttribute key="rd.launch.property.rd.logCollectorEnabled" value="true"/> -<stringAttribute key="rd.launch.property.rd.logLevel" value="ALL"/> -<stringAttribute key="rd.launch.property.rd.logMessageFilter" value="ALL"/> -<stringAttribute key="rd.launch.property.rd.openAssociatedPerspective" value="never"/> -<stringAttribute key="rd.launch.property.rd.pauseFailedTest" value="false"/> -<stringAttribute key="rd.launch.property.rd.timePeriodFactor" value="1.0"/> -<setAttribute key="selected_features"> -<setEntry value="org.eclipse.cdt.autotools:default"/> -<setEntry value="org.eclipse.cdt.gdb:default"/> -<setEntry value="org.eclipse.cdt.gnu.build:default"/> -<setEntry value="org.eclipse.cdt.gnu.debug:default"/> -<setEntry value="org.eclipse.cdt.gnu.dsf:default"/> -<setEntry value="org.eclipse.cdt.native:default"/> -<setEntry value="org.eclipse.cdt.platform:default"/> -<setEntry value="org.eclipse.cdt:default"/> -<setEntry value="org.eclipse.draw2d:default"/> -<setEntry value="org.eclipse.e4.rcp:default"/> -<setEntry value="org.eclipse.ecf.core.feature:default"/> -<setEntry value="org.eclipse.ecf.core.ssl.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.httpclient4.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.httpclient4.ssl.feature:default"/> -<setEntry value="org.eclipse.ecf.filetransfer.ssl.feature:default"/> -<setEntry value="org.eclipse.emf.common:default"/> -<setEntry value="org.eclipse.emf.ecore:default"/> -<setEntry value="org.eclipse.equinox.p2.core.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.user.ui:default"/> -<setEntry value="org.eclipse.help:default"/> -<setEntry value="org.eclipse.jgit:default"/> -<setEntry value="org.eclipse.launchbar:default"/> -<setEntry value="org.eclipse.license:default"/> -<setEntry value="org.eclipse.linuxtools.docker.feature:default"/> -<setEntry value="org.eclipse.platform:default"/> -<setEntry value="org.eclipse.ptp.rdt.sync:default"/> -<setEntry value="org.eclipse.rcp:default"/> -<setEntry value="org.eclipse.remote:default"/> -<setEntry value="org.eclipse.swtbot.eclipse:default"/> -<setEntry value="org.eclipse.swtbot.forms:default"/> -<setEntry value="org.eclipse.swtbot:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.local.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.serial.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.ssh.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.connector.telnet.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.control.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.feature:default"/> -<setEntry value="org.eclipse.tm.terminal.view.feature:default"/> -<setEntry value="org.eclipse.zest:default"/> -<setEntry value="org.jboss.reddeer.eclipse.feature:default"/> -<setEntry value="org.jboss.reddeer.junit.extension.feature:default"/> -<setEntry value="org.jboss.reddeer.ui.feature:default"/> -</setAttribute> -<stringAttribute key="selected_target_plugins" value="com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-guava@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.github.jnr.constants@default:default,com.github.jnr.enxio@default:default,com.github.jnr.ffi@default:default,com.github.jnr.jffi.native@default:false,com.github.jnr.jffi@default:default,com.github.jnr.posix@default:default,com.github.jnr.unixsocket@default:default,com.google.gson@default:default,com.google.guava@default:default,com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.spotify.docker.client@default:true,com.sun.el@default:default,javaewah@default:default,javassist@default:default,javax.annotation@default:default,javax.el@default:default,javax.inject@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.ws.rs@default:default,javax.xml@default:default,jnr.x86asm@default:default,org.aopalliance@default:default,org.apache.ant@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.compress@default:default,org.apache.commons.io@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.lang3.source@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient*4.3.6.v201511171540@default:default,org.apache.httpcomponents.httpclient*4.5.2.v20161115-1643@default:default,org.apache.httpcomponents.httpcore*4.3.3.v201411290715@default:default,org.apache.httpcomponents.httpcore*4.4.4.v20161115-1643@default:default,org.apache.jasper.glassfish@default:default,org.apache.log4j@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.assertj@default:default,org.bouncycastle.bcpkix@default:default,org.bouncycastle.bcprov@default:default,org.cyberneko.html@default:default,org.eclipse.ant.core@default:default,org.eclipse.ant.launching@default:default,org.eclipse.ant.ui@default:default,org.eclipse.cdt.autotools.core@default:default,org.eclipse.cdt.autotools.docs@default:default,org.eclipse.cdt.autotools.ui@default:default,org.eclipse.cdt.build.gcc.core@default:default,org.eclipse.cdt.codan.checkers.ui@default:default,org.eclipse.cdt.codan.checkers@default:default,org.eclipse.cdt.codan.core.cxx@default:default,org.eclipse.cdt.codan.core@default:default,org.eclipse.cdt.codan.ui.cxx@default:default,org.eclipse.cdt.codan.ui@default:default,org.eclipse.cdt.core.linux.x86_64@default:false,org.eclipse.cdt.core.linux@default:false,org.eclipse.cdt.core.native@default:default,org.eclipse.cdt.core@default:default,org.eclipse.cdt.debug.core@default:default,org.eclipse.cdt.debug.ui@default:default,org.eclipse.cdt.doc.user@default:default,org.eclipse.cdt.dsf.gdb.ui@default:default,org.eclipse.cdt.dsf.gdb@default:default,org.eclipse.cdt.dsf.ui@default:default,org.eclipse.cdt.dsf@default:default,org.eclipse.cdt.gdb.ui@default:default,org.eclipse.cdt.gdb@default:default,org.eclipse.cdt.launch@default:default,org.eclipse.cdt.make.core@default:default,org.eclipse.cdt.make.ui@default:default,org.eclipse.cdt.managedbuilder.core@default:default,org.eclipse.cdt.managedbuilder.gnu.ui@default:default,org.eclipse.cdt.managedbuilder.ui@default:default,org.eclipse.cdt.native.serial@default:default,org.eclipse.cdt.remote.core@default:default,org.eclipse.cdt.ui@default:default,org.eclipse.cdt@default:default,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.externaltools@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.draw2d@default:default,org.eclipse.dstore.core@default:default,org.eclipse.dstore.extra@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.dialogs@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.swt.gtk@default:false,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient4@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.launcher.gtk.linux.x86_64@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.directorywatcher@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.extensionlocation@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.reconciler.dropins@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.p2.transport.ecf@default:default,org.eclipse.equinox.p2.ui.importexport@default:default,org.eclipse.equinox.p2.ui.sdk.scheduler@default:default,org.eclipse.equinox.p2.ui.sdk@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.gef@default:default,org.eclipse.help.base@default:default,org.eclipse.help.ui@default:default,org.eclipse.help.webapp@default:default,org.eclipse.help@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.junit.core@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jgit.archive@default:default,org.eclipse.jgit@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.launchbar.core@default:default,org.eclipse.launchbar.ui.controls@default:default,org.eclipse.launchbar.ui@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.pde.launching@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.pde.ui@default:default,org.eclipse.platform.doc.user@default:default,org.eclipse.platform@default:default,org.eclipse.ptp.rdt.sync.core@default:default,org.eclipse.ptp.rdt.sync.git.core@default:default,org.eclipse.ptp.rdt.sync.git.ui@default:default,org.eclipse.ptp.rdt.sync.ui@default:default,org.eclipse.rcp@default:default,org.eclipse.remote.console@default:default,org.eclipse.remote.core@default:default,org.eclipse.remote.doc.isv@default:default,org.eclipse.remote.jsch.core@default:default,org.eclipse.remote.jsch.ui@default:default,org.eclipse.remote.serial.core@default:default,org.eclipse.remote.serial.ui@default:default,org.eclipse.remote.telnet.core@default:default,org.eclipse.remote.telnet.ui@default:default,org.eclipse.remote.ui@default:default,org.eclipse.search@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.swtbot.e4.finder@default:default,org.eclipse.swtbot.eclipse.core@default:default,org.eclipse.swtbot.eclipse.finder@default:default,org.eclipse.swtbot.forms.finder@default:default,org.eclipse.swtbot.go@default:default,org.eclipse.swtbot.junit4_x@default:default,org.eclipse.swtbot.swt.finder@default:default,org.eclipse.team.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.tm.terminal.connector.local@default:default,org.eclipse.tm.terminal.connector.process@default:default,org.eclipse.tm.terminal.connector.serial@default:default,org.eclipse.tm.terminal.connector.ssh@default:default,org.eclipse.tm.terminal.connector.telnet@default:default,org.eclipse.tm.terminal.control@default:default,org.eclipse.tm.terminal.view.core@default:default,org.eclipse.tm.terminal.view.ui@default:default,org.eclipse.tools.templates.core@default:default,org.eclipse.tools.templates.ui@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.console@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro.quicklinks@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.monitoring@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.themes@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.eclipse.wb.core.lib@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.wst.internet.monitor.core@default:default,org.eclipse.wst.server.core@default:default,org.eclipse.wst.server.discovery@default:default,org.eclipse.wst.server.ui@default:default,org.eclipse.zest.core@default:default,org.eclipse.zest.layouts@default:default,org.glassfish.hk2.api@default:default,org.glassfish.hk2.locator@default:default,org.glassfish.hk2.osgi-resource-locator@default:default,org.glassfish.hk2.utils@default:default,org.glassfish.jersey.apache.connector@default:default,org.glassfish.jersey.bundles.repackaged.jersey-guava@default:default,org.glassfish.jersey.core.jersey-client@default:default,org.glassfish.jersey.core.jersey-common@default:default,org.glassfish.jersey.core.jersey-server@default:default,org.glassfish.jersey.ext.entityfiltering@default:default,org.glassfish.jersey.media.jersey-media-json-jackson@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.jboss.reddeer.common@default:default,org.jboss.reddeer.core@default:default,org.jboss.reddeer.direct@default:default,org.jboss.reddeer.eclipse@default:default,org.jboss.reddeer.gef@default:default,org.jboss.reddeer.go@default:default,org.jboss.reddeer.jface@default:default,org.jboss.reddeer.junit.extension@default:default,org.jboss.reddeer.junit@default:default,org.jboss.reddeer.requirements@default:default,org.jboss.reddeer.swt@default:default,org.jboss.reddeer.ui@default:default,org.jboss.reddeer.uiforms@default:default,org.jboss.reddeer.workbench@default:default,org.junit@default:default,org.mockito@default:default,org.objectweb.asm.analysis@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm.util@default:default,org.objectweb.asm@default:default,org.objenesis@default:default,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.slf4j.api*1.7.10.v20160921-1923@default:default,org.slf4j.api*1.7.2.v20121108-1250@default:default,org.slf4j.impl.log4j12@default:false,org.swtchart@default:default,org.tukaani.xz@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/> -<stringAttribute key="selected_workspace_plugins" value="org.eclipse.linuxtools.docker.core@default:default,org.eclipse.linuxtools.docker.docs@default:default,org.eclipse.linuxtools.docker.editor@default:default,org.eclipse.linuxtools.docker.integration.tests@default:default,org.eclipse.linuxtools.docker.reddeer@default:default,org.eclipse.linuxtools.docker.tests.hamcrest-wrap@default:default,org.eclipse.linuxtools.docker.ui.tests@default:default,org.eclipse.linuxtools.docker.ui@default:default"/> -<booleanAttribute key="show_selected_only" value="false"/> -<booleanAttribute key="tracing" value="false"/> -<booleanAttribute key="useCustomFeatures" value="true"/> -<booleanAttribute key="useDefaultConfig" value="true"/> -<booleanAttribute key="useDefaultConfigArea" value="false"/> -<booleanAttribute key="useProduct" value="false"/> + <setAttribute key="additional_plugins"> + <setEntry value="org.apache.httpcomponents.httpclient:4.5.10.v20200114-1512:default:true:default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore:4.4.12.v20200108-1212:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.core:5.0.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.integration.tests:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.reddeer:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap:1.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui.tests:2.2.0.qualifier:default:true:default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui:5.0.0.qualifier:default:true:default:default"/> + <setEntry value="org.slf4j.api:1.7.30.v20200204-2150:default:true:default:default"/> + </setAttribute> + <booleanAttribute key="append.args" value="true"/> + <stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/> + <booleanAttribute key="askclear" value="false"/> + <booleanAttribute key="automaticAdd" value="true"/> + <booleanAttribute key="automaticValidate" value="true"/> + <stringAttribute key="bootstrap" value=""/> + <stringAttribute key="checked" value="[NONE]"/> + <booleanAttribute key="clearConfig" value="true"/> + <booleanAttribute key="clearws" value="true"/> + <booleanAttribute key="clearwslog" value="false"/> + <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/> + <booleanAttribute key="default" value="false"/> + <stringAttribute key="featureDefaultLocation" value="workspace"/> + <stringAttribute key="featurePluginResolution" value="workspace"/> + <booleanAttribute key="includeOptional" value="true"/> + <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> + <listEntry value="/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/DockerAllBotTest.java"/> + </listAttribute> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> + <listEntry value="1"/> + </listAttribute> + <mapAttribute key="org.eclipse.debug.core.environmentVariables"> + <mapEntry key="DISPLAY" value=":1"/> + </mapAttribute> + <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> + <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> + <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> + <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> + <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> + <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.linuxtools.docker.integration.tests.DockerAllBotTest"/> + <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/> + <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.linuxtools.docker.integration.tests"/> + <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> + <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DdockerMockito=true -Dusage_reporting_enabled=false -DdockerHubUsername=test -DdockerHubEmail=test@test.com -DdockerHubPassword=password -DdockerComposePath=//testpath"/> + <stringAttribute key="pde.version" value="3.3"/> + <stringAttribute key="product" value="org.eclipse.platform.ide"/> + <stringAttribute key="rd.launch.property.rd.captureScreenshot" value="true"/> + <stringAttribute key="rd.launch.property.rd.closeShells" value="true"/> + <stringAttribute key="rd.launch.property.rd.closeWelcomeScreen" value="true"/> + <stringAttribute key="rd.launch.property.rd.defaultKey" value="org.eclipse.reddeer.widget.key"/> + <stringAttribute key="rd.launch.property.rd.disableMavenIndex" value="true"/> + <stringAttribute key="rd.launch.property.rd.logCollectorEnabled" value="true"/> + <stringAttribute key="rd.launch.property.rd.logLevel" value="ALL"/> + <stringAttribute key="rd.launch.property.rd.logMessageFilter" value="ALL"/> + <stringAttribute key="rd.launch.property.rd.maximizeWorkbench" value="true"/> + <stringAttribute key="rd.launch.property.rd.openAssociatedPerspective" value="never"/> + <stringAttribute key="rd.launch.property.rd.pauseFailedTest" value="false"/> + <stringAttribute key="rd.launch.property.rd.timePeriodFactor" value="1.0"/> + <setAttribute key="selected_features"> + <setEntry value="org.eclipse.cdt.autotools:default"/> + <setEntry value="org.eclipse.cdt.gdb:default"/> + <setEntry value="org.eclipse.cdt.gnu.build:default"/> + <setEntry value="org.eclipse.cdt.gnu.debug:default"/> + <setEntry value="org.eclipse.cdt.gnu.dsf:default"/> + <setEntry value="org.eclipse.cdt.native:default"/> + <setEntry value="org.eclipse.cdt.platform:default"/> + <setEntry value="org.eclipse.cdt:default"/> + <setEntry value="org.eclipse.draw2d:default"/> + <setEntry value="org.eclipse.e4.rcp:default"/> + <setEntry value="org.eclipse.ecf.core.feature:default"/> + <setEntry value="org.eclipse.ecf.core.ssl.feature:default"/> + <setEntry value="org.eclipse.ecf.filetransfer.feature:default"/> + <setEntry value="org.eclipse.ecf.filetransfer.ssl.feature:default"/> + <setEntry value="org.eclipse.emf.common:default"/> + <setEntry value="org.eclipse.emf.ecore:default"/> + <setEntry value="org.eclipse.equinox.p2.core.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.extras.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/> + <setEntry value="org.eclipse.equinox.p2.user.ui:default"/> + <setEntry value="org.eclipse.help:default"/> + <setEntry value="org.eclipse.jgit:default"/> + <setEntry value="org.eclipse.launchbar:default"/> + <setEntry value="org.eclipse.license:default"/> + <setEntry value="org.eclipse.linuxtools.docker.feature:default"/> + <setEntry value="org.eclipse.platform:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync:default"/> + <setEntry value="org.eclipse.rcp:default"/> + <setEntry value="org.eclipse.remote:default"/> + <setEntry value="org.eclipse.swtbot.eclipse:default"/> + <setEntry value="org.eclipse.swtbot.forms:default"/> + <setEntry value="org.eclipse.swtbot:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.local.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.ssh.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.telnet.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.control.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.feature:default"/> + <setEntry value="org.eclipse.tm.terminal.view.feature:default"/> + <setEntry value="org.eclipse.zest:default"/> + </setAttribute> + <setAttribute key="selected_target_bundles"> + <setEntry value="com.fasterxml.jackson.core.jackson-annotations@default:default"/> + <setEntry value="com.fasterxml.jackson.core.jackson-core@default:default"/> + <setEntry value="com.fasterxml.jackson.core.jackson-databind@default:default"/> + <setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-guava@default:default"/> + <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default"/> + <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default"/> + <setEntry value="com.github.jnr.constants@default:default"/> + <setEntry value="com.github.jnr.enxio@default:default"/> + <setEntry value="com.github.jnr.ffi@default:default"/> + <setEntry value="com.github.jnr.jffi.native@default:false"/> + <setEntry value="com.github.jnr.jffi@default:default"/> + <setEntry value="com.github.jnr.posix@default:default"/> + <setEntry value="com.github.jnr.unixsocket@default:default"/> + <setEntry value="com.google.gson@default:default"/> + <setEntry value="com.google.guava@default:default"/> + <setEntry value="com.ibm.icu@default:default"/> + <setEntry value="com.jcraft.jsch@default:default"/> + <setEntry value="com.sun.el@default:default"/> + <setEntry value="javaewah@default:default"/> + <setEntry value="javassist@default:default"/> + <setEntry value="javax.annotation@default:default"/> + <setEntry value="javax.el@default:default"/> + <setEntry value="javax.inject@default:default"/> + <setEntry value="javax.servlet.jsp@default:default"/> + <setEntry value="javax.servlet@default:default"/> + <setEntry value="javax.ws.rs@default:default"/> + <setEntry value="javax.xml@default:default"/> + <setEntry value="jnr.x86asm@default:default"/> + <setEntry value="org.aopalliance@default:default"/> + <setEntry value="org.apache.ant@default:default"/> + <setEntry value="org.apache.batik.css@default:default"/> + <setEntry value="org.apache.batik.util.gui@default:default"/> + <setEntry value="org.apache.batik.util@default:default"/> + <setEntry value="org.apache.commons.beanutils@default:default"/> + <setEntry value="org.apache.commons.codec@default:default"/> + <setEntry value="org.apache.commons.compress@default:default"/> + <setEntry value="org.apache.commons.io@default:default"/> + <setEntry value="org.apache.commons.jxpath@default:default"/> + <setEntry value="org.apache.commons.lang3.source@default:default"/> + <setEntry value="org.apache.commons.lang3@default:default"/> + <setEntry value="org.apache.commons.lang@default:default"/> + <setEntry value="org.apache.commons.logging@default:default"/> + <setEntry value="org.apache.felix.gogo.command@default:default"/> + <setEntry value="org.apache.felix.gogo.runtime@default:default"/> + <setEntry value="org.apache.felix.gogo.shell@default:default"/> + <setEntry value="org.apache.httpcomponents.httpclient*4.3.6.v201511171540@default:default"/> + <setEntry value="org.apache.httpcomponents.httpclient*4.5.2.v20161115-1643@default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore*4.3.3.v201411290715@default:default"/> + <setEntry value="org.apache.httpcomponents.httpcore*4.4.4.v20161115-1643@default:default"/> + <setEntry value="org.apache.jasper.glassfish@default:default"/> + <setEntry value="org.apache.log4j@default:default"/> + <setEntry value="org.apache.lucene.analysis@default:default"/> + <setEntry value="org.apache.lucene.core@default:default"/> + <setEntry value="org.apache.xerces@default:default"/> + <setEntry value="org.apache.xml.resolver@default:default"/> + <setEntry value="org.apache.xml.serializer@default:default"/> + <setEntry value="org.assertj@default:default"/> + <setEntry value="org.bouncycastle.bcpkix@default:default"/> + <setEntry value="org.bouncycastle.bcprov@default:default"/> + <setEntry value="org.cyberneko.html@default:default"/> + <setEntry value="org.eclipse.ant.core@default:default"/> + <setEntry value="org.eclipse.ant.launching@default:default"/> + <setEntry value="org.eclipse.ant.ui@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.core@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.docs@default:default"/> + <setEntry value="org.eclipse.cdt.autotools.ui@default:default"/> + <setEntry value="org.eclipse.cdt.build.gcc.core@default:default"/> + <setEntry value="org.eclipse.cdt.codan.checkers.ui@default:default"/> + <setEntry value="org.eclipse.cdt.codan.checkers@default:default"/> + <setEntry value="org.eclipse.cdt.codan.core.cxx@default:default"/> + <setEntry value="org.eclipse.cdt.codan.core@default:default"/> + <setEntry value="org.eclipse.cdt.codan.ui.cxx@default:default"/> + <setEntry value="org.eclipse.cdt.codan.ui@default:default"/> + <setEntry value="org.eclipse.cdt.core.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.cdt.core.linux@default:false"/> + <setEntry value="org.eclipse.cdt.core.native@default:default"/> + <setEntry value="org.eclipse.cdt.core@default:default"/> + <setEntry value="org.eclipse.cdt.debug.core@default:default"/> + <setEntry value="org.eclipse.cdt.debug.ui@default:default"/> + <setEntry value="org.eclipse.cdt.doc.user@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.gdb.ui@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.gdb@default:default"/> + <setEntry value="org.eclipse.cdt.dsf.ui@default:default"/> + <setEntry value="org.eclipse.cdt.dsf@default:default"/> + <setEntry value="org.eclipse.cdt.gdb.ui@default:default"/> + <setEntry value="org.eclipse.cdt.gdb@default:default"/> + <setEntry value="org.eclipse.cdt.launch@default:default"/> + <setEntry value="org.eclipse.cdt.make.core@default:default"/> + <setEntry value="org.eclipse.cdt.make.ui@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.core@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.gnu.ui@default:default"/> + <setEntry value="org.eclipse.cdt.managedbuilder.ui@default:default"/> + <setEntry value="org.eclipse.cdt.native.serial@default:default"/> + <setEntry value="org.eclipse.cdt.remote.core@default:default"/> + <setEntry value="org.eclipse.cdt.ui@default:default"/> + <setEntry value="org.eclipse.cdt@default:default"/> + <setEntry value="org.eclipse.compare.core@default:default"/> + <setEntry value="org.eclipse.compare@default:default"/> + <setEntry value="org.eclipse.core.commands@default:default"/> + <setEntry value="org.eclipse.core.contenttype@default:default"/> + <setEntry value="org.eclipse.core.databinding.beans@default:default"/> + <setEntry value="org.eclipse.core.databinding.observable@default:default"/> + <setEntry value="org.eclipse.core.databinding.property@default:default"/> + <setEntry value="org.eclipse.core.databinding@default:default"/> + <setEntry value="org.eclipse.core.expressions@default:default"/> + <setEntry value="org.eclipse.core.externaltools@default:default"/> + <setEntry value="org.eclipse.core.filebuffers@default:default"/> + <setEntry value="org.eclipse.core.filesystem.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.core.filesystem@default:default"/> + <setEntry value="org.eclipse.core.jobs@default:default"/> + <setEntry value="org.eclipse.core.net.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.core.net@default:default"/> + <setEntry value="org.eclipse.core.resources@default:default"/> + <setEntry value="org.eclipse.core.runtime@default:true"/> + <setEntry value="org.eclipse.core.variables@default:default"/> + <setEntry value="org.eclipse.debug.core@default:default"/> + <setEntry value="org.eclipse.debug.ui@default:default"/> + <setEntry value="org.eclipse.draw2d@default:default"/> + <setEntry value="org.eclipse.dstore.core@default:default"/> + <setEntry value="org.eclipse.dstore.extra@default:default"/> + <setEntry value="org.eclipse.e4.core.commands@default:default"/> + <setEntry value="org.eclipse.e4.core.contexts@default:default"/> + <setEntry value="org.eclipse.e4.core.di.annotations@default:default"/> + <setEntry value="org.eclipse.e4.core.di.extensions@default:default"/> + <setEntry value="org.eclipse.e4.core.di@default:default"/> + <setEntry value="org.eclipse.e4.core.services@default:default"/> + <setEntry value="org.eclipse.e4.emf.xpath@default:default"/> + <setEntry value="org.eclipse.e4.ui.bindings@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.core@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.swt.theme@default:default"/> + <setEntry value="org.eclipse.e4.ui.css.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.di@default:default"/> + <setEntry value="org.eclipse.e4.ui.dialogs@default:default"/> + <setEntry value="org.eclipse.e4.ui.model.workbench@default:default"/> + <setEntry value="org.eclipse.e4.ui.services@default:default"/> + <setEntry value="org.eclipse.e4.ui.swt.gtk@default:false"/> + <setEntry value="org.eclipse.e4.ui.widgets@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.addons.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.renderers.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench.swt@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench3@default:default"/> + <setEntry value="org.eclipse.e4.ui.workbench@default:default"/> + <setEntry value="org.eclipse.ecf.filetransfer@default:default"/> + <setEntry value="org.eclipse.ecf.identity@default:default"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.httpclient4@default:default"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer.ssl@default:false"/> + <setEntry value="org.eclipse.ecf.provider.filetransfer@default:default"/> + <setEntry value="org.eclipse.ecf.ssl@default:false"/> + <setEntry value="org.eclipse.ecf@default:default"/> + <setEntry value="org.eclipse.emf.common@default:default"/> + <setEntry value="org.eclipse.emf.ecore.change@default:default"/> + <setEntry value="org.eclipse.emf.ecore.xmi@default:default"/> + <setEntry value="org.eclipse.emf.ecore@default:default"/> + <setEntry value="org.eclipse.equinox.app@default:default"/> + <setEntry value="org.eclipse.equinox.bidi@default:default"/> + <setEntry value="org.eclipse.equinox.common@2:true"/> + <setEntry value="org.eclipse.equinox.concurrent@default:default"/> + <setEntry value="org.eclipse.equinox.console@default:default"/> + <setEntry value="org.eclipse.equinox.ds@1:true"/> + <setEntry value="org.eclipse.equinox.event@default:default"/> + <setEntry value="org.eclipse.equinox.frameworkadmin.equinox@default:default"/> + <setEntry value="org.eclipse.equinox.frameworkadmin@default:default"/> + <setEntry value="org.eclipse.equinox.http.jetty@default:default"/> + <setEntry value="org.eclipse.equinox.http.registry@default:default"/> + <setEntry value="org.eclipse.equinox.http.servlet@default:default"/> + <setEntry value="org.eclipse.equinox.jsp.jasper.registry@default:default"/> + <setEntry value="org.eclipse.equinox.jsp.jasper@default:default"/> + <setEntry value="org.eclipse.equinox.launcher.gtk.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.equinox.launcher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.artifact.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.console@default:default"/> + <setEntry value="org.eclipse.equinox.p2.core@default:default"/> + <setEntry value="org.eclipse.equinox.p2.director.app@default:default"/> + <setEntry value="org.eclipse.equinox.p2.director@default:default"/> + <setEntry value="org.eclipse.equinox.p2.directorywatcher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.engine@default:default"/> + <setEntry value="org.eclipse.equinox.p2.extensionlocation@default:default"/> + <setEntry value="org.eclipse.equinox.p2.garbagecollector@default:default"/> + <setEntry value="org.eclipse.equinox.p2.jarprocessor@default:default"/> + <setEntry value="org.eclipse.equinox.p2.metadata.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.metadata@default:default"/> + <setEntry value="org.eclipse.equinox.p2.operations@default:default"/> + <setEntry value="org.eclipse.equinox.p2.publisher.eclipse@default:default"/> + <setEntry value="org.eclipse.equinox.p2.publisher@default:default"/> + <setEntry value="org.eclipse.equinox.p2.reconciler.dropins@default:default"/> + <setEntry value="org.eclipse.equinox.p2.repository.tools@default:default"/> + <setEntry value="org.eclipse.equinox.p2.repository@default:default"/> + <setEntry value="org.eclipse.equinox.p2.touchpoint.eclipse@default:default"/> + <setEntry value="org.eclipse.equinox.p2.touchpoint.natives@default:default"/> + <setEntry value="org.eclipse.equinox.p2.transport.ecf@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.importexport@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.sdk.scheduler@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui.sdk@default:default"/> + <setEntry value="org.eclipse.equinox.p2.ui@default:default"/> + <setEntry value="org.eclipse.equinox.p2.updatechecker@default:default"/> + <setEntry value="org.eclipse.equinox.p2.updatesite@default:default"/> + <setEntry value="org.eclipse.equinox.preferences@default:default"/> + <setEntry value="org.eclipse.equinox.registry@default:default"/> + <setEntry value="org.eclipse.equinox.security.ui@default:default"/> + <setEntry value="org.eclipse.equinox.security@default:default"/> + <setEntry value="org.eclipse.equinox.simpleconfigurator.manipulator@default:default"/> + <setEntry value="org.eclipse.equinox.simpleconfigurator@1:true"/> + <setEntry value="org.eclipse.equinox.util@default:default"/> + <setEntry value="org.eclipse.gef@default:default"/> + <setEntry value="org.eclipse.help.base@default:default"/> + <setEntry value="org.eclipse.help.ui@default:default"/> + <setEntry value="org.eclipse.help.webapp@default:default"/> + <setEntry value="org.eclipse.help@default:default"/> + <setEntry value="org.eclipse.jdt.core.manipulation@default:default"/> + <setEntry value="org.eclipse.jdt.core@default:default"/> + <setEntry value="org.eclipse.jdt.debug.ui@default:default"/> + <setEntry value="org.eclipse.jdt.debug@default:default"/> + <setEntry value="org.eclipse.jdt.junit.core@default:default"/> + <setEntry value="org.eclipse.jdt.junit.runtime@default:default"/> + <setEntry value="org.eclipse.jdt.junit@default:default"/> + <setEntry value="org.eclipse.jdt.launching@default:default"/> + <setEntry value="org.eclipse.jdt.ui@default:default"/> + <setEntry value="org.eclipse.jetty.continuation@default:default"/> + <setEntry value="org.eclipse.jetty.http@default:default"/> + <setEntry value="org.eclipse.jetty.io@default:default"/> + <setEntry value="org.eclipse.jetty.security@default:default"/> + <setEntry value="org.eclipse.jetty.server@default:default"/> + <setEntry value="org.eclipse.jetty.servlet@default:default"/> + <setEntry value="org.eclipse.jetty.util@default:default"/> + <setEntry value="org.eclipse.jface.databinding@default:default"/> + <setEntry value="org.eclipse.jface.text@default:default"/> + <setEntry value="org.eclipse.jface@default:default"/> + <setEntry value="org.eclipse.jgit.archive@default:default"/> + <setEntry value="org.eclipse.jgit@default:default"/> + <setEntry value="org.eclipse.jsch.core@default:default"/> + <setEntry value="org.eclipse.jsch.ui@default:default"/> + <setEntry value="org.eclipse.launchbar.core@default:default"/> + <setEntry value="org.eclipse.launchbar.ui.controls@default:default"/> + <setEntry value="org.eclipse.launchbar.ui@default:default"/> + <setEntry value="org.eclipse.ltk.core.refactoring@default:default"/> + <setEntry value="org.eclipse.ltk.ui.refactoring@default:default"/> + <setEntry value="org.eclipse.osgi.compatibility.state@default:false"/> + <setEntry value="org.eclipse.osgi.services@default:default"/> + <setEntry value="org.eclipse.osgi.util@default:default"/> + <setEntry value="org.eclipse.osgi@-1:true"/> + <setEntry value="org.eclipse.pde.build@default:default"/> + <setEntry value="org.eclipse.pde.core@default:default"/> + <setEntry value="org.eclipse.pde.launching@default:default"/> + <setEntry value="org.eclipse.pde.runtime@default:default"/> + <setEntry value="org.eclipse.pde.ui@default:default"/> + <setEntry value="org.eclipse.platform.doc.user@default:default"/> + <setEntry value="org.eclipse.platform@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.core@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.git.core@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.git.ui@default:default"/> + <setEntry value="org.eclipse.ptp.rdt.sync.ui@default:default"/> + <setEntry value="org.eclipse.rcp@default:default"/> + <setEntry value="org.eclipse.remote.console@default:default"/> + <setEntry value="org.eclipse.remote.core@default:default"/> + <setEntry value="org.eclipse.remote.doc.isv@default:default"/> + <setEntry value="org.eclipse.remote.jsch.core@default:default"/> + <setEntry value="org.eclipse.remote.jsch.ui@default:default"/> + <setEntry value="org.eclipse.remote.serial.core@default:default"/> + <setEntry value="org.eclipse.remote.serial.ui@default:default"/> + <setEntry value="org.eclipse.remote.telnet.core@default:default"/> + <setEntry value="org.eclipse.remote.telnet.ui@default:default"/> + <setEntry value="org.eclipse.remote.ui@default:default"/> + <setEntry value="org.eclipse.search@default:default"/> + <setEntry value="org.eclipse.swt.gtk.linux.x86_64@default:false"/> + <setEntry value="org.eclipse.swt@default:default"/> + <setEntry value="org.eclipse.swtbot.e4.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.eclipse.core@default:default"/> + <setEntry value="org.eclipse.swtbot.eclipse.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.forms.finder@default:default"/> + <setEntry value="org.eclipse.swtbot.go@default:default"/> + <setEntry value="org.eclipse.swtbot.junit4_x@default:default"/> + <setEntry value="org.eclipse.swtbot.swt.finder@default:default"/> + <setEntry value="org.eclipse.team.core@default:default"/> + <setEntry value="org.eclipse.team.ui@default:default"/> + <setEntry value="org.eclipse.text@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.local@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.process@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.serial@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.ssh@default:default"/> + <setEntry value="org.eclipse.tm.terminal.connector.telnet@default:default"/> + <setEntry value="org.eclipse.tm.terminal.control@default:default"/> + <setEntry value="org.eclipse.tm.terminal.view.core@default:default"/> + <setEntry value="org.eclipse.tm.terminal.view.ui@default:default"/> + <setEntry value="org.eclipse.tools.templates.core@default:default"/> + <setEntry value="org.eclipse.tools.templates.ui@default:default"/> + <setEntry value="org.eclipse.ui.browser@default:default"/> + <setEntry value="org.eclipse.ui.cheatsheets@default:default"/> + <setEntry value="org.eclipse.ui.console@default:default"/> + <setEntry value="org.eclipse.ui.editors@default:default"/> + <setEntry value="org.eclipse.ui.externaltools@default:default"/> + <setEntry value="org.eclipse.ui.forms@default:default"/> + <setEntry value="org.eclipse.ui.ide.application@default:default"/> + <setEntry value="org.eclipse.ui.ide@default:default"/> + <setEntry value="org.eclipse.ui.intro.quicklinks@default:default"/> + <setEntry value="org.eclipse.ui.intro.universal@default:default"/> + <setEntry value="org.eclipse.ui.intro@default:default"/> + <setEntry value="org.eclipse.ui.monitoring@default:default"/> + <setEntry value="org.eclipse.ui.navigator.resources@default:default"/> + <setEntry value="org.eclipse.ui.navigator@default:default"/> + <setEntry value="org.eclipse.ui.net@default:default"/> + <setEntry value="org.eclipse.ui.themes@default:default"/> + <setEntry value="org.eclipse.ui.trace@default:default"/> + <setEntry value="org.eclipse.ui.views.log@default:default"/> + <setEntry value="org.eclipse.ui.views.properties.tabbed@default:default"/> + <setEntry value="org.eclipse.ui.views@default:default"/> + <setEntry value="org.eclipse.ui.workbench.texteditor@default:default"/> + <setEntry value="org.eclipse.ui.workbench@default:default"/> + <setEntry value="org.eclipse.ui@default:default"/> + <setEntry value="org.eclipse.update.configurator@3:true"/> + <setEntry value="org.eclipse.wb.core.lib@default:default"/> + <setEntry value="org.eclipse.wst.common.core@default:default"/> + <setEntry value="org.eclipse.wst.internet.monitor.core@default:default"/> + <setEntry value="org.eclipse.wst.server.core@default:default"/> + <setEntry value="org.eclipse.wst.server.discovery@default:default"/> + <setEntry value="org.eclipse.wst.server.ui@default:default"/> + <setEntry value="org.eclipse.zest.core@default:default"/> + <setEntry value="org.eclipse.zest.layouts@default:default"/> + <setEntry value="org.glassfish.hk2.api@default:default"/> + <setEntry value="org.glassfish.hk2.locator@default:default"/> + <setEntry value="org.glassfish.hk2.osgi-resource-locator@default:default"/> + <setEntry value="org.glassfish.hk2.utils@default:default"/> + <setEntry value="org.glassfish.jersey.apache.connector@default:default"/> + <setEntry value="org.glassfish.jersey.bundles.repackaged.jersey-guava@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-client@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-common@default:default"/> + <setEntry value="org.glassfish.jersey.core.jersey-server@default:default"/> + <setEntry value="org.glassfish.jersey.ext.entityfiltering@default:default"/> + <setEntry value="org.glassfish.jersey.media.jersey-media-json-jackson@default:default"/> + <setEntry value="org.hamcrest.core@default:default"/> + <setEntry value="org.hamcrest.library@default:default"/> + <setEntry value="org.jboss.reddeer.common@default:default"/> + <setEntry value="org.jboss.reddeer.core@default:default"/> + <setEntry value="org.jboss.reddeer.direct@default:default"/> + <setEntry value="org.jboss.reddeer.eclipse@default:default"/> + <setEntry value="org.jboss.reddeer.gef@default:default"/> + <setEntry value="org.jboss.reddeer.go@default:default"/> + <setEntry value="org.jboss.reddeer.jface@default:default"/> + <setEntry value="org.jboss.reddeer.junit.extension@default:default"/> + <setEntry value="org.jboss.reddeer.junit@default:default"/> + <setEntry value="org.jboss.reddeer.requirements@default:default"/> + <setEntry value="org.jboss.reddeer.swt@default:default"/> + <setEntry value="org.jboss.reddeer.ui@default:default"/> + <setEntry value="org.jboss.reddeer.uiforms@default:default"/> + <setEntry value="org.jboss.reddeer.workbench@default:default"/> + <setEntry value="org.junit@default:default"/> + <setEntry value="org.mandas.docker.client@default:true"/> + <setEntry value="org.mockito@default:default"/> + <setEntry value="org.objectweb.asm.analysis@default:default"/> + <setEntry value="org.objectweb.asm.tree@default:default"/> + <setEntry value="org.objectweb.asm.util@default:default"/> + <setEntry value="org.objectweb.asm@default:default"/> + <setEntry value="org.objenesis@default:default"/> + <setEntry value="org.sat4j.core@default:default"/> + <setEntry value="org.sat4j.pb@default:default"/> + <setEntry value="org.slf4j.api*1.7.10.v20160921-1923@default:default"/> + <setEntry value="org.slf4j.api*1.7.2.v20121108-1250@default:default"/> + <setEntry value="org.slf4j.impl.log4j12@default:false"/> + <setEntry value="org.swtchart@default:default"/> + <setEntry value="org.tukaani.xz@default:default"/> + <setEntry value="org.w3c.css.sac@default:default"/> + <setEntry value="org.w3c.dom.events@default:default"/> + <setEntry value="org.w3c.dom.smil@default:default"/> + <setEntry value="org.w3c.dom.svg@default:default"/> + </setAttribute> + <setAttribute key="selected_workspace_bundles"> + <setEntry value="org.eclipse.linuxtools.docker.core@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.docs@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.editor@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.integration.tests@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.reddeer@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.tests.hamcrest-wrap@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui.tests@default:default"/> + <setEntry value="org.eclipse.linuxtools.docker.ui@default:default"/> + </setAttribute> + <booleanAttribute key="show_selected_only" value="false"/> + <booleanAttribute key="tracing" value="false"/> + <booleanAttribute key="useCustomFeatures" value="true"/> + <booleanAttribute key="useDefaultConfig" value="true"/> + <booleanAttribute key="useDefaultConfigArea" value="false"/> + <booleanAttribute key="useProduct" value="false"/> </launchConfiguration> diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/pom.xml b/containers/org.eclipse.linuxtools.docker.integration.tests/pom.xml index 92de28d21..25997266f 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.integration.tests</artifactId> <version>2.2.0-SNAPSHOT</version> diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/BasicSecurityTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/BasicSecurityTest.java index 2d251ba4d..e8a323213 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/BasicSecurityTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/BasicSecurityTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -33,8 +33,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; /** * diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/ContainerLogTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/ContainerLogTest.java index fc86b43d3..aff348584 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/ContainerLogTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/ContainerLogTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017,2018 Red Hat, Inc. + * Copyright (c) 2017,2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -39,7 +39,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; public class ContainerLogTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LabelsTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LabelsTest.java index 73bb69018..f80cb3341 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LabelsTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LabelsTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -36,8 +36,8 @@ import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableMap; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; public class LabelsTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LinkContainersTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LinkContainersTest.java index b6781be95..fe397599e 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LinkContainersTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/LinkContainersTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -36,7 +36,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; public class LinkContainersTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/NetworkModeTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/NetworkModeTest.java index ae5bad863..fd40bf005 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/NetworkModeTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/NetworkModeTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -35,8 +35,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; public class NetworkModeTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/PrivilegedModeTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/PrivilegedModeTest.java index ed92dbfad..738406f4b 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/PrivilegedModeTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/PrivilegedModeTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -33,8 +33,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; public class PrivilegedModeTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/UnconfinedTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/UnconfinedTest.java index e1dc9012f..f16da3349 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/UnconfinedTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/UnconfinedTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -33,8 +33,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; public class UnconfinedTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VariablesTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VariablesTest.java index 4f0adba7c..96c1898d3 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VariablesTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VariablesTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -34,12 +34,12 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.ContainerInfo; -import com.spotify.docker.client.messages.Image; -import com.spotify.docker.client.messages.ImageInfo; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.Image; +import org.mandas.docker.client.messages.ImageInfo; public class VariablesTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VolumeMountTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VolumeMountTest.java index ec42a8cfa..1c59ae0b7 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VolumeMountTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/container/VolumeMountTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -39,8 +39,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; public class VolumeMountTest extends AbstractImageBotTest { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/image/HierarchyViewTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/image/HierarchyViewTest.java index 9fac9cd11..a1eef7eda 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/image/HierarchyViewTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/image/HierarchyViewTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -31,8 +31,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.Image; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.Image; public class HierarchyViewTest extends AbstractImageBotTest { private static final int DAEMON_MAJOR_VERSION = 11; diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockDockerConnection.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockDockerConnection.java index c6c62967b..60990468b 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockDockerConnection.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockDockerConnection.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat, Inc. + * Copyright (c) 2017, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -22,8 +22,8 @@ import org.eclipse.linuxtools.internal.docker.core.UnixSocketConnectionSettings; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerCertificateException; public class MockDockerConnection { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockUtils.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockUtils.java index e9238d034..02976f629 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockUtils.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/mock/MockUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017,2018 Red Hat, Inc. + * Copyright (c) 2017,2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -28,8 +28,8 @@ import org.eclipse.linuxtools.internal.docker.ui.testutils.MockImageFactory; import org.eclipse.reddeer.eclipse.ui.browser.WebBrowserView; import org.eclipse.reddeer.eclipse.ui.console.ConsoleView; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.ContainerInfo; public class MockUtils { diff --git a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/ui/SearchDialogTest.java b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/ui/SearchDialogTest.java index 5e6b4a8bd..d51550fb8 100644 --- a/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/ui/SearchDialogTest.java +++ b/containers/org.eclipse.linuxtools.docker.integration.tests/src/org/eclipse/linuxtools/docker/integration/tests/ui/SearchDialogTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017,2018 Red Hat, Inc. + * Copyright (c) 2017,2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -19,7 +19,6 @@ import static org.junit.Assert.fail; import java.util.List; -import org.eclipse.linuxtools.docker.core.IDockerImage; import org.eclipse.linuxtools.docker.integration.tests.image.AbstractImageBotTest; import org.eclipse.linuxtools.docker.integration.tests.mock.MockDockerConnectionManager; import org.eclipse.linuxtools.docker.reddeer.core.ui.wizards.ImageSearchPage; @@ -40,7 +39,7 @@ import org.eclipse.reddeer.workbench.core.condition.JobIsRunning; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; public class SearchDialogTest extends AbstractImageBotTest { @@ -97,7 +96,7 @@ public class SearchDialogTest extends AbstractImageBotTest { .build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from(DEFAULT_CONNECTION_NAME, client) .withDefaultTCPConnectionSettings(); - final IDockerImage image = MockDockerImageFactory.name(IMAGE_NAME + ":" + IMAGE_TAG).connection(dockerConnection).build(); + MockDockerImageFactory.name(IMAGE_NAME + ":" + IMAGE_TAG).connection(dockerConnection).build(); MockDockerConnectionManager.configureConnectionManager(dockerConnection); } diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/.classpath b/containers/org.eclipse.linuxtools.docker.reddeer/.classpath index f19381878..d9ea9da45 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/.classpath +++ b/containers/org.eclipse.linuxtools.docker.reddeer/.classpath @@ -1,11 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"> <attributes> <attribute name="test" value="true"/> </attributes> </classpathentry> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> + <attributes> + <attribute name="module" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.reddeer/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..a58ebdcad 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.reddeer/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,15 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.reddeer/META-INF/MANIFEST.MF index 8bb954cfe..523c7ad1d 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.reddeer/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 2.2.0.qualifier Bundle-Activator: org.eclipse.linuxtools.docker.reddeer.Activator Bundle-ActivationPolicy: lazy Bundle-Vendor: Red Hat -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.eclipse.swt, org.eclipse.ui, @@ -33,5 +33,6 @@ Export-Package: org.eclipse.linuxtools.docker.reddeer.condition, org.eclipse.linuxtools.docker.reddeer.utils, org.eclipse.linuxtools.docker.reddeer.requirements, org.eclipse.linuxtools.docker.reddeer -Import-Package: org.eclipse.linuxtools.internal.docker.ui.testutils +Import-Package: org.eclipse.linuxtools.internal.docker.ui.testutils, + javax.annotation;version="1.3.5" Automatic-Module-Name: org.eclipse.linuxtools.docker.reddeer diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/pom.xml b/containers/org.eclipse.linuxtools.docker.reddeer/pom.xml index 895f7d839..13e77f998 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.reddeer/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.reddeer</artifactId> <version>2.2.0-SNAPSHOT</version> diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/ui/resources/DockerConnection.java b/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/ui/resources/DockerConnection.java index de11a118e..409149d94 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/ui/resources/DockerConnection.java +++ b/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/ui/resources/DockerConnection.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017,2018 Red Hat, Inc. + * Copyright (c) 2017,2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -32,7 +32,6 @@ import org.eclipse.reddeer.swt.impl.combo.DefaultCombo; import org.eclipse.reddeer.swt.impl.menu.ContextMenu; import org.eclipse.reddeer.swt.impl.shell.DefaultShell; import org.eclipse.reddeer.swt.impl.text.LabeledText; -import org.eclipse.reddeer.swt.impl.toolbar.DefaultToolItem; import org.eclipse.reddeer.workbench.core.condition.JobIsRunning; public class DockerConnection extends AbstractDockerExplorerItem { @@ -46,7 +45,8 @@ public class DockerConnection extends AbstractDockerExplorerItem { public void enableConnection() { select(); - new DefaultToolItem("Enable Connection").click(); +// new DefaultToolItem("Enable Connection").click(); + new ContextMenu().getItem("Refresh").select(); new WaitWhile(new JobIsRunning()); } @@ -203,7 +203,9 @@ public class DockerConnection extends AbstractDockerExplorerItem { public void removeConnection() { select(); - new DefaultToolItem("Remove Connection").click(); + // Use context menu instead of Tab toolbar button as this is not working with 4.17 I-build +// new DefaultToolItem("Remove Connection").click(); + new ContextMenu().getItem("Remove").select(); new WaitWhile(new JobIsRunning()); } diff --git a/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/utils/BrowserContentsCheck.java b/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/utils/BrowserContentsCheck.java index fc12cc65f..baea5b4c3 100644 --- a/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/utils/BrowserContentsCheck.java +++ b/containers/org.eclipse.linuxtools.docker.reddeer/src/org/eclipse/linuxtools/docker/reddeer/utils/BrowserContentsCheck.java @@ -120,10 +120,12 @@ public class BrowserContentsCheck { this.browser = browser; } + @Override public boolean test() { return !browser.getText().equals(""); } + @Override public String description() { return "Browser is empty!"; } diff --git a/containers/org.eclipse.linuxtools.docker.tests-feature/feature.xml b/containers/org.eclipse.linuxtools.docker.tests-feature/feature.xml index c191abc5b..9a7fda129 100644 --- a/containers/org.eclipse.linuxtools.docker.tests-feature/feature.xml +++ b/containers/org.eclipse.linuxtools.docker.tests-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.docker.tests.feature" label="%featureName" - version="4.4.0.qualifier" + version="5.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/containers/org.eclipse.linuxtools.docker.tests-feature/pom.xml b/containers/org.eclipse.linuxtools.docker.tests-feature/pom.xml index ca6c19c3f..bb1f9df10 100644 --- a/containers/org.eclipse.linuxtools.docker.tests-feature/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.tests-feature/pom.xml @@ -14,11 +14,11 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.tests.feature</artifactId> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> <name>Linux Tools Docker Tooling Test Feature</name> diff --git a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.classpath b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.classpath index cc5ee2dc8..336abe9f4 100644 --- a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.classpath +++ b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"> <attributes> diff --git a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/META-INF/MANIFEST.MF index 1e6080017..1703dfbfa 100644 --- a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Wrapper for hamcrest Bundle-SymbolicName: org.eclipse.linuxtools.docker.tests.hamcrest-wrap Bundle-Version: 1.2.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.hamcrest.core;bundle-version="1.3.0", org.hamcrest.library;bundle-version="1.3.0" Export-Package: org.hamcrest;version="1.3.0" diff --git a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/pom.xml b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/pom.xml index 0cd53dfd4..b50f4de8d 100644 --- a/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.tests.hamcrest-wrap/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.tests.hamcrest-wrap</artifactId> <version>1.2.0-SNAPSHOT</version> diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/.classpath b/containers/org.eclipse.linuxtools.docker.ui.tests/.classpath index cc5ee2dc8..336abe9f4 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/.classpath +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"> <attributes> diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.core.prefs index 56af8e104..75e08ee96 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -71,6 +72,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -103,4 +105,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.ui.prefs b/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.ui.prefs index 8287721b8..c1375a588 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.ui.prefs +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/.settings/org.eclipse.jdt.ui.prefs @@ -13,31 +13,40 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_functional_interfaces=true sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true sp_cleanup.format_source_code_changes_only=true sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false sp_cleanup.make_private_fields_final=true sp_cleanup.make_type_abstract_if_missing_method=false sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.objects_equals=false sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true sp_cleanup.remove_redundant_type_arguments=true sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -46,11 +55,14 @@ sp_cleanup.remove_unused_private_fields=true sp_cleanup.remove_unused_private_members=false sp_cleanup.remove_unused_private_methods=true sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=true sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false @@ -58,3 +70,5 @@ sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.ui.tests/META-INF/MANIFEST.MF index 38716fdab..797d739b2 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.linuxtools.docker.ui;bundle-version="1.0.0", org.hamcrest.library;bundle-version="1.3.0", org.hamcrest.core;bundle-version="1.3.0", org.eclipse.core.databinding;bundle-version="1.5.0", - com.spotify.docker.client;bundle-version="[8.9.2,9.0.0)", + org.mandas.docker-client;bundle-version="3.2.1", org.eclipse.swtbot.junit4_x;bundle-version="2.3.0", org.eclipse.swtbot.swt.finder;bundle-version="2.3.0", org.eclipse.swtbot.eclipse.finder;bundle-version="2.3.0", @@ -23,17 +23,20 @@ Require-Bundle: org.eclipse.linuxtools.docker.ui;bundle-version="1.0.0", org.eclipse.linuxtools.docker.tests.hamcrest-wrap;bundle-version="1.2.0", com.google.guava;bundle-version="15.0.0", org.glassfish.hk2.api;bundle-version="2.3.0", + org.glassfish.jersey.core.jersey-common;bundle-version="2.3.0", + org.glassfish.jersey.containers.servlet.core;bundle-version="2.3.0", + org.glassfish.jersey.inject.jersey-hk2;bundle-version="2.3.0", com.fasterxml.jackson.core.jackson-core;bundle-version="2.5.0", com.fasterxml.jackson.core.jackson-databind;bundle-version="2.5.0", org.slf4j.api;bundle-version="1.7.2", - org.glassfish.jersey.bundles.repackaged.jersey-guava;bundle-version="2.14.0", org.eclipse.ui.ide, org.eclipse.debug.ui, org.eclipse.ui.console;bundle-version="3.6.100", org.eclipse.launchbar.ui;bundle-version="2.0.1", - org.eclipse.launchbar.ui.controls;bundle-version="1.0.0", - javax.xml.bind;bundle-version="2.2.0" + org.eclipse.launchbar.ui.controls;bundle-version="1.0.0" +Import-Package: javax.xml.bind;version="2.3.3", + javax.annotation;version="1.3.5" Bundle-ClassPath: . -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Export-Package: org.eclipse.linuxtools.internal.docker.ui.testutils;x-friends:="org.eclipse.linuxtools.docker.reddeer,org.eclipse.linuxtools.docker.reddeer.ui,org.eclipse.linuxtools.docker.integration.tests" Automatic-Module-Name: org.eclipse.linuxtools.docker.ui.tests diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/pom.xml b/containers/org.eclipse.linuxtools.docker.ui.tests/pom.xml index 3bd6c70f0..a0e4a7b4d 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.ui.tests</artifactId> <version>2.2.0-SNAPSHOT</version> diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerConnectionManagerTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerConnectionManagerTest.java index 4387e2d92..9c313a76f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerConnectionManagerTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerConnectionManagerTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -38,7 +38,7 @@ import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; public class DockerConnectionManagerTest { diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerExceptionTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerExceptionTest.java index 4593bcbea..9672d4fb4 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerExceptionTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/docker/core/DockerExceptionTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016,2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -15,11 +15,15 @@ package org.eclipse.linuxtools.docker.core; import static org.assertj.core.api.Assertions.assertThat; +import java.net.URI; +import java.net.URISyntaxException; + import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; +import org.mandas.docker.client.exceptions.DockerRequestException; /** * Testing the {@link DockerException} class @@ -28,14 +32,68 @@ import org.junit.runners.Parameterized.Parameters; public class DockerExceptionTest { @Parameters - public static Object[][] getData() { + public static Object[][] getData() throws URISyntaxException { final Object[][] data = new Object[][] { + // 0: Normal exceptions new Object[] { new DockerException("this is an error"), "this is an error" }, + // 1: new Object[] { new DockerException("error with message: 232"), "error with message: 232" }, + // 2: Use passed message or message from original exception - Behave like + // Throwable + new Object[] { new DockerException(null, new RuntimeException("This is a test")), + "java.lang.RuntimeException: This is a test" }, + // 3: + new Object[] { new DockerException("First", new RuntimeException("This is a test")), "First" }, + // 4: Do not parse passed message new Object[] { new DockerException( "{\"message\":\"invalid reference format: repository name must be lowercase\"}"), - "invalid reference format: repository name must be lowercase" }, }; + "{\"message\":\"invalid reference format: repository name must be lowercase\"}" }, + // 5: Decode DockerRequestException + new Object[] { new DockerException(null, new DockerRequestException("m", new URI("http://none"), 404, + "{\"message\":\"invalid reference format: repository name must be lowercase\"}", null)), + "invalid reference format: repository name must be lowercase" + }, + // 6: DockerRequestException and prefix message + new Object[] { new DockerException("Additional info", new DockerRequestException("m", new URI("http://none"), 404, + "{\"message\":\"invalid reference format: repository name must be lowercase\"}", null)), + "Additional info; invalid reference format: repository name must be lowercase" + }, + // 7: DockerRequestException Without Json-message - use toString + new Object[] { + new DockerException( + new DockerRequestException("Hello", new URI("http://none"), 404, "Response", null)), + "org.mandas.docker.client.exceptions.DockerRequestException: Request error: Hello http://none: 404, body: Response" }, + // 8: + new Object[] { + new DockerException("Additional info", + new DockerRequestException("Hello", new URI("http://none"), 404, "Response", null)), + "Additional info" }, + // 9: Search DockerRequestException + new Object[] { new DockerException(null, + new RuntimeException(new DockerRequestException("m", new URI("http://none"), 404, + "{\"message\":\"invalid reference format: repository name must be lowercase\"}", + null))), + "invalid reference format: repository name must be lowercase" }, + // 10: Wrapped in exception with message + new Object[] { new DockerException(null, new RuntimeException("Hello", new DockerRequestException("m", + new URI("http://none"), 404, + "{\"message\":\"invalid reference format: repository name must be lowercase\"}", + null))), + "invalid reference format: repository name must be lowercase" }, + // 11: Wrapped twice + new Object[] { + new DockerException(null, + new RuntimeException(new RuntimeException(new DockerRequestException("m", + new URI("http://none"), 404, + "{\"message\":\"invalid reference format: repository name must be lowercase\"}", + null)))), + "invalid reference format: repository name must be lowercase" }, + // 12: Wrapped without message + new Object[] { new DockerException(null, new RuntimeException("Hello", + new DockerRequestException("m", new URI("http://none"), 404, "Do not show this", null))), + "java.lang.RuntimeException: Hello" }, + }; return data; } diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactoryTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactoryTest.java index 82fa69103..72c325c95 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactoryTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerClientFactoryTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -17,8 +17,8 @@ import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * Testing the {@link DockerClientFactory} diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionTest.java index 8f3ad3f30..8462de293 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerConnectionTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -29,10 +29,10 @@ import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerConnectionF import org.eclipse.linuxtools.internal.docker.ui.testutils.MockImageFactory; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.Image; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.Image; /** * Testing the {@link DockerConnection} class. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerImageQualifierTestCase.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerImageQualifierTestCase.java index 2d84f67f9..a2f8b6baf 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerImageQualifierTestCase.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/core/DockerImageQualifierTestCase.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -33,8 +33,8 @@ import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.Image; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.Image; /** * Verifying that images are properly qualified as {@code Top-Level}, diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandUtilsSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandUtilsSWTBotTest.java index db767ca7a..889687c55 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandUtilsSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandUtilsSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -35,7 +35,7 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/BuildDockerImageShortcutSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/BuildDockerImageShortcutSWTBotTest.java index 147fbe288..12389e447 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/BuildDockerImageShortcutSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/BuildDockerImageShortcutSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -46,8 +46,8 @@ import org.junit.Test; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.ProgressHandler; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.ProgressHandler; /** * Testing the {@link BuildDockerImageShortcut} @@ -110,7 +110,7 @@ public class BuildDockerImageShortcutSWTBotTest { @Test @RunWithProject("foo") public void shouldPromptDialogThenBuildDockerImageOnFirstCall() - throws InterruptedException, com.spotify.docker.client.exceptions.DockerException, IOException { + throws InterruptedException, org.mandas.docker.client.exceptions.DockerException, IOException { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client).withDefaultTCPConnectionSettings(); @@ -134,7 +134,7 @@ public class BuildDockerImageShortcutSWTBotTest { @Test @RunWithProject("foo") public void shouldBuildDockerImageImmediatelyOnSecondCall() - throws InterruptedException, com.spotify.docker.client.exceptions.DockerException, IOException { + throws InterruptedException, org.mandas.docker.client.exceptions.DockerException, IOException { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client).withDefaultTCPConnectionSettings(); @@ -164,7 +164,7 @@ public class BuildDockerImageShortcutSWTBotTest { @Test @RunWithProject("foo") public void shouldNotBuildDockerImageOnSecondCallWhenAllConnectionWereRemoved() - throws InterruptedException, com.spotify.docker.client.exceptions.DockerException, IOException { + throws InterruptedException, org.mandas.docker.client.exceptions.DockerException, IOException { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client).withDefaultTCPConnectionSettings(); @@ -202,7 +202,7 @@ public class BuildDockerImageShortcutSWTBotTest { @RunWithProject("foo") public void shouldPromptForAnotherConnectionWhenBuildingDockerImageOnSecondCallAfterConnectionWasReplaced() - throws InterruptedException, com.spotify.docker.client.exceptions.DockerException, IOException { + throws InterruptedException, org.mandas.docker.client.exceptions.DockerException, IOException { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client).withDefaultTCPConnectionSettings(); @@ -243,7 +243,7 @@ public class BuildDockerImageShortcutSWTBotTest { @Test @RunWithProject("foo") public void shouldNotBuildDockerImageOnSecondCallWhenDockerfileWasRemoved() - throws InterruptedException, com.spotify.docker.client.exceptions.DockerException, IOException, CoreException { + throws InterruptedException, org.mandas.docker.client.exceptions.DockerException, IOException, CoreException { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client) diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/DockerComposeSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/DockerComposeSWTBotTest.java index f3b49c1f6..862ca922b 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/DockerComposeSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/launch/DockerComposeSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -57,12 +57,9 @@ import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import org.mandas.docker.client.DockerClient; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -import com.spotify.docker.client.DockerClient; /** * Testing the {@link DockerCompose} utility class using SWTBot. @@ -124,13 +121,9 @@ public class DockerComposeSWTBotTest { .workingDir(ArgumentMatchers.anyString()).start()) .thenReturn(mockDockerComposeUpProcess); latch = new CountDownLatch(1); - Mockito.when(mockDockerComposeUpProcess.waitFor()).then(new Answer<Object>() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - latch.await(5, TimeUnit.SECONDS); - return 0; - } + Mockito.when(mockDockerComposeUpProcess.waitFor()).then(invocation -> { + latch.await(5, TimeUnit.SECONDS); + return 0; }); } diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerConfigFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerConfigFactory.java index ae925f0b0..3f3ffd0f3 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerConfigFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerConfigFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat. + * Copyright (c) 2017, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -15,7 +15,7 @@ package org.eclipse.linuxtools.internal.docker.ui.testutils; import org.mockito.Mockito; import com.google.common.collect.ImmutableMap; -import com.spotify.docker.client.messages.ContainerConfig; +import org.mandas.docker.client.messages.ContainerConfig; public class MockContainerConfigFactory { diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerFactory.java index 2c2645b27..e24772c91 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -25,7 +25,7 @@ import org.eclipse.linuxtools.docker.core.Messages; import org.mockito.Mockito; import com.google.common.collect.ImmutableList; -import com.spotify.docker.client.messages.Container; +import org.mandas.docker.client.messages.Container; /** * A factory for mock {@link Container}s. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerInfoFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerInfoFactory.java index f2137071e..dac238f0b 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerInfoFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockContainerInfoFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -18,15 +18,15 @@ import java.util.Date; import java.util.HashMap; import java.util.List; +import org.mandas.docker.client.messages.ContainerConfig; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.HostConfig; +import org.mandas.docker.client.messages.NetworkSettings; +import org.mandas.docker.client.messages.PortBinding; import org.mockito.Mockito; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.spotify.docker.client.messages.ContainerConfig; -import com.spotify.docker.client.messages.ContainerInfo; -import com.spotify.docker.client.messages.HostConfig; -import com.spotify.docker.client.messages.NetworkSettings; -import com.spotify.docker.client.messages.PortBinding; /** * A factory for mock {@link ContainerInfo}s. @@ -115,8 +115,7 @@ public class MockContainerInfoFactory { Mockito.when(this.containerInfo.processLabel()).thenReturn(null); Mockito.when(this.containerInfo.hostsPath()).thenReturn(null); Mockito.when(this.containerInfo.mountLabel()).thenReturn(null); - Mockito.when(this.containerInfo.volumes()).thenReturn(null); - Mockito.when(this.containerInfo.volumesRw()).thenReturn(null); + Mockito.when(this.containerInfo.mounts()).thenReturn(null); } diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerClientFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerClientFactory.java index f967ecc33..196e9bdd3 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerClientFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerClientFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat Inc. and others. + * Copyright (c) 2015, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -28,14 +28,14 @@ import org.eclipse.linuxtools.docker.core.IDockerImage; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.ContainerInfo; -import com.spotify.docker.client.messages.Image; -import com.spotify.docker.client.messages.ImageInfo; -import com.spotify.docker.client.messages.ImageSearchResult; -import com.spotify.docker.client.messages.Info; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.Image; +import org.mandas.docker.client.messages.ImageInfo; +import org.mandas.docker.client.messages.ImageSearchResult; +import org.mandas.docker.client.messages.Info; /** * Factory for mocked {@link IDockerConnection} diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerConnectionFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerConnectionFactory.java index f468f5ac0..cc8204073 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerConnectionFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockDockerConnectionFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -23,8 +23,8 @@ import org.eclipse.linuxtools.internal.docker.core.UnixSocketConnectionSettings; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * Factory for mocked {@link IDockerConnection} diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageFactory.java index 4ca11a407..a1039d837 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -24,7 +24,7 @@ import java.util.stream.Stream; import org.mockito.Mockito; import com.google.common.collect.ImmutableList; -import com.spotify.docker.client.messages.Image; +import org.mandas.docker.client.messages.Image; /** * A factory for mock {@link Image}s. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageInfoFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageInfoFactory.java index f410ad7cf..1872687e2 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageInfoFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageInfoFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -19,8 +19,8 @@ import org.mockito.Mockito; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.spotify.docker.client.messages.ContainerConfig; -import com.spotify.docker.client.messages.ImageInfo; +import org.mandas.docker.client.messages.ContainerConfig; +import org.mandas.docker.client.messages.ImageInfo; /** * A factory for mock {@link ImageInfo}s. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageSearchResultFactory.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageSearchResultFactory.java index 1f5b76d0d..3d89245da 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageSearchResultFactory.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/testutils/MockImageSearchResultFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -15,7 +15,7 @@ package org.eclipse.linuxtools.internal.docker.ui.testutils; import org.mockito.Mockito; -import com.spotify.docker.client.messages.ImageSearchResult; +import org.mandas.docker.client.messages.ImageSearchResult; /** * Factory for mocked {@link ImageSearchResult} instances. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerContainersViewSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerContainersViewSWTBotTest.java index cac458edf..e494e7052 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerContainersViewSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerContainersViewSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -47,7 +47,7 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * Testing the {@link DockerContainersView} diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerViewSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerViewSWTBotTest.java index 1075dda71..07417d90f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerViewSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerViewSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -58,8 +58,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; /** * Testing the {@link DockerExplorerView} {@link Viewer} diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImageHierarchyViewSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImageHierarchyViewSWTBotTest.java index de9472017..17b2791be 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImageHierarchyViewSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImageHierarchyViewSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -49,9 +49,9 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.Image; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.Image; /** * Testing the {@link DockerImageHierarchyView} call from the @@ -61,7 +61,6 @@ public class DockerImageHierarchyViewSWTBotTest { private SWTWorkbenchBot bot = new SWTWorkbenchBot(); private SWTBotView dockerExplorerViewBot; - private DockerExplorerView dockerExplorerView; @ClassRule public static CloseWelcomePageRule closeWelcomePage = new CloseWelcomePageRule( @@ -87,7 +86,6 @@ public class DockerImageHierarchyViewSWTBotTest { } }); this.dockerExplorerViewBot = bot.viewById(DockerExplorerView.VIEW_ID); - this.dockerExplorerView = (DockerExplorerView) (dockerExplorerViewBot.getViewReference().getView(true)); // make sure that the Docker Image Hierarchy view is closed this.bot.views().stream().filter(v -> v.getReference().getId().equals(DockerImageHierarchyView.VIEW_ID)) .forEach(v -> v.close()); diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImagesViewSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImagesViewSWTBotTest.java index 4d61fe0dd..99120ee9e 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImagesViewSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerImagesViewSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -46,7 +46,7 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * Testing the {@link DockerImagesView} using {@link SWTBot}. diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionSWTBotTest.java index 35f7d1040..195127826 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2019 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -17,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.concurrent.TimeUnit; import org.eclipse.core.resources.IResource; @@ -71,7 +72,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * Testing the {@link EditDockerConnection} {@link Wizard} @@ -148,7 +149,8 @@ public class EditDockerConnectionSWTBotTest { final IDockerHostConfig hostConfig = MockDockerHostConfigFactory.publishAllPorts(true).networkMode(networkMode) .build(); final ILaunchConfiguration runImageLaunchConfiguration = LaunchConfigurationUtils - .createRunImageLaunchConfiguration(image, containerConfig, hostConfig, "some_container", false); + .createRunImageLaunchConfiguration(image, containerConfig, hostConfig, new ArrayList<String>(), + "some_container", false); return runImageLaunchConfiguration.getName(); } @@ -386,7 +388,7 @@ public class EditDockerConnectionSWTBotTest { @Test public void shouldRefreshDockerExplorerViewWhenConnectionNameChanged() { // given - final IDockerConnection connection = configureTCPConnection("Test"); + configureTCPConnection("Test"); final SWTBotTreeItem connectionTreeItem = SWTUtils.getTreeItem(dockerExplorer.bot(), "Test"); assertThat(connectionTreeItem).isNotNull(); // when diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullSWTBotTest.java index 7adf082f1..43d9e0f8c 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -35,7 +35,6 @@ import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.CloseWelcomePageR import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.DockerConnectionManagerUtils; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.MenuAssertion; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.SWTUtils; -import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerView; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.junit.After; @@ -47,8 +46,8 @@ import org.junit.Test; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; /** * Testing the {@link ImagePull} wizard @@ -56,7 +55,6 @@ import com.spotify.docker.client.exceptions.DockerException; public class ImagePullSWTBotTest { private SWTWorkbenchBot bot = new SWTWorkbenchBot(); - private DockerExplorerView dockerExplorerView; private SWTBotView dockerExplorerViewBot; @ClassRule @@ -74,7 +72,6 @@ public class ImagePullSWTBotTest { @Before public void lookupDockerExplorerView() { this.dockerExplorerViewBot = bot.viewById("org.eclipse.linuxtools.docker.ui.dockerExplorerView"); - this.dockerExplorerView = (DockerExplorerView) (dockerExplorerViewBot.getViewReference().getView(true)); this.dockerExplorerViewBot.show(); this.dockerExplorerViewBot.setFocus(); this.defaultRegistryAccountStorageManager = RegistryAccountManager.getInstance().getStorageManager(); diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePushSWTBotTests.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePushSWTBotTests.java index 9d4c5eb0e..2a343e11b 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePushSWTBotTests.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePushSWTBotTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -46,9 +46,9 @@ import org.junit.Test; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.ProgressHandler; -import com.spotify.docker.client.exceptions.DockerException; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.ProgressHandler; +import org.mandas.docker.client.exceptions.DockerException; /** * Testing the {@link ImagePush} wizard diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSWTBotTest.java index 7ae6ce9ad..3d644285d 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. + * Copyright (c) 2015, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -15,6 +15,7 @@ package org.eclipse.linuxtools.internal.docker.ui.wizards; import static org.assertj.core.api.Assertions.assertThat; +import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.TimeUnit; @@ -43,7 +44,6 @@ import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.CloseShellRule; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.CloseWelcomePageRule; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.DockerConnectionManagerUtils; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.SWTUtils; -import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerView; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.eclipse.swtbot.swt.finder.waits.Conditions; @@ -55,13 +55,13 @@ import org.junit.Test; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.exceptions.DockerException; -import com.spotify.docker.client.messages.Container; -import com.spotify.docker.client.messages.ContainerCreation; -import com.spotify.docker.client.messages.ContainerInfo; -import com.spotify.docker.client.messages.Image; -import com.spotify.docker.client.messages.ImageInfo; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.exceptions.DockerException; +import org.mandas.docker.client.messages.Container; +import org.mandas.docker.client.messages.ContainerCreation; +import org.mandas.docker.client.messages.ContainerInfo; +import org.mandas.docker.client.messages.Image; +import org.mandas.docker.client.messages.ImageInfo; /** * Testing the {@link ImageRun} wizard @@ -69,7 +69,6 @@ import com.spotify.docker.client.messages.ImageInfo; public class ImageRunSWTBotTest { private SWTWorkbenchBot bot = new SWTWorkbenchBot(); - private DockerExplorerView dockerExplorerView; private SWTBotView dockerExplorerViewBot; private String configureRunImageLaunchConfiguration(final IDockerConnection connection, final String networkMode) { @@ -78,7 +77,8 @@ public class ImageRunSWTBotTest { final IDockerHostConfig hostConfig = MockDockerHostConfigFactory.publishAllPorts(true).networkMode(networkMode) .build(); final ILaunchConfiguration runImageLaunchConfiguration = LaunchConfigurationUtils - .createRunImageLaunchConfiguration(image, containerConfig, hostConfig, "some_container", false); + .createRunImageLaunchConfiguration(image, containerConfig, hostConfig, new ArrayList<String>(), + "some_container", false); return runImageLaunchConfiguration.getName(); } @@ -95,7 +95,6 @@ public class ImageRunSWTBotTest { @Before public void lookupDockerExplorerView() { dockerExplorerViewBot = bot.viewById("org.eclipse.linuxtools.docker.ui.dockerExplorerView"); - dockerExplorerView = (DockerExplorerView) (dockerExplorerViewBot.getViewReference().getView(true)); dockerExplorerViewBot.show(); dockerExplorerViewBot.setFocus(); } diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageSearchSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageSearchSWTBotTest.java index 9d83cb5bc..ef80d42cd 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageSearchSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageSearchSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2018 Red Hat. + * Copyright (c) 2016, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -26,7 +26,6 @@ import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.CloseShellRule; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.CloseWelcomePageRule; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.DockerConnectionManagerUtils; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.SWTUtils; -import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerView; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; @@ -36,7 +35,7 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * Testing the {@link ImageSearch} wizard. @@ -44,7 +43,6 @@ import com.spotify.docker.client.DockerClient; public class ImageSearchSWTBotTest { private SWTWorkbenchBot bot = new SWTWorkbenchBot(); - private DockerExplorerView dockerExplorerView; private SWTBotView dockerExplorerViewBot; @ClassRule @@ -60,7 +58,6 @@ public class ImageSearchSWTBotTest { @Before public void lookupDockerExplorerView() { dockerExplorerViewBot = bot.viewById("org.eclipse.linuxtools.docker.ui.dockerExplorerView"); - dockerExplorerView = (DockerExplorerView) (dockerExplorerViewBot.getViewReference().getView(true)); dockerExplorerViewBot.show(); dockerExplorerViewBot.setFocus(); } diff --git a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionSWTBotTest.java b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionSWTBotTest.java index 69271ab85..0710e3090 100644 --- a/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionSWTBotTest.java +++ b/containers/org.eclipse.linuxtools.docker.ui.tests/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionSWTBotTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat Inc. + * Copyright (c) 2015, 2020 Red Hat Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -55,7 +55,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import com.spotify.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient; /** * Testing the {@link NewDockerConnection} {@link Wizard} diff --git a/containers/org.eclipse.linuxtools.docker.ui/.classpath b/containers/org.eclipse.linuxtools.docker.ui/.classpath index cf36b5611..bc57d2383 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/.classpath +++ b/containers/org.eclipse.linuxtools.docker.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"/> <classpathentry kind="output" path="target/classes"/> diff --git a/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.core.prefs index afdca8b58..c29081e23 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -72,6 +73,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -108,8 +110,8 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 diff --git a/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.ui.prefs b/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.ui.prefs index ea129e97c..46bbbc7ca 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.ui.prefs +++ b/containers/org.eclipse.linuxtools.docker.ui/.settings/org.eclipse.jdt.ui.prefs @@ -15,8 +15,8 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true sp_cleanup.format_source_code_changes_only=true @@ -30,17 +30,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true sp_cleanup.remove_redundant_type_arguments=true -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -52,6 +55,7 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false sp_cleanup.use_lambda=true @@ -61,3 +65,4 @@ sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false diff --git a/containers/org.eclipse.linuxtools.docker.ui/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.docker.ui/META-INF/MANIFEST.MF index 8658ee62a..be0bd2b70 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.docker.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Docker UI Plug-in Bundle-SymbolicName: org.eclipse.linuxtools.docker.ui;singleton:=true -Bundle-Version: 4.4.0.qualifier +Bundle-Version: 5.1.0.qualifier Bundle-Activator: org.eclipse.linuxtools.docker.ui.Activator Bundle-Vendor: Eclipse Linux Tools Require-Bundle: org.eclipse.ui, @@ -23,16 +23,15 @@ Require-Bundle: org.eclipse.ui, org.eclipse.jface.databinding;bundle-version="1.9.0", org.eclipse.debug.core;bundle-version="3.10.0", org.eclipse.debug.ui;bundle-version="3.11.0", - com.spotify.docker.client;bundle-version="3.6.8", - org.eclipse.linuxtools.docker.editor, + org.mandas.docker-client;bundle-version="3.2.1", org.eclipse.e4.ui.workbench;bundle-version="1.4.0", org.eclipse.e4.ui.model.workbench;bundle-version="1.2.0", org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0", org.eclipse.tm.terminal.view.core;bundle-version="4.0.0", - com.ibm.icu, - org.apache.commons.compress;bundle-version="1.6.0", - javax.xml.bind;bundle-version="2.2.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 + org.apache.commons.compress;bundle-version="1.6.0" +Import-Package: javax.xml.bind;version="2.3.3", + javax.annotation;version="1.3.5" +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Export-Package: org.eclipse.linuxtools.docker.ui, diff --git a/containers/org.eclipse.linuxtools.docker.ui/pom.xml b/containers/org.eclipse.linuxtools.docker.ui/pom.xml index 63546a25e..c7e4bcbf8 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/pom.xml +++ b/containers/org.eclipse.linuxtools.docker.ui/pom.xml @@ -4,10 +4,10 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker.ui</artifactId> <packaging>eclipse-plugin</packaging> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> </project> diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/Activator.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/Activator.java index 53892605f..0922e0884 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/Activator.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/Activator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat Inc. + * Copyright (c) 2014, 2019 Red Hat Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -81,7 +82,7 @@ public class Activator extends AbstractUIPlugin { } public static Shell getActiveWorkbenchShell() { - IWorkbenchWindow window = getDefault().getWorkbench() + IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); if (window != null) { return window.getShell(); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java index 8d13f965b..5a967b84a 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2019 Red Hat Inc. and others. - * + * Copyright (c) 2015, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -424,6 +424,8 @@ public class ContainerLauncher { InputStream in = ((DockerConnection) connection).copyContainer(token, containerId, volume); + Map<String, String> links = new HashMap<>(); + synchronized (lockObject) { if (!dirList.contains(volume)) { dirList.add(volume); @@ -449,9 +451,28 @@ public class ContainerLauncher { path = path.append(te.getName()); File f = new File(path.toOSString()); int mode = te.getMode(); + if (te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!linkPath.isAbsolute()) { + if (!isWin) { + java.nio.file.Path p = Paths.get(path.toPortableString()); + java.nio.file.Path link = Paths.get(te.getLinkName()); + if (f.exists()) { + f.delete(); + } + Files.createSymbolicLink(p, link); + } else { + linkPath = new Path(volume).append(te.getLinkName()); + links.put(path.toPortableString(), linkPath.toPortableString()); + } + } else { + links.put(path.toPortableString(), linkPath.toPortableString()); + } + continue; + } if (te.isDirectory()) { f.mkdir(); - if (!isWin && !te.isSymbolicLink()) { + if (!isWin) { Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); } continue; @@ -460,7 +481,7 @@ public class ContainerLauncher { continue; } f.createNewFile(); - if (!isWin && !te.isSymbolicLink()) { + if (!isWin) { Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); } } @@ -483,6 +504,88 @@ public class ContainerLauncher { // remove from copying list so subsequent jobs might // know that the volume // is fully copied + for (String name : links.keySet()) { + String link = links.get(name); + boolean resolved = false; + int i = 0; // prevent infinite loop if there is a circular link + while (!resolved && ++i < 10) { + InputStream in2 = ((DockerConnection) connection).copyContainer(token, containerId, + link); + /* + * The input stream from copyContainer might be incomplete or non-blocking so we + * should wrap it in a stream that is guaranteed to block until data is + * available. + */ + try (TarArchiveInputStream k = new TarArchiveInputStream( + new BlockingInputStream(in2))) { + TarArchiveEntry te = k.getNextTarEntry(); + if (te != null && te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!linkPath.isAbsolute()) { + linkPath = new Path(link).removeLastSegments(1) + .append(te.getLinkName()); + } + link = linkPath.toPortableString(); + continue; + } + while (te != null) { + long size = te.getSize(); + IPath currDir = target.append(volume).removeLastSegments(1); + IPath path = currDir.append(name); + File f = new File(path.toOSString()); + if (te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!linkPath.isAbsolute()) { + if (!isWin) { + java.nio.file.Path p = Paths.get(path.toPortableString()); + java.nio.file.Path linkp = Paths.get(te.getLinkName()); + if (f.exists()) { + f.delete(); + } + Files.createSymbolicLink(p, linkp); + } else { + // we don't follow nested links + } + } else { + // we don't follow nested absolute links + } + te = k.getNextTarEntry(); + continue; + } + int mode = te.getMode(); + if (te.isDirectory()) { + f.mkdir(); + if (!isWin) { + Files.setPosixFilePermissions(Paths.get(path.toOSString()), + toPerms(mode)); + } + te = k.getNextTarEntry(); + continue; + } + f.createNewFile(); + if (!isWin) { + Files.setPosixFilePermissions(Paths.get(path.toOSString()), + toPerms(mode)); + } + try (FileOutputStream os = new FileOutputStream(f)) { + int bufferSize = ((int) size > 4096 ? 4096 : (int) size); + byte[] barray = new byte[bufferSize]; + int result = -1; + while ((result = k.read(barray, 0, bufferSize)) > -1) { + if (monitor.isCanceled()) { + monitor.done(); + k.close(); + os.close(); + return Status.CANCEL_STATUS; + } + os.write(barray, 0, result); + } + } + } + resolved = true; + } + } + } synchronized (lockObject) { copyingList.remove(currentVolume); } @@ -549,7 +652,6 @@ public class ContainerLauncher { } } } - super.finalize(); } public ContainerLauncher() { @@ -592,7 +694,7 @@ public class ContainerLauncher { /** * Perform a launch of a command in a container and output stdout/stderr to * console. - * + * * @param id * - id of caller to use to distinguish console owner * @param listener @@ -635,7 +737,7 @@ public class ContainerLauncher { /** * Perform a launch of a command in a container and output stdout/stderr to * console. - * + * * @param id * - id of caller to use to distinguish console owner * @param listener @@ -681,7 +783,7 @@ public class ContainerLauncher { /** * Perform a launch of a command in a container and output stdout/stderr to * console. - * + * * @param id * - id of caller to use to distinguish console owner * @param listener @@ -749,7 +851,7 @@ public class ContainerLauncher { /** * Perform a launch of a command in a container and output stdout/stderr to * console. - * + * * @param id * - id of caller to use to distinguish console owner * @param listener @@ -804,7 +906,7 @@ public class ContainerLauncher { /** * Perform a launch of a command in a container and output stdout/stderr to * console. - * + * * @param id * - id of caller to use to distinguish console owner * @param listener @@ -1258,7 +1360,7 @@ public class ContainerLauncher { /** * Fetch directories from Container and place them in a specified location. - * + * * @param connectionUri * - uri of connection to use * @param imageName @@ -1268,7 +1370,7 @@ public class ContainerLauncher { * @param hostDir * - host directory to copy directories to * @return 0 if successful, -1 if failure occurred - * + * * @since 3.0 */ public int fetchContainerDirs(String connectionUri, String imageName, @@ -1297,7 +1399,7 @@ public class ContainerLauncher { /** * Fetch directories from Container and place them in a specified location. - * + * * @param connectionUri * - uri of connection to use * @param imageName @@ -1309,7 +1411,7 @@ public class ContainerLauncher { * @param hostDir * - host directory to copy directories to * @return 0 if successful, -1 if failure occurred - * + * * @since 4.0 */ public int fetchContainerDirs(String connectionUri, String imageName, @@ -1339,7 +1441,7 @@ public class ContainerLauncher { /** * Fetch directories from Container and place them in a specified location. * This method will wait for copy job to complete before returning. - * + * * @param connectionUri * - uri of connection to use * @param imageName @@ -1349,7 +1451,7 @@ public class ContainerLauncher { * @param hostDir * - host directory to copy directories to * @return 0 if successful, -1 if failure occurred - * + * * @since 4.0 */ public int fetchContainerDirsSync(String connectionUri, String imageName, @@ -1384,7 +1486,7 @@ public class ContainerLauncher { /** * Fetch directories from Container and place them in a specified location. * This method will wait for copy job to complete before returning. - * + * * @param connectionUri * - uri of connection to use * @param imageName @@ -1394,7 +1496,7 @@ public class ContainerLauncher { * @param hostDir * - host directory to copy directories to * @return 0 if successful, -1 if failure occurred - * + * * @since 4.0 */ public int fetchContainerDirsSync(String connectionUri, String imageName, @@ -1430,7 +1532,7 @@ public class ContainerLauncher { /** * Create a Process to run an arbitrary command in a Container with uid of * caller so any files created are accessible to user. - * + * * @param connectionName * - uri of connection to use * @param imageName @@ -1461,10 +1563,10 @@ public class ContainerLauncher { * - boolean whether to keep Container when done * @return Process that can be used to check for completion and for routing * stdout/stderr - * + * * @since 3.0 */ - public Process runCommand(String connectionName, String imageName, IProject project, + public Process runCommand(String connectionName, String imageName, IProject project, IErrorMessageHolder errMsgHolder, String command, @SuppressWarnings("unused") String commandDir, String workingDir, @@ -1472,7 +1574,7 @@ public class ContainerLauncher { Properties envMap, boolean supportStdin, boolean privilegedMode, HashMap<String, String> labels, boolean keepContainer) { - + final List<String> cmdList = getCmdList(command); return runCommand(connectionName, imageName, project, errMsgHolder, cmdList, workingDir, additionalDirs, origEnv, envMap, @@ -1482,7 +1584,7 @@ public class ContainerLauncher { /** * Create a Process to run an arbitrary command in a Container with uid of * caller so any files created are accessible to user. - * + * * @param connectionName * - uri of connection to use * @param imageName @@ -1511,7 +1613,7 @@ public class ContainerLauncher { * - boolean whether to keep Container when done * @return Process that can be used to check for completion and for routing * stdout/stderr - * + * * @since 4.0 */ public Process runCommand(String connectionName, String imageName, @@ -1613,7 +1715,7 @@ public class ContainerLauncher { id += ":" + gid.toString(); //$NON-NLS-1$ builder = builder.user(id); } - + // TODO: add group id here when supported by DockerHostConfig.Builder // add any labels if specified @@ -1776,7 +1878,7 @@ public class ContainerLauncher { errMsgHolder.setErrorMessage(e.getMessage()); return null; } - + final String id = containerId; final IDockerConnection conn = connection; if (!((DockerConnection) conn).isLocal()) { @@ -1807,7 +1909,7 @@ public class ContainerLauncher { /** * Clean up the container used for launching - * + * * @param connectionUri * the URI of the connection used * @param info @@ -1833,7 +1935,7 @@ public class ContainerLauncher { /** * Get the reusable run console for running C/C++ executables in containers. - * + * * @return */ private RunConsole getConsole() { @@ -1846,7 +1948,7 @@ public class ContainerLauncher { /** * Take the command string and parse it into a list of strings. - * + * * @param s * @return list of strings */ @@ -1910,7 +2012,7 @@ public class ContainerLauncher { /** * Convert map of environment variables to a {@link List} of KEY=VALUE * String - * + * * @param variables * the entries to manipulate * @return the concatenated key/values for each given variable entry @@ -1937,13 +2039,13 @@ public class ContainerLauncher { /** * Get set of volumes that have been copied from Container to Host as part * of fetchContainerDirs method. - * + * * @param connectionName * - uri of connection used * @param imageName * - name of image used * @return set of paths copied from Container to Host - * + * * @since 3.0 */ public Set<String> getCopiedVolumes(String connectionName, diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/wizards/ImageSearch.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/wizards/ImageSearch.java index 963938852..afd044cf1 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/wizards/ImageSearch.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/wizards/ImageSearch.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,9 +15,11 @@ package org.eclipse.linuxtools.docker.ui.wizards; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.linuxtools.docker.core.AbstractRegistry; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IDockerImage; import org.eclipse.linuxtools.docker.core.IRegistry; +import org.eclipse.linuxtools.internal.docker.core.RegistryInfo; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageSearchModel; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageSearchPage; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageTagSelectionPage; @@ -25,7 +27,7 @@ import org.eclipse.linuxtools.internal.docker.ui.wizards.WizardMessages; /** * Wizard to search for images. - * + * */ public class ImageSearch extends Wizard { @@ -42,12 +44,12 @@ public class ImageSearch extends Wizard { private final ImageSearchModel imageSearchModel; /** - * Default Constructor - * - * @param connection - * the current connection to a target Docker daemon - * @param name - * the current image name or <code>null</code> if not applicable + * Constructor + * + * @param connection the current connection to a target Docker daemon + * @param name the current image name or <code>null</code> if not + * applicable + * @param reg registry to use */ public ImageSearch(final IDockerConnection connection, final String name, final IRegistry reg) { setWindowTitle(WizardMessages.getString("ImageSearch.title")); //$NON-NLS-1$ @@ -58,6 +60,18 @@ public class ImageSearch extends Wizard { this.imageSearchModel, reg); } + /** + * Constructor + * + * @param connection the current connection to a target Docker daemon + * @param name the current image name or <code>null</code> if not + * applicable + * @since 4.7 + */ + public ImageSearch(final IDockerConnection connection, final String name) { + this(connection, name, new RegistryInfo(AbstractRegistry.DOCKERHUB_REGISTRY, true)); + } + @Override public void addPages() { addPage(imageSearchPage); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandMessages.properties b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandMessages.properties index f5e3b96f6..e90044f6f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandMessages.properties +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CommandMessages.properties @@ -16,6 +16,7 @@ missing_connection=Missing connection command.pullImage.failure.no_connection=Unable to pull an image: no connection was found in the selection. command.copyfromcontainer.failure.no_connection=Unable to copy from container: no connection was found. +command.copyfromcontainer.failure.possible_circular_links=More than 9 links followed: possible circular links. command.copyfromcontainer.job.title=Copying files from {0} command.copyfromcontainer.job.task=Copying files command.copyfromcontainer.job.subtask=Copying {0} diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CopyFromContainerCommandHandler.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CopyFromContainerCommandHandler.java index 8bf49bce0..22aa3ab4f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CopyFromContainerCommandHandler.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/CopyFromContainerCommandHandler.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2016, 2019 Red Hat Inc. and others. - * + * Copyright (c) 2016, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -20,8 +20,10 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; @@ -57,6 +59,7 @@ import org.eclipse.ui.handlers.HandlerUtil; public class CopyFromContainerCommandHandler extends AbstractHandler { private static final String ERROR_COPYING_FROM_CONTAINER_NO_CONNECTION = "command.copyfromcontainer.failure.no_connection"; //$NON-NLS-1$ + private static final String ERROR_POSSIBLE_CIRCULAR_LINKS = "command.copyfromcontainer.failure.possible_circular_links"; //$NON-NLS-1$ private static final String MISSING_CONNECTION = "missing_connection"; //$NON-NLS-1$ private static final String ERROR_COPYING_FROM_CONTAINER = "command.copyfromcontainer.error.msg"; //$NON-NLS-1$ private static final String COPY_FROM_CONTAINER_JOB_TASK = "command.copyfromcontainer.job.task"; //$NON-NLS-1$ @@ -153,6 +156,7 @@ public class CopyFromContainerCommandHandler extends AbstractHandler { monitor.beginTask(CommandMessages.getString(COPY_FROM_CONTAINER_JOB_TASK), files.size()); boolean isWin = Platform.getOS().equals(Platform.OS_WIN32); try (Closeable token = ((DockerConnection) connection).getOperationToken()) { + Map<String, String> links = new HashMap<>(); for (ContainerFileProxy proxy : files) { if (monitor.isCanceled()) { monitor.done(); @@ -163,7 +167,7 @@ public class CopyFromContainerCommandHandler extends AbstractHandler { proxy.getFullPath())); monitor.worked(1); InputStream in = ((DockerConnection) connection).copyContainer(token, container.id(), - proxy.getLink()); + proxy.getFullPath()); /* * The input stream from copyContainer might be incomplete or non-blocking so we * should wrap it in a stream that is guaranteed to block until data is @@ -177,17 +181,39 @@ public class CopyFromContainerCommandHandler extends AbstractHandler { path = path.append(te.getName()); File f = new File(path.toOSString()); int mode = te.getMode(); + if (te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!linkPath.isAbsolute()) { + // for relative links, we will create a symbolic link if + // we are copying a folder, otherwise, we will follow the + // link and copy the file it points to + if (!isWin && proxy.isFolder()) { + java.nio.file.Path p = Paths.get(path.toPortableString()); + java.nio.file.Path link = Paths.get(te.getLinkName()); + if (f.exists()) { + f.delete(); + } + Files.createSymbolicLink(p, link); + } else { + linkPath = new Path(proxy.getFullPath()).removeLastSegments(1) + .append(te.getLinkName()); + links.put(path.toPortableString(), linkPath.toPortableString()); + } + } else { + links.put(path.toPortableString(), linkPath.toPortableString()); + } + continue; + } if (te.isDirectory()) { f.mkdir(); - if (!isWin && !te.isSymbolicLink()) { + if (!isWin) { Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); } continue; - } else { - f.createNewFile(); - if (!isWin && !te.isSymbolicLink()) { - Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); - } + } + f.createNewFile(); + if (!isWin) { + Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); } try (FileOutputStream os = new FileOutputStream(f)) { int bufferSize = ((int) size > 4096 ? 4096 : (int) size); @@ -210,10 +236,105 @@ public class CopyFromContainerCommandHandler extends AbstractHandler { .syncExec(() -> MessageDialog.openError( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), CommandMessages.getFormattedString(ERROR_COPYING_FROM_CONTAINER, - proxy.getLink(), container.name()), + proxy.getTarget(), container.name()), e.getCause() != null ? e.getCause().getMessage() : e.getMessage())); } } + // resolve absolute links by copying the files + for (String name : links.keySet()) { + String link = links.get(name); + boolean resolved = false; + int i = 0; // prevent infinite loop if there is a circular link + while (!resolved && ++i < 10) { + try { + InputStream in = ((DockerConnection) connection).copyContainer(token, container.id(), + link); + /* + * The input stream from copyContainer might be incomplete or non-blocking so we + * should wrap it in a stream that is guaranteed to block until data is + * available. + */ + try (TarArchiveInputStream k = new TarArchiveInputStream(new BlockingInputStream(in))) { + TarArchiveEntry te = k.getNextTarEntry(); + if (te != null && te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!linkPath.isAbsolute()) { + linkPath = new Path(link).removeLastSegments(1).append(te.getLinkName()); + } + link = linkPath.toPortableString(); + continue; + } + while (te != null) { + long size = te.getSize(); + IPath path = new Path(name) + .append(new Path(te.getName()).removeFirstSegments(1)); + File f = new File(path.toOSString()); + if (te.isSymbolicLink()) { + IPath linkPath = new Path(te.getLinkName()); + if (!isWin && !linkPath.isAbsolute()) { + java.nio.file.Path p = Paths.get(path.toPortableString()); + java.nio.file.Path linkp = Paths.get(te.getLinkName()); + if (f.exists()) { + f.delete(); + } + Files.createSymbolicLink(p, linkp); + } else { + // we don't follow nested links + } + te = k.getNextTarEntry(); + continue; + } + int mode = te.getMode(); + if (te.isDirectory()) { + f.mkdir(); + if (!isWin) { + Files.setPosixFilePermissions(Paths.get(path.toOSString()), + toPerms(mode)); + } + te = k.getNextTarEntry(); + continue; + } + f.createNewFile(); + if (!isWin) { + Files.setPosixFilePermissions(Paths.get(path.toOSString()), toPerms(mode)); + } + try (FileOutputStream os = new FileOutputStream(f)) { + int bufferSize = ((int) size > 4096 ? 4096 : (int) size); + byte[] barray = new byte[bufferSize]; + int result = -1; + while ((result = k.read(barray, 0, bufferSize)) > -1) { + if (monitor.isCanceled()) { + monitor.done(); + k.close(); + os.close(); + return Status.CANCEL_STATUS; + } + os.write(barray, 0, result); + } + } + te = k.getNextTarEntry(); + } + resolved = true; + } + } catch (final DockerException e) { + Display.getDefault() + .syncExec(() -> MessageDialog.openError( + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + CommandMessages.getFormattedString(ERROR_COPYING_FROM_CONTAINER, name, + container.name()), + e.getCause() != null ? e.getCause().getMessage() : e.getMessage())); + } + } + if (i == 10) { + Display.getDefault() + .syncExec(() -> MessageDialog.openError( + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + CommandMessages.getFormattedString(ERROR_COPYING_FROM_CONTAINER, name, + container.name()), + CommandMessages.getString(ERROR_POSSIBLE_CIRCULAR_LINKS))); + + } + } } catch (InterruptedException e) { // do nothing } catch (IOException e) { diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/PullImageCommandHandler.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/PullImageCommandHandler.java index 20eebf85d..981a82f8a 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/PullImageCommandHandler.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/PullImageCommandHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat Inc. and others. + * Copyright (c) 2015, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -33,7 +33,7 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * Command handler that opens the {@link ImageSearch} wizard and pulls the diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java index e987ea9a5..449765ae9 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat Inc. and others. - * + * Copyright (c) 2014, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -16,6 +16,8 @@ package org.eclipse.linuxtools.internal.docker.ui.commands; import static org.eclipse.linuxtools.internal.docker.ui.commands.CommandUtils.getRunConsole; import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -70,10 +72,11 @@ public class RunImageCommandHandler extends AbstractHandler { if (runImage) { final IDockerContainerConfig containerConfig = wizard .getDockerContainerConfig(); + List<String> unusedPorts = new ArrayList<>(); final IDockerHostConfig hostConfig = wizard - .getDockerHostConfig(); + .getDockerHostConfig(unusedPorts); runImage(selectedImage, containerConfig, null, - hostConfig, wizard.getDockerContainerName(), + hostConfig, unusedPorts, wizard.getDockerContainerName(), wizard.removeWhenExits()); } } catch (DockerException | CoreException e) { @@ -85,7 +88,7 @@ public class RunImageCommandHandler extends AbstractHandler { /** * Run the given {@link IDockerImage} with the given settings - * + * * @param image * @param containerConfig * @param hostConfig @@ -95,7 +98,9 @@ public class RunImageCommandHandler extends AbstractHandler { public static void runImage(final IDockerImage image, final IDockerContainerConfig containerConfig, final ILaunch launch, - final IDockerHostConfig hostConfig, final String containerName, + final IDockerHostConfig hostConfig, + final List<String> unusedPorts, + final String containerName, final boolean removeWhenExits) { final IDockerConnection connection = image.getConnection(); if (containerConfig.tty()) { @@ -164,7 +169,7 @@ public class RunImageCommandHandler extends AbstractHandler { // create a launch configuration from the container LaunchConfigurationUtils.createRunImageLaunchConfiguration(image, containerConfig, - hostConfig, containerName, + hostConfig, unusedPorts, containerName, removeWhenExits); } catch (final DockerException | InterruptedException e) { if (console != null) { diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/DockerComposeConsolePageParticipant.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/DockerComposeConsolePageParticipant.java index 21cac2959..57a3ad10b 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/DockerComposeConsolePageParticipant.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/DockerComposeConsolePageParticipant.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat Inc. and others. - * + * Copyright (c) 2015, 2019 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -30,7 +30,6 @@ public class DockerComposeConsolePageParticipant implements IConsolePageParticipant, IDebugEventSetListener { private DockerComposeConsole dockerComposeConsole; - private IPageBookViewPage dockerComposeConsolePage; private DockerComposeStopAction stopAction; private boolean dockerComposeConsoleTerminated = false; @@ -43,7 +42,6 @@ public class DockerComposeConsolePageParticipant @Override public void init(final IPageBookViewPage dockerComposeConsolePage, final IConsole console) { - this.dockerComposeConsolePage = dockerComposeConsolePage; this.dockerComposeConsole = (DockerComposeConsole) console; this.stopAction = new DockerComposeStopAction( dockerComposeConsole.getConnection(), diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java index f9c52cc78..e20dbe048 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2017, 2019 Red Hat Inc. and others. - * + * Copyright (c) 2017, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -221,7 +221,7 @@ public class ContainerCommandProcess extends Process { LaunchMessages.getFormattedString( "ContainerNotFinished.msg", containerId)); //$NON-NLS-1$ } - return state.exitCode(); + return state.exitCode().intValue(); } } if (containerRemoved) { @@ -276,7 +276,7 @@ public class ContainerCommandProcess extends Process { containerRemoved = true; connection.removeContainer(containerId); } - return exit.statusCode(); + return exit.statusCode().intValue(); } catch (DockerException e) { return -1; } diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/IRunDockerImageLaunchConfigurationConstants.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/IRunDockerImageLaunchConfigurationConstants.java index 62e7eb7bb..e244dca1a 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/IRunDockerImageLaunchConfigurationConstants.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/IRunDockerImageLaunchConfigurationConstants.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -42,6 +42,8 @@ public interface IRunDockerImageLaunchConfigurationConstants { String PUBLISHED_PORTS = "publishedPorts"; //$NON-NLS-1$ + String UNUSED_PORTS = "unusedPorts"; //$NON-NLS-1$ + String LINKS = "links"; //$NON-NLS-1$ String INTERACTIVE = "interactive"; //$NON-NLS-1$ diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/LaunchConfigurationUtils.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/LaunchConfigurationUtils.java index a2cca0412..d1157fa50 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/LaunchConfigurationUtils.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/LaunchConfigurationUtils.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015,2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -36,6 +36,7 @@ import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLa import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.PUBLISHED_PORTS; import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.PUBLISH_ALL_PORTS; import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.READONLY; +import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.UNUSED_PORTS; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -107,7 +108,7 @@ public class LaunchConfigurationUtils { /** * Creates a new {@link ILaunchConfiguration} for the given * {@link IDockerContainer}. - * + * * @param baseConfigurationName * the base configuration name to use when creating the * {@link ILaunchConfiguration}. @@ -123,12 +124,14 @@ public class LaunchConfigurationUtils { * @param removeWhenExits * flag to indicate if container should be removed when exited * @return the generated {@link ILaunchConfiguration} - * + * */ public static ILaunchConfiguration createRunImageLaunchConfiguration( final IDockerImage image, final IDockerContainerConfig containerConfig, - final IDockerHostConfig hostConfig, final String containerName, + final IDockerHostConfig hostConfig, + final List<String> unusedPorts, + final String containerName, final boolean removeWhenExits) { try { final ILaunchManager manager = DebugPlugin.getDefault() @@ -175,6 +178,7 @@ public class LaunchConfigurationUtils { } else { workingCopy.setAttribute(PUBLISHED_PORTS, serializePortBindings(hostConfig.portBindings())); + workingCopy.setAttribute(UNUSED_PORTS, unusedPorts); } // links (with format being: "<containerName>:<containerAlias>") workingCopy.setAttribute(LINKS, hostConfig.links()); @@ -200,6 +204,11 @@ public class LaunchConfigurationUtils { volumes.add(volume.toString()); } } + // volumes with no external mount + for (String volumePath : containerConfig.volumes().keySet()) { + final DataVolumeModel volume = new DataVolumeModel(volumePath); + volumes.add(volume.toString()); + } // TODO: container path declaration workingCopy.setAttribute(DATA_VOLUMES, volumes); @@ -214,7 +223,7 @@ public class LaunchConfigurationUtils { if (hostConfig.networkMode() != null) workingCopy.setAttribute(NETWORK_MODE, hostConfig.networkMode()); - + // resources limitations if (containerConfig.memory() != null) { workingCopy.setAttribute(ENABLE_LIMITS, true); @@ -245,7 +254,7 @@ public class LaunchConfigurationUtils { /** * Serializes the given Port Bindings to save them in an * {@link ILaunchConfiguration} - * + * * @param bindings * @return a {@link List} of port bindings serialized in the following * format: @@ -278,7 +287,7 @@ public class LaunchConfigurationUtils { /** * Serializes the given Port Bindings to save them in an * {@link ILaunchConfiguration} - * + * * @param bindings * @return a {@link List} of port bindings serialized in the following * format: @@ -310,7 +319,7 @@ public class LaunchConfigurationUtils { /** * Deserializes the given Port Bindings to use them in an * {@link ILaunchConfiguration} - * + * * @param bindings * a {@link List} of serialized bindings * @return a {@link Map} of {@link List} of {@link IDockerPortBinding} @@ -342,7 +351,7 @@ public class LaunchConfigurationUtils { /** * Computes the size of the given {@link Button} and returns the width. - * + * * @param button * the button for which the size must be computed. * @return the width hint for the given button @@ -359,7 +368,7 @@ public class LaunchConfigurationUtils { /** * Looks-up the {@link ILaunchConfiguration} with the given type and * <strong>IDockerImage's name</strong>. - * + * * @param type * the configuration type * @param imageName @@ -377,7 +386,7 @@ public class LaunchConfigurationUtils { /** * Looks-up the {@link ILaunchConfiguration} with the given type and * <strong>IDockerImage's name</strong>. - * + * * @param type * the configuration type * @param imageName @@ -412,7 +421,7 @@ public class LaunchConfigurationUtils { /** * Returns the {@link ILaunchConfigurationWorkingCopy} with the given type * and <strong>IDockerImage's name</strong>. - * + * * @param type * the configuration type * @param imageName @@ -442,7 +451,7 @@ public class LaunchConfigurationUtils { /** * Looks-up the {@link ILaunchConfiguration} with the given type and * <strong>name</strong>. - * + * * @param type * the configuration type * @param name @@ -468,7 +477,7 @@ public class LaunchConfigurationUtils { /** * Converts the given <code>path</code> to a Unix path if the current OS if * {@link Platform#OS_WIN32} - * + * * @param path * the path to convert * @return the converted path or the given path, depending on the current @@ -485,7 +494,7 @@ public class LaunchConfigurationUtils { /** * Converts the given path to a portable form, replacing all "\" and ": " * with "/" if the given <code>os</code> is {@link Platform#OS_WIN32}. - * + * * @param os * the current OS * @param path @@ -514,12 +523,12 @@ public class LaunchConfigurationUtils { /** * Converts the given <code>path</code> back to a Windows path if the * current OS if {@link Platform#OS_WIN32}. - * + * * <p> * Note: This is the revert operation of * {@link LaunchConfigurationUtils#convertToUnixPath(String)}. * </p> - * + * * @param path * the path to convert * @return the converted path or the given path, depending on the current @@ -536,7 +545,7 @@ public class LaunchConfigurationUtils { /** * Converts the given path to a portable form, replacing all "\" and ": " * with "/" if the given <code>os</code> is {@link Platform#OS_WIN32}. - * + * * @param os * the current OS * @param path @@ -564,7 +573,7 @@ public class LaunchConfigurationUtils { /** * Creates a Launch Configuration name from the given repoName or from the * given resource's project if the repoName was <code>null</code>. - * + * * @param imageName * the full image name * @param resource @@ -602,7 +611,7 @@ public class LaunchConfigurationUtils { /** * Creates a new {@link ILaunchConfiguration} to build an * {@link IDockerImage} from a Dockerfile {@link IResource}. - * + * * @param connection * the connection to use to submit the build * @param repoName @@ -639,7 +648,7 @@ public class LaunchConfigurationUtils { /** * Creates an {@link ILaunchConfiguration} for to run the * {@code docker-compose up} command. - * + * * @param connection * the Docker connection to use * @param dockerComposeScript @@ -676,7 +685,7 @@ public class LaunchConfigurationUtils { /** * Creates a Launch Configuration name from the given * {@code dockerComposeScript}. - * + * * @param dockerComposeScript * the name of the {@code Docker Compose} script * @return the {@link ILaunchConfiguration} name @@ -691,7 +700,7 @@ public class LaunchConfigurationUtils { * Updates all {@link ILaunchConfiguration} of the given {@code type} where * there is an attribute with the given {@code attributeName} of the given * {@code oldValue}, and sets the {@code newValue} instead. - * + * * @param type * the type of {@link ILaunchConfiguration} to find * @param attributeName diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java index effc99b9e..336fddd32 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015,2018 Red Hat. - * + * Copyright (c) 2015, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -69,6 +69,8 @@ public class RunDockerImageLaunchConfigurationDelegate containerConfig, launch, hostConfig, + config.getAttribute( + IRunDockerImageLaunchConfigurationConstants.UNUSED_PORTS, new ArrayList<String>()), config.getAttribute( IRunDockerImageLaunchConfigurationConstants.CONTAINER_NAME, (String) null), @@ -106,7 +108,7 @@ public class RunDockerImageLaunchConfigurationDelegate .deserializePortBindings(serializedBindings); hostConfigBuilder.portBindings(portBindings); } - + // container links final List<String> links = config.getAttribute( IRunDockerImageLaunchConfigurationConstants.LINKS, @@ -128,10 +130,10 @@ public class RunDockerImageLaunchConfigurationDelegate bind.append(",ro"); //$NON-NLS-1$ } binds.add(bind.toString()); - + } hostConfigBuilder.binds(binds); - + // run in privileged mode final boolean privileged = config.getAttribute( IRunDockerImageLaunchConfigurationConstants.PRIVILEGED, @@ -188,7 +190,7 @@ public class RunDockerImageLaunchConfigurationDelegate IRunDockerImageLaunchConfigurationConstants.ENV_VARIABLES, new ArrayList<String>()); config.env(environmentVariables); - + // labels final Map<String, String> labelVariables = lconfig.getAttribute( IRunDockerImageLaunchConfigurationConstants.LABELS, @@ -251,7 +253,7 @@ public class RunDockerImageLaunchConfigurationDelegate /** * Show a selection dialog that allows the user to choose one of the * connections to use to build the Image. - * + * * @param connections * Array of connections. * @return The chosen connection, or <code>null</code> if the user cancelled @@ -283,7 +285,7 @@ public class RunDockerImageLaunchConfigurationDelegate /** * Get the active Workbench shell. - * + * * @return active shell as returned by the plug-in */ protected Shell getActiveWorkbenchShell() { diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunImagePortsTab.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunImagePortsTab.java index 9645db859..eb5d59007 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunImagePortsTab.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunImagePortsTab.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2019 Red Hat Inc. and others. - * + * Copyright (c) 2015, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -339,6 +339,8 @@ public class RunImagePortsTab extends AbstractLaunchConfigurationTab final List<String> publishedPorts = configuration.getAttribute( IRunDockerImageLaunchConfigurationConstants.PUBLISHED_PORTS, new ArrayList<String>()); + final List<String> unusedPorts = configuration + .getAttribute(IRunDockerImageLaunchConfigurationConstants.UNUSED_PORTS, new ArrayList<String>()); final Set<ExposedPortModel> selectedPorts = new HashSet<>(); for (String port : publishedPorts) { final ImageRunSelectionModel.ExposedPortModel exposedPort = ImageRunSelectionModel.ExposedPortModel @@ -348,6 +350,13 @@ public class RunImagePortsTab extends AbstractLaunchConfigurationTab selectedPorts.add(exposedPort); } } + for (String port : unusedPorts) { + final ImageRunSelectionModel.ExposedPortModel exposedPort = ImageRunSelectionModel.ExposedPortModel + .createPortModel(port); + exposedPort.setSelected(false); + model.addExposedPort(exposedPort); + } + // select ports model.setSelectedPorts(selectedPorts); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ConnectionInfoContentProvider.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ConnectionInfoContentProvider.java index fd852fec9..5aca32794 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ConnectionInfoContentProvider.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ConnectionInfoContentProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. + * Copyright (c) 2014, 2020 Red Hat. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -41,8 +41,6 @@ public class ConnectionInfoContentProvider implements ITreeContentProvider { new Object[] { "Images", connectionInfo.getImages() }, //$NON-NLS-1$ new Object[] { "Storage driver", //$NON-NLS-1$ connectionInfo.getStorageDriver() }, - new Object[] { "Execution driver", //$NON-NLS-1$ - connectionInfo.getExecutionDriver() }, new Object[] { "Kernel version", //$NON-NLS-1$ connectionInfo.getKernelVersion() }, new Object[] { "Operating system", connectionInfo.getOs() }, //$NON-NLS-1$ diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ContainerInspectContentProvider.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ContainerInspectContentProvider.java index 5960edc39..ba73e6553 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ContainerInspectContentProvider.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ContainerInspectContentProvider.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -23,6 +23,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.linuxtools.docker.core.IDockerContainerConfig; import org.eclipse.linuxtools.docker.core.IDockerContainerInfo; +import org.eclipse.linuxtools.docker.core.IDockerContainerInfo2; import org.eclipse.linuxtools.docker.core.IDockerContainerState; import org.eclipse.linuxtools.docker.core.IDockerHostConfig; import org.eclipse.linuxtools.docker.core.IDockerNetworkSettings; @@ -64,8 +65,7 @@ public class ContainerInspectContentProvider implements ITreeContentProvider { new Object[]{"Path", info.path()}, //$NON-NLS-1$ new Object[]{"ProcessLabel", info.processLabel()}, //$NON-NLS-1$ new Object[]{"ResolvConfPath", info.resolvConfPath()}, //$NON-NLS-1$ - new Object[]{"Volumes", info.volumes()}, //$NON-NLS-1$ - new Object[]{"VolumesRW", info.volumesRW()}, //$NON-NLS-1$ + new Object[] { "Mounts", ((IDockerContainerInfo2) info).mounts() }, //$NON-NLS-1$ }; }return EMPTY; } @@ -81,7 +81,7 @@ public class ContainerInspectContentProvider implements ITreeContentProvider { new Object[]{"Running", containerState.running()}, //$NON-NLS-1$ new Object[]{"Paused", containerState.paused()}, //$NON-NLS-1$ new Object[]{"Pid", containerState.pid()}, //$NON-NLS-1$ - }; + }; } else if(propertyValue instanceof IDockerHostConfig) { final DockerHostConfig hostConfig = (DockerHostConfig) propertyValue; return new Object[] { @@ -174,7 +174,7 @@ public class ContainerInspectContentProvider implements ITreeContentProvider { i++; } return result; - } + } return EMPTY; } @@ -211,5 +211,5 @@ public class ContainerInspectContentProvider implements ITreeContentProvider { } return false; } - + } diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ImageInspectPropertySection.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ImageInspectPropertySection.java index a91613fdc..49d1820ac 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ImageInspectPropertySection.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/ImageInspectPropertySection.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat. - * + * Copyright (c) 2015, 2019 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -36,15 +36,12 @@ public class ImageInspectPropertySection extends BasePropertySection { private final static String PropertiesInfoError = "PropertiesInfoError.msg"; //$NON-NLS-1$ private final static String PropertiesLoadingImageInfo = "PropertiesLoadingImageInfo.msg"; //$NON-NLS-1$ - private IDockerImage selectedImage; - private Object imageInfo; - @Override public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); getTreeViewer().setContentProvider(new ImageInspectContentProvider()); } - + @Override public void setInput(final IWorkbenchPart part, final ISelection selection) { super.setInput(part, selection); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ContainerDataVolumeDialog.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ContainerDataVolumeDialog.java index 4d71c388b..f4ff9ce99 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ContainerDataVolumeDialog.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ContainerDataVolumeDialog.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat Inc. and others. - * + * Copyright (c) 2015, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -41,7 +41,8 @@ import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IDockerContainer; -import org.eclipse.linuxtools.docker.core.IDockerContainerInfo; +import org.eclipse.linuxtools.docker.core.IDockerContainerInfo2; +import org.eclipse.linuxtools.docker.core.IDockerContainerMount; import org.eclipse.linuxtools.internal.docker.ui.SWTImagesFactory; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageRunResourceVolumesVariablesModel.MountType; import org.eclipse.swt.SWT; @@ -294,7 +295,7 @@ public class ContainerDataVolumeDialog extends Dialog { * selected, and set the enablement of the associated {@link Control} at the * same time (ie: the {@link Control} are only enabled when the given * {@link Button} is selected. - * + * * @param button * the {@link Button} to bind * @param mountType @@ -361,7 +362,7 @@ public class ContainerDataVolumeDialog extends Dialog { /** * Creates an {@link IContentProposalProvider} to propose * {@link IDockerContainer} names based on the current text. - * + * * @param items * @return */ @@ -437,15 +438,22 @@ public class ContainerDataVolumeDialog extends Dialog { // just make sure that the dialog cannot complete return ValidationStatus.error(null); } - final IDockerContainerInfo selectedContainerInfo = container.info(); - if (selectedContainerInfo != null - && selectedContainerInfo.volumes() != null - && !selectedContainerInfo.volumes() - .containsKey(model.getContainerPath())) { - return ValidationStatus - .warning(WizardMessages.getFormattedString( - "ContainerDataVolumeDialog.volumeWarning", //$NON-NLS-1$ - model.getContainerPath())); + final IDockerContainerInfo2 selectedContainerInfo = (IDockerContainerInfo2) container.info(); + if (selectedContainerInfo != null && selectedContainerInfo.mounts() != null + && model.getContainerPath() != null) { + boolean shouldWarn = true; + for (IDockerContainerMount mount : selectedContainerInfo.mounts()) { + if (model.getContainerPath().equals(mount.source())) { + shouldWarn = false; + break; + } + } + if (shouldWarn) { + return ValidationStatus + .warning(WizardMessages.getFormattedString("ContainerDataVolumeDialog.volumeWarning", //$NON-NLS-1$ + model.getContainerPath())); + + } } } return ValidationStatus.ok(); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionPage.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionPage.java index c06069fc5..8b36718ec 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionPage.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/EditDockerConnectionPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2019 Red Hat Inc. and others. + * Copyright (c) 2014, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -62,7 +62,7 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * {@link WizardPage} to edit an {@link IDockerConnection} diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRun.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRun.java index dd883139e..400954d65 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRun.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRun.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -38,6 +38,7 @@ import org.eclipse.linuxtools.internal.docker.core.DockerHostConfig; import org.eclipse.linuxtools.internal.docker.core.DockerPortBinding; import org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants; import org.eclipse.linuxtools.internal.docker.ui.launch.LaunchConfigurationUtils; +import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageRunResourceVolumesVariablesModel.MountType; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageRunSelectionModel.ContainerLinkModel; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageRunSelectionModel.ExposedPortModel; @@ -53,7 +54,7 @@ public class ImageRun extends Wizard { /** * Constructor when an {@link IDockerConnection} has been selected to run an * {@link IDockerImage}. - * + * * @param connection * the {@link IDockerConnection} pointing to a specific Docker * daemon/host. @@ -71,7 +72,7 @@ public class ImageRun extends Wizard { /** * Full constructor with a selected {@link IDockerImage} to run. - * + * * @param selectedImage * the {@link IDockerImage} to use to fill the wizard pages * @throws DockerException @@ -125,7 +126,7 @@ public class ImageRun extends Wizard { return this.imageRunSelectionPage.getModel().isRemoveWhenExits(); } - public IDockerHostConfig getDockerHostConfig() { + public IDockerHostConfig getDockerHostConfig(List<String> unusedPorts) { final ImageRunSelectionModel selectionModel = this.imageRunSelectionPage .getModel(); final ImageRunResourceVolumesVariablesModel resourcesModel = this.imageRunResourceVolumesPage @@ -134,6 +135,7 @@ public class ImageRun extends Wizard { .getModel(); final DockerHostConfig.Builder hostConfigBuilder = new DockerHostConfig.Builder(); + if (selectionModel.isPublishAllPorts()) { hostConfigBuilder.publishAllPorts(true); } else { @@ -141,6 +143,17 @@ public class ImageRun extends Wizard { for (ExposedPortModel exposedPort : selectionModel.getExposedPorts()) { // only selected Ports in the CheckboxTableViewer are exposed. if (!selectionModel.getSelectedPorts().contains(exposedPort)) { + StringBuilder b = new StringBuilder(); + b.append(exposedPort.getContainerPort()); + b.append("/"); + b.append(exposedPort.getPortType()); + b.append(":"); //$NON-NLS-1$ + if (exposedPort.getHostAddress() != null) { + b.append(exposedPort.getHostAddress()); + } + b.append(":"); //$NON-NLS-1$ + b.append(exposedPort.getHostPort()); + unusedPorts.add(b.toString()); continue; } final DockerPortBinding portBinding = new DockerPortBinding(exposedPort.getHostAddress(), @@ -262,6 +275,24 @@ public class ImageRun extends Wizard { } config.exposedPorts(exposedPorts); } + + Map<String, String> emptyMap = new HashMap<>(); + @SuppressWarnings("rawtypes") + Map<String, Map> volumes = new HashMap<>(); + for (DataVolumeModel dataVolume : resourcesModel.getDataVolumes()) { + // only data volumes selected in the CheckBoxTableViewer are + // included. + if (!resourcesModel.getSelectedDataVolumes().contains(dataVolume)) { + continue; + } + if (dataVolume.getMountType() == MountType.NONE) { + volumes.put(dataVolume.getContainerPath(), emptyMap); + } + } + if (!volumes.isEmpty()) { + config.volumes(volumes); + } + return config.build(); } diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionModel.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionModel.java index 94af1f57f..22e5a2b4f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionModel.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionModel.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat. - * + * Copyright (c) 2014, 2020 Red Hat. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -33,7 +33,7 @@ import org.eclipse.linuxtools.internal.docker.ui.databinding.BaseDatabindingMode /** * Databinding model for the {@link ImageRunSelectionPage} - * + * * @author xcoulon * */ @@ -373,7 +373,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { /** * Set the container links - * + * * @param links * in the following format: * <code><containerName>:<containerAlias></code> @@ -477,7 +477,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { /** * Parses and converts the {@link List} of the given {@link String} * values into a {@link List} of {@link ExposedPortModel} - * + * * @param exposedPortInfos * the input values * @return the corresponding {@link ExposedPortModel}s @@ -498,7 +498,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { /** * Parse the given value and returns an instance of * {@link ExposedPortModel}. - * + * * @param exposedPortInfo * the value to parse * @return the corresponding {@link ExposedPortModel} @@ -512,7 +512,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { if (firstColumnSeparator == -1 && exposedPortInfo .indexOf(CONTAINER_TYPE_SEPARATOR) != -1) { final String type = exposedPortInfo.substring( - exposedPortInfo.indexOf(CONTAINER_TYPE_SEPARATOR)); // $NON-NLS-1$ + exposedPortInfo.indexOf(CONTAINER_TYPE_SEPARATOR) + 1); // $NON-NLS-1$ final ExposedPortModel exposedPort = new ExposedPortModel( privatePort, type, "", privatePort); // $NON-NLS-1$ return exposedPort; // $NON-NLS-1$ @@ -521,7 +521,8 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { .indexOf(SEPARATOR, firstColumnSeparator + 1); final String type = exposedPortInfo.substring( - exposedPortInfo.indexOf(CONTAINER_TYPE_SEPARATOR), // $NON-NLS-1$ + exposedPortInfo.indexOf(CONTAINER_TYPE_SEPARATOR) + + 1, // $NON-NLS-1$ firstColumnSeparator); // $NON-NLS-1$ final String hostIP = exposedPortInfo.substring( firstColumnSeparator + 1, secondColumnSeparator); @@ -535,7 +536,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { /** * Full constructor - * + * * @param privatePort * @param portType * @param hostAddress @@ -554,7 +555,7 @@ public class ImageRunSelectionModel extends BaseDatabindingModel { /** * Create an ExposedPortModel from its toString output - * + * * @param stringValue * @return ExposedPortModel */ diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionPage.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionPage.java index 5637d9593..16595a6c9 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionPage.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImageRunSelectionPage.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2014, 2019 Red Hat Inc. and others. - * + * Copyright (c) 2014, 2020 Red Hat Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -23,6 +23,7 @@ import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLa import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.PUBLISHED_PORTS; import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.PUBLISH_ALL_PORTS; import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.READONLY; +import static org.eclipse.linuxtools.internal.docker.ui.launch.IRunDockerImageLaunchConfigurationConstants.UNUSED_PORTS; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -103,7 +104,7 @@ import org.eclipse.ui.PlatformUI; /** * A {@link WizardPage} to let the user select the {@link IDockerImage} to run * and select the most common arguments (container name, port settings, etc.) - * + * * @author xcoulon * */ @@ -125,13 +126,13 @@ public class ImageRunSelectionPage extends WizardPage { /** * Default constructor. - * + * * @param selectedImage * the {@link IDockerImage} to run * @param lastLaunchConfiguration * the last {@link ILaunchConfiguration} used to run this * {@link IDockerImage} or <code>null</code> if none exists. - * + * */ public ImageRunSelectionPage(final IDockerImage selectedImage, final ILaunchConfiguration lastLaunchConfiguration) { @@ -146,10 +147,10 @@ public class ImageRunSelectionPage extends WizardPage { /** * Default constructor. - * + * * @param selectedConnection * the {@link IDockerConnection} to run - * + * */ public ImageRunSelectionPage(final IDockerConnection selectedConnection) { super("ImageSelectionPage", //$NON-NLS-1$ @@ -269,7 +270,7 @@ public class ImageRunSelectionPage extends WizardPage { /** * Creates the {@link Composite} container that will display widgets to * select an {@link IDockerImage}, name it and specify the command to run. - * + * * @param container * the parent {@link Composite} */ @@ -466,7 +467,6 @@ public class ImageRunSelectionPage extends WizardPage { exposedPortsTableViewer, ExposedPortModel.class), BeanProperties.set(ImageRunSelectionModel.SELECTED_PORTS) .observe(model)); - checkAllElements(exposedPortsTableViewer); // disable the edit and removeButton if the table is empty exposedPortsTableViewer.addSelectionChangedListener( @@ -476,13 +476,6 @@ public class ImageRunSelectionPage extends WizardPage { removeButton); } - private void checkAllElements( - final CheckboxTableViewer exposedPortsTableViewer) { - exposedPortsTableViewer.setAllChecked(true); - model.setSelectedPorts( - new HashSet<>(model.getExposedPorts())); - } - private ISelectionChangedListener onSelectionChanged( final Button... targetButtons) { return e -> { @@ -721,7 +714,7 @@ public class ImageRunSelectionPage extends WizardPage { /** * Creates an {@link IContentProposalProvider} to propose * {@link IDockerImage} names based on the current text. - * + * * @param items * @return */ @@ -859,17 +852,26 @@ public class ImageRunSelectionPage extends WizardPage { final List<String> exposedPortInfos = lastLaunchConfiguration .getAttribute(PUBLISHED_PORTS, Collections.<String> emptyList()); + final List<String> unusedPortInfos = lastLaunchConfiguration.getAttribute(UNUSED_PORTS, + Collections.<String>emptyList()); // FIXME: handle the case where ports where added (and selected) // by the user. if (selectedImageInfo != null) { - final List<ExposedPortModel> exposedPorts = ExposedPortModel - .fromStrings( - selectedImageInfo.config().exposedPorts()); - model.setExposedPorts(exposedPorts); - final List<ExposedPortModel> selectedExposedPorts = ExposedPortModel - .fromStrings(exposedPortInfos); - this.model.setSelectedPorts( - new HashSet<>(selectedExposedPorts)); + if (exposedPortInfos.isEmpty()) { + final List<ExposedPortModel> exposedPorts = ExposedPortModel + .fromStrings(selectedImageInfo.config().exposedPorts()); + model.setExposedPorts(exposedPorts); + this.model.setSelectedPorts(new HashSet<>(exposedPorts)); + } else { + final List<ExposedPortModel> exposedPorts = ExposedPortModel.fromStrings(exposedPortInfos); + model.setExposedPorts(exposedPorts); + this.model.setSelectedPorts(new HashSet<>(exposedPorts)); + } + for (String port : unusedPortInfos) { + ExposedPortModel portModel = ExposedPortModel.fromString(port); + portModel.setSelected(false); + model.addExposedPort(portModel); + } } // links diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionPage.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionPage.java index 6c87e19b5..fadf5e873 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionPage.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/NewDockerConnectionPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2019 Red Hat Inc. and others + * Copyright (c) 2014, 2020 Red Hat Inc. and others * . * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -83,7 +83,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ListDialog; import org.eclipse.ui.dialogs.PreferencesUtil; -import com.spotify.docker.client.exceptions.DockerCertificateException; +import org.mandas.docker.client.exceptions.DockerCertificateException; /** * {@link WizardPage} to input the settings to connect to a Docker diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/feature.xml b/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/feature.xml index 1fa96f85f..2f858be3d 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/feature.xml +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.jdt.docker.launcher.feature" label="%featureName" - version="4.4.0.qualifier" + version="5.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/pom.xml b/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/pom.xml index fb4868ae4..403704b1a 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/pom.xml +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher-feature/pom.xml @@ -14,11 +14,11 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.jdt.docker.launcher.feature</artifactId> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> <name>Linux Tools JDT Docker Launch Feature</name> diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher/.classpath b/containers/org.eclipse.linuxtools.jdt.docker.launcher/.classpath index 43b986286..1db08c6b4 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher/.classpath +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher/.settings/org.eclipse.jdt.core.prefs b/containers/org.eclipse.linuxtools.jdt.docker.launcher/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher/.settings/org.eclipse.jdt.core.prefs +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher/META-INF/MANIFEST.MF b/containers/org.eclipse.linuxtools.jdt.docker.launcher/META-INF/MANIFEST.MF index 49dc178d8..8db2ab338 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher/META-INF/MANIFEST.MF +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.linuxtools.jdt.docker.launcher;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.debug.core, org.eclipse.debug.ui, @@ -17,7 +17,8 @@ Require-Bundle: org.eclipse.debug.core, org.eclipse.osgi, org.eclipse.linuxtools.docker.ui, org.eclipse.linuxtools.docker.core, - com.spotify.docker.client, - org.eclipse.core.runtime, - javax.xml.bind;bundle-version="2.2.0" + org.mandas.docker-client, + org.eclipse.core.runtime +Import-Package: javax.xml.bind;version="2.3.3", + javax.annotation;version="1.3.5" Automatic-Module-Name: org.eclipse.linuxtools.jdt.docker.launcher diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher/pom.xml b/containers/org.eclipse.linuxtools.jdt.docker.launcher/pom.xml index c2f7899e2..99e9887e6 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher/pom.xml +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.jdt.docker.launcher</artifactId> <version>1.0.0-SNAPSHOT</version> diff --git a/containers/org.eclipse.linuxtools.jdt.docker.launcher/src/org/eclipse/linuxtools/jdt/docker/launcher/ImageQuery.java b/containers/org.eclipse.linuxtools.jdt.docker.launcher/src/org/eclipse/linuxtools/jdt/docker/launcher/ImageQuery.java index 47a9890ca..e4800117b 100644 --- a/containers/org.eclipse.linuxtools.jdt.docker.launcher/src/org/eclipse/linuxtools/jdt/docker/launcher/ImageQuery.java +++ b/containers/org.eclipse.linuxtools.jdt.docker.launcher/src/org/eclipse/linuxtools/jdt/docker/launcher/ImageQuery.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 Red Hat Inc. and others. + * Copyright (c) 2017, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.jdt.docker.launcher; import java.io.File; +import java.io.IOException; import java.nio.ByteBuffer; import org.eclipse.linuxtools.docker.core.DockerException; @@ -23,10 +24,10 @@ import org.eclipse.linuxtools.internal.docker.core.DockerContainerConfig; import org.eclipse.linuxtools.internal.docker.core.DockerHostConfig; import org.osgi.framework.Version; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.DockerClient.ExecCreateParam; -import com.spotify.docker.client.LogStream; -import com.spotify.docker.client.messages.ExecCreation; +import org.mandas.docker.client.DockerClient; +import org.mandas.docker.client.DockerClient.ExecCreateParam; +import org.mandas.docker.client.LogStream; +import org.mandas.docker.client.messages.ExecCreation; public class ImageQuery { @@ -75,7 +76,10 @@ public class ImageQuery { } catch (Exception e) { e.printStackTrace(); } finally { - stream.close(); + try { + stream.close(); + } catch (IOException e) { + } } return null; } diff --git a/containers/pom.xml b/containers/pom.xml index d19cebcb4..5dd662928 100644 --- a/containers/pom.xml +++ b/containers/pom.xml @@ -3,13 +3,13 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.docker</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> <packaging>pom</packaging> <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <properties> @@ -25,7 +25,6 @@ <modules> <module>org.eclipse.linuxtools.docker.core</module> <module>org.eclipse.linuxtools.docker.ui</module> - <module>org.eclipse.linuxtools.docker.editor</module> <module>org.eclipse.linuxtools.docker.tests.hamcrest-wrap</module> <module>org.eclipse.linuxtools.docker.ui.tests</module> <module>org.eclipse.linuxtools.docker.docs</module> @@ -33,6 +32,9 @@ <module>org.eclipse.linuxtools.docker.reddeer</module> <module>org.eclipse.linuxtools.docker.integration.tests</module> <module>org.eclipse.linuxtools.docker.tests-feature</module> + <module>org.eclipse.linuxtools.docker.editor.ls</module> + <module>org.eclipse.linuxtools.docker.editor.ls-feature</module> + <module>org.eclipse.linuxtools.docker.editor.ls.tests</module> <module>org.eclipse.linuxtools.jdt.docker.launcher</module> <module>org.eclipse.linuxtools.jdt.docker.launcher-feature</module> </modules> @@ -80,7 +82,7 @@ <dependency> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-sourceref-jgit</artifactId> - <version>${tycho-extras-version}</version> + <version>${tycho-version}</version> </dependency> </dependencies> </plugin> diff --git a/gcov/org.eclipse.linuxtools.gcov-feature/feature.xml b/gcov/org.eclipse.linuxtools.gcov-feature/feature.xml index 7f5fc94af..0630afe22 100644 --- a/gcov/org.eclipse.linuxtools.gcov-feature/feature.xml +++ b/gcov/org.eclipse.linuxtools.gcov-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.gcov" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/gcov/org.eclipse.linuxtools.gcov-feature/pom.xml b/gcov/org.eclipse.linuxtools.gcov-feature/pom.xml index 6482fd482..93884a019 100644 --- a/gcov/org.eclipse.linuxtools.gcov-feature/pom.xml +++ b/gcov/org.eclipse.linuxtools.gcov-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-gcov-parent</artifactId> <groupId>org.eclipse.linuxtools.gcov</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gcov</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools GCov Feature</name> diff --git a/gcov/org.eclipse.linuxtools.gcov.core/.classpath b/gcov/org.eclipse.linuxtools.gcov.core/.classpath index 43b986286..1db08c6b4 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/.classpath +++ b/gcov/org.eclipse.linuxtools.gcov.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.core.prefs b/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.core.prefs index c7a729bc4..7b57a5bb3 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.core.prefs +++ b/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.ui.prefs b/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.ui.prefs index e0093774a..690dcacd3 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.ui.prefs +++ b/gcov/org.eclipse.linuxtools.gcov.core/.settings/org.eclipse.jdt.ui.prefs @@ -28,6 +28,7 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true @@ -35,10 +36,12 @@ sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true sp_cleanup.remove_redundant_type_arguments=true sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=true @@ -50,6 +53,7 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false sp_cleanup.use_lambda=true @@ -58,3 +62,4 @@ sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false diff --git a/gcov/org.eclipse.linuxtools.gcov.core/META-INF/MANIFEST.MF b/gcov/org.eclipse.linuxtools.gcov.core/META-INF/MANIFEST.MF index 6aa520df5..bbf7ad1f9 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/META-INF/MANIFEST.MF +++ b/gcov/org.eclipse.linuxtools.gcov.core/META-INF/MANIFEST.MF @@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2 Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.gcov.core;singleton:=true Bundle-Version: 6.2.0.qualifier -Bundle-Activator: org.eclipse.linuxtools.internal.gcov.Activator Bundle-Vendor: %bundleProvider Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, @@ -19,7 +18,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.linuxtools.dataviewers.charts, org.eclipse.ui.editors;bundle-version="3.8.0" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Export-Package: org.eclipse.linuxtools.internal.gcov.parser;x-friends:="org.eclipse.linuxtools.gcov.launch", diff --git a/gcov/org.eclipse.linuxtools.gcov.core/pom.xml b/gcov/org.eclipse.linuxtools.gcov.core/pom.xml index 1a54de765..b1c35316b 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/pom.xml +++ b/gcov/org.eclipse.linuxtools.gcov.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gcov-parent</artifactId> <groupId>org.eclipse.linuxtools.gcov</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gcov.core</artifactId> diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Activator.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Constants.java similarity index 54% rename from gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Activator.java rename to gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Constants.java index 61a46c2a4..f2b574010 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Activator.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/Constants.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -12,39 +12,13 @@ *******************************************************************************/ package org.eclipse.linuxtools.internal.gcov; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - /** * The activator class controls the plug-in life cycle * @since 4.2 */ -public class Activator extends AbstractUIPlugin { +public class Constants { // The plug-in ID public static final String PLUGIN_ID = "org.eclipse.linuxtools.gcov.core"; //$NON-NLS-1$ - // The shared instance - private static Activator plugin; - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static Activator getDefault() { - return plugin; - } } diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/OpenGCAction.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/OpenGCAction.java index 66ec9eb34..8ffe7e224 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/OpenGCAction.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/OpenGCAction.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * Copyright (c) 2009, 2020 STMicroelectronics and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -17,6 +17,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; + import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IBinary; @@ -32,7 +33,6 @@ import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.linuxtools.binutils.utils.STSymbolManager; -import org.eclipse.linuxtools.internal.gcov.Activator; import org.eclipse.linuxtools.internal.gcov.dialog.OpenGCDialog; import org.eclipse.linuxtools.internal.gcov.view.CovView; import org.eclipse.linuxtools.internal.gcov.view.annotatedsource.GcovAnnotationModelTracker; @@ -40,6 +40,7 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorLauncher; import org.eclipse.ui.PlatformUI; +import org.osgi.framework.FrameworkUtil; /** * Action performed when user clicks on a gcda/gcno file @@ -105,7 +106,8 @@ public class OpenGCAction implements IEditorLauncher { return; } - IDialogSettings ds = Activator.getDefault().getDialogSettings(); + IDialogSettings ds = PlatformUI.getDialogSettingsProvider(FrameworkUtil.getBundle(OpenGCAction.class)) + .getDialogSettings(); IDialogSettings defaultMapping = ds.getSection(OpenGCDialog.class.getName()); if (defaultMapping == null) { defaultMapping = ds.addNewSection(OpenGCDialog.class.getName()); @@ -113,8 +115,12 @@ public class OpenGCAction implements IEditorLauncher { String defaultBinary = defaultMapping.get(file.toOSString()); if (defaultBinary == null || defaultBinary.isEmpty() || !exists(defaultBinary)) { //FIXME EK-LINUXTOOLS: defaultBinary = getDefaultBinary(file); - defaultBinary = - STSymbolManager.sharedInstance.findOneAndOnlyBinary(file).getLocation().toOSString(); + IResource bin_resource = STSymbolManager.sharedInstance.findOneAndOnlyBinary(file); + if (bin_resource != null) { + defaultBinary = bin_resource.getLocation().toOSString(); + } else { + defaultBinary = ""; //$NON-NLS-1$ + } } OpenGCDialog d = new OpenGCDialog(shell, defaultBinary, file); @@ -128,12 +134,12 @@ public class OpenGCAction implements IEditorLauncher { t.start(); } - private void displayCoverage(IPath file, String binaryPath, File gcda, boolean isCompleteCoverageResultWanted) + private void displayCoverage(IPath file, String binaryPath, File gcda, boolean isCompleteCoverageResultWanted) { //FIXME EK-LINUXTOOLS: IProject project = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(file).getProject(); IProject project = STSymbolManager.sharedInstance.getProjectFromFile(file); //FIXME EK-LINUXTOOLS: Need check for null and correct action - + GcovAnnotationModelTracker.getInstance().addProject(project, new Path(binaryPath)); PlatformUI.getWorkbench().getDisplay().syncExec(() -> { GcovAnnotationModelTracker.getInstance().annotateAllCEditors(); diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/SwitchContentProviderAction.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/SwitchContentProviderAction.java index 45af95360..2e546145f 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/SwitchContentProviderAction.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/action/SwitchContentProviderAction.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -13,35 +13,34 @@ package org.eclipse.linuxtools.internal.gcov.action; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.linuxtools.internal.gcov.Activator; -import org.eclipse.ui.plugin.AbstractUIPlugin; - +import org.eclipse.linuxtools.internal.gcov.Constants; - /** - * This action changes the content provider - */ +/** + * This action changes the content provider + */ - public class SwitchContentProviderAction extends Action { +public class SwitchContentProviderAction extends Action { - private final ColumnViewer viewer; - private final IContentProvider provider; + private final ColumnViewer viewer; + private final IContentProvider provider; - public SwitchContentProviderAction(String name, String iconPath, ColumnViewer viewer, IContentProvider provider) { - super(name, AS_RADIO_BUTTON); - this.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, iconPath)); - this.setToolTipText(name); - this.viewer = viewer; - this.provider = provider; - } + public SwitchContentProviderAction(String name, String iconPath, ColumnViewer viewer, IContentProvider provider) { + super(name, AS_RADIO_BUTTON); + this.setImageDescriptor(ResourceLocator.imageDescriptorFromBundle(Constants.PLUGIN_ID, iconPath).get()); + this.setToolTipText(name); + this.viewer = viewer; + this.provider = provider; + } - @Override - public void run() { - viewer.getControl().setRedraw(false); - viewer.setContentProvider(provider); - ((TreeViewer)viewer).expandToLevel(2); - viewer.getControl().setRedraw(true); - } - } \ No newline at end of file + @Override + public void run() { + viewer.getControl().setRedraw(false); + viewer.setContentProvider(provider); + ((TreeViewer) viewer).expandToLevel(2); + viewer.getControl().setRedraw(true); + } +} \ No newline at end of file diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/dialog/OpenGCDialog.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/dialog/OpenGCDialog.java index a51f133f5..0175b1869 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/dialog/OpenGCDialog.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/dialog/OpenGCDialog.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * Copyright (c) 2009, 2020 STMicroelectronics and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -31,7 +31,7 @@ import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.linuxtools.binutils.utils.STSymbolManager; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; @@ -52,6 +52,7 @@ import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceComparator; +import org.osgi.framework.FrameworkUtil; /** * This dialog box is opened when user clicks on a gcno/gcda file. it allows the user to choose the binary file who @@ -238,12 +239,12 @@ public class OpenGCDialog extends Dialog { dialog.setInitialSelection(c.getProject()); dialog.setValidator(selection -> { if (selection.length != 1) { - return new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ + return new Status(IStatus.ERROR, Constants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ } if (!(selection[0] instanceof IFile)) { - return new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ + return new Status(IStatus.ERROR, Constants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ } - return new Status(IStatus.OK, Activator.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ + return new Status(IStatus.OK, Constants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ }); if (dialog.open() == IDialogConstants.OK_ID) { IResource resource = (IResource) dialog.getFirstResult(); @@ -274,7 +275,8 @@ public class OpenGCDialog extends Dialog { @Override protected void okPressed() { - IDialogSettings ds = Activator.getDefault().getDialogSettings(); + IDialogSettings ds = PlatformUI.getDialogSettingsProvider(FrameworkUtil.getBundle(OpenGCDialog.class)) + .getDialogSettings(); IDialogSettings defaultMapping = ds.getSection(OpenGCDialog.class.getName()); if (defaultMapping == null) { defaultMapping = ds.addNewSection(OpenGCDialog.class.getName()); diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/CovManager.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/CovManager.java index c9c2a4a4f..153a76b7c 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/CovManager.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/CovManager.java @@ -42,7 +42,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.linuxtools.binutils.utils.STStrings; import org.eclipse.linuxtools.binutils.utils.STSymbolManager; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.linuxtools.internal.gcov.model.CovFileTreeElement; import org.eclipse.linuxtools.internal.gcov.model.CovFolderTreeElement; import org.eclipse.linuxtools.internal.gcov.model.CovFunctionTreeElement; @@ -53,6 +53,7 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import org.osgi.framework.FrameworkUtil; /** * @author Xavier Raynaud <xavier.raynaud@st.com> @@ -158,7 +159,7 @@ public class CovManager implements Serializable { } if (noRcrd.getFnctns().isEmpty()) { String message = NLS.bind(Messages.CovManager_No_Funcs_Error, gcnoPath); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } daRcrd = new GcdaRecordsParser(noRcrd.getFnctns()); @@ -420,9 +421,9 @@ public class CovManager implements Serializable { Messages.CovManager_No_Strings_Windows_Error); }); } else { - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, IStatus.ERROR, Messages.CovManager_Retrieval_Error, new IOException()); - Activator.getDefault().getLog().log(status); + Platform.getLog(FrameworkUtil.getBundle(CovManager.class)).log(status); } return l; } diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcdaRecordsParser.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcdaRecordsParser.java index ef0e53e65..d4b1cea9e 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcdaRecordsParser.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcdaRecordsParser.java @@ -21,7 +21,7 @@ import java.util.ArrayList; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.linuxtools.internal.gcov.utils.BEDataInputStream; import org.eclipse.linuxtools.internal.gcov.utils.LEDataInputStream; import org.eclipse.linuxtools.internal.gcov.utils.MasksGenerator; @@ -71,7 +71,7 @@ public class GcdaRecordsParser { stream = new LEDataInputStream((DataInputStream) stream); } else { String message = NLS.bind(Messages.GcdaRecordsParser_magic_num_error, magic); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } } @@ -110,7 +110,7 @@ public class GcdaRecordsParser { if (f.getCheksum() != fnctnChksm) { String message = NLS.bind(Messages.GcdaRecordsParser_checksum_error, new Object[] { currentFnctn.getName(), fnctnId }); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } @@ -132,7 +132,7 @@ public class GcdaRecordsParser { if (!fnctnFound) { currentFnctn = null; String message = NLS.bind(Messages.GcdaRecordsParser_func_not_found, fnctnId); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } @@ -143,14 +143,14 @@ public class GcdaRecordsParser { case GCOV_COUNTER_ARCS: { if (currentFnctn == null) { String message = Messages.GcdaRecordsParser_func_counter_error; - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } ArrayList<Block> fnctnBlcks = currentFnctn.getFunctionBlocks(); if (fnctnBlcks.isEmpty()) { String message = Messages.GcdaRecordsParser_func_block_empty; - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcnoRecordsParser.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcnoRecordsParser.java index ccd441f14..e59557b33 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcnoRecordsParser.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/parser/GcnoRecordsParser.java @@ -22,7 +22,7 @@ import java.util.HashMap; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.linuxtools.internal.gcov.utils.BEDataInputStream; import org.eclipse.linuxtools.internal.gcov.utils.GcovStringReader; import org.eclipse.linuxtools.internal.gcov.utils.LEDataInputStream; @@ -81,7 +81,7 @@ public class GcnoRecordsParser { stream = new LEDataInputStream((DataInputStream) stream); } else { String message = NLS.bind(Messages.GcnoRecordsParser_magic_num_error, magic); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, message); throw new CoreException(status); } } diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovView.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovView.java index bc43431f6..76487fd9e 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovView.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovView.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -25,6 +25,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -38,7 +39,7 @@ import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.TreeColumnViewerFilter; import org.eclipse.linuxtools.dataviewers.actions.STExportToCSVAction; import org.eclipse.linuxtools.dataviewers.charts.actions.ChartAction; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.linuxtools.internal.gcov.action.SwitchContentProviderAction; import org.eclipse.linuxtools.internal.gcov.parser.CovManager; import org.eclipse.linuxtools.internal.gcov.parser.SourceFile; @@ -55,6 +56,7 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; +import org.osgi.framework.FrameworkUtil; /** * @author Xavier Raynaud <xavier.raynaud@st.com> @@ -84,7 +86,7 @@ public class CovView extends AbstractSTDataView { manager.add(fileAction); manager.add(functionAction); manager.add(new Separator()); - manager.add(new ChartAction(getViewSite().getShell(), getSTViewer())); + manager.add(new ChartAction(getViewSite().getShell(), getSTViewer())); } @Override @@ -207,9 +209,9 @@ public class CovView extends AbstractSTDataView { public static void reportError(Exception ex) { final String message = NLS.bind(Messages.CovView_error_message, ex.getMessage()); - Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, message, ex); + Status status = new Status(IStatus.ERROR, Constants.PLUGIN_ID, IStatus.ERROR, message, ex); - Activator.getDefault().getLog().log(status); + Platform.getLog(FrameworkUtil.getBundle(CovView.class)).log(status); PlatformUI.getWorkbench().getDisplay().asyncExec(() -> { Shell s = PlatformUI.getWorkbench().getDisplay().getActiveShell(); MessageDialog.openError(s, Messages.CovView_parsing_error, message); diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovViewer.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovViewer.java index 0a4e541ab..986785bc5 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovViewer.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/CovViewer.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * Copyright (c) 2009, 2019 STMicroelectronics and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,8 +14,6 @@ package org.eclipse.linuxtools.internal.gcov.view; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogSettings; @@ -33,6 +31,8 @@ import org.eclipse.linuxtools.internal.gcov.parser.SourceFile; import org.eclipse.linuxtools.internal.gcov.view.annotatedsource.OpenSourceFileAction; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; +import org.osgi.framework.FrameworkUtil; @@ -70,7 +70,7 @@ public class CovViewer extends AbstractSTTreeViewer { @Override public IDialogSettings getDialogSettings() { - return org.eclipse.linuxtools.internal.gcov.Activator.getDefault().getDialogSettings(); + return PlatformUI.getDialogSettingsProvider(FrameworkUtil.getBundle(CovViewer.class)).getDialogSettings(); } @Override @@ -94,7 +94,6 @@ public class CovViewer extends AbstractSTTreeViewer { CovManager cvm = (CovManager) this.getInput(); SourceFile sourceFile = cvm.getSourceFile(sourceLoc); if (sourceFile != null) { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); String binaryLoc = cvm.getBinaryPath(); IPath binaryPath = new Path(binaryLoc); //FIXME EK-LINUXTOOLS: IFile binary = root.getFileForLocation(binaryPath); diff --git a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/annotatedsource/OpenSourceFileAction.java b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/annotatedsource/OpenSourceFileAction.java index 305cbfe83..4df70912e 100644 --- a/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/annotatedsource/OpenSourceFileAction.java +++ b/gcov/org.eclipse.linuxtools.gcov.core/src/org/eclipse/linuxtools/internal/gcov/view/annotatedsource/OpenSourceFileAction.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -23,11 +23,12 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.linuxtools.binutils.link2source.STLink2SourceSupport; -import org.eclipse.linuxtools.internal.gcov.Activator; +import org.eclipse.linuxtools.internal.gcov.Constants; import org.eclipse.linuxtools.internal.gcov.parser.SourceFile; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; @@ -39,6 +40,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; +import org.osgi.framework.FrameworkUtil; public final class OpenSourceFileAction { @@ -96,11 +98,11 @@ public final class OpenSourceFileAction { try { page.openEditor(new STAnnotatedSourceNotFoundEditorInput(project, sourceFile, realLocation, lineNumber), STAnnotatedSourceNotFoundEditor.ID, true); - } catch (PartInitException e) { - Status s = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, - Messages.OpenSourceFileAction_open_error, e); - Activator.getDefault().getLog().log(s); - } + } catch (PartInitException e) { + Status s = new Status(IStatus.ERROR, Constants.PLUGIN_ID, IStatus.ERROR, + Messages.OpenSourceFileAction_open_error, e); + Platform.getLog(FrameworkUtil.getBundle(OpenSourceFileAction.class)).log(s); + } } else { try { IEditorPart editor = IDE.openEditorOnFileStore(page, fs); @@ -116,13 +118,13 @@ public final class OpenSourceFileAction { IWorkbenchPage p = editor.getSite().getPage(); p.activate(editor); } - } catch (PartInitException e) { - Status s = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, - Messages.OpenSourceFileAction_open_error, e); - Activator.getDefault().getLog().log(s); - } + } catch (PartInitException e) { + Status s = new Status(IStatus.ERROR, Constants.PLUGIN_ID, IStatus.ERROR, + Messages.OpenSourceFileAction_open_error, e); + Platform.getLog(FrameworkUtil.getBundle(OpenSourceFileAction.class)).log(s); + } } - + } }); } diff --git a/gcov/org.eclipse.linuxtools.gcov.docs/pom.xml b/gcov/org.eclipse.linuxtools.gcov.docs/pom.xml index 5f020ca55..c4d9427c9 100644 --- a/gcov/org.eclipse.linuxtools.gcov.docs/pom.xml +++ b/gcov/org.eclipse.linuxtools.gcov.docs/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.gcov</groupId> <artifactId>linuxtools-gcov-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gcov.docs</artifactId> diff --git a/gcov/org.eclipse.linuxtools.gcov.launch/.classpath b/gcov/org.eclipse.linuxtools.gcov.launch/.classpath index 43b986286..1db08c6b4 100644 --- a/gcov/org.eclipse.linuxtools.gcov.launch/.classpath +++ b/gcov/org.eclipse.linuxtools.gcov.launch/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/gcov/org.eclipse.linuxtools.gcov.launch/.settings/org.eclipse.jdt.core.prefs b/gcov/org.eclipse.linuxtools.gcov.launch/.settings/org.eclipse.jdt.core.prefs index 9cac1c29a..c246cade9 100644 --- a/gcov/org.eclipse.linuxtools.gcov.launch/.settings/org.eclipse.jdt.core.prefs +++ b/gcov/org.eclipse.linuxtools.gcov.launch/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gcov/org.eclipse.linuxtools.gcov.launch/META-INF/MANIFEST.MF b/gcov/org.eclipse.linuxtools.gcov.launch/META-INF/MANIFEST.MF index fdc2087a7..72d15bbb0 100644 --- a/gcov/org.eclipse.linuxtools.gcov.launch/META-INF/MANIFEST.MF +++ b/gcov/org.eclipse.linuxtools.gcov.launch/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.gcov.launch;singleton:=true Bundle-Version: 1.2.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Require-Bundle: org.eclipse.linuxtools.profiling.launch;bundle-version="1.2.0", org.eclipse.core.runtime;bundle-version="3.8.0", diff --git a/gcov/org.eclipse.linuxtools.gcov.launch/pom.xml b/gcov/org.eclipse.linuxtools.gcov.launch/pom.xml index b39760a28..7a0caca00 100644 --- a/gcov/org.eclipse.linuxtools.gcov.launch/pom.xml +++ b/gcov/org.eclipse.linuxtools.gcov.launch/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gcov-parent</artifactId> <groupId>org.eclipse.linuxtools.gcov</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gcov.launch</artifactId> diff --git a/gcov/org.eclipse.linuxtools.gcov.test/.classpath b/gcov/org.eclipse.linuxtools.gcov.test/.classpath index 43b986286..a621c21ac 100644 --- a/gcov/org.eclipse.linuxtools.gcov.test/.classpath +++ b/gcov/org.eclipse.linuxtools.gcov.test/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/gcov/org.eclipse.linuxtools.gcov.test/.settings/org.eclipse.jdt.core.prefs b/gcov/org.eclipse.linuxtools.gcov.test/.settings/org.eclipse.jdt.core.prefs index 89403a779..649554d9b 100644 --- a/gcov/org.eclipse.linuxtools.gcov.test/.settings/org.eclipse.jdt.core.prefs +++ b/gcov/org.eclipse.linuxtools.gcov.test/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gcov/org.eclipse.linuxtools.gcov.test/META-INF/MANIFEST.MF b/gcov/org.eclipse.linuxtools.gcov.test/META-INF/MANIFEST.MF index bf4065b35..12b2cbf7a 100644 --- a/gcov/org.eclipse.linuxtools.gcov.test/META-INF/MANIFEST.MF +++ b/gcov/org.eclipse.linuxtools.gcov.test/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.junit;bundle-version="4.10.0", org.eclipse.ui.navigator.resources, org.eclipse.ui.navigator Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.gcov.core Automatic-Module-Name: org.eclipse.linuxtools.gcov.test diff --git a/gcov/org.eclipse.linuxtools.gcov.test/pom.xml b/gcov/org.eclipse.linuxtools.gcov.test/pom.xml index 926b13ad7..57d56d358 100644 --- a/gcov/org.eclipse.linuxtools.gcov.test/pom.xml +++ b/gcov/org.eclipse.linuxtools.gcov.test/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gcov-parent</artifactId> <groupId>org.eclipse.linuxtools.gcov</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gcov.test</artifactId> diff --git a/gcov/pom.xml b/gcov/pom.xml index ae0938d9b..cc6e2e6b5 100644 --- a/gcov/pom.xml +++ b/gcov/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.gcov</groupId> diff --git a/gprof/org.eclipse.linuxtools.gprof-feature/feature.xml b/gprof/org.eclipse.linuxtools.gprof-feature/feature.xml index 068e9fa98..3388b6727 100644 --- a/gprof/org.eclipse.linuxtools.gprof-feature/feature.xml +++ b/gprof/org.eclipse.linuxtools.gprof-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.gprof.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%provider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/gprof/org.eclipse.linuxtools.gprof-feature/pom.xml b/gprof/org.eclipse.linuxtools.gprof-feature/pom.xml index de89d33ab..70b934451 100644 --- a/gprof/org.eclipse.linuxtools.gprof-feature/pom.xml +++ b/gprof/org.eclipse.linuxtools.gprof-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-gprof-parent</artifactId> <groupId>org.eclipse.linuxtools.gprof</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gprof.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools GProf Integration Feature</name> diff --git a/gprof/org.eclipse.linuxtools.gprof.docs/pom.xml b/gprof/org.eclipse.linuxtools.gprof.docs/pom.xml index 98d896661..10765fd22 100644 --- a/gprof/org.eclipse.linuxtools.gprof.docs/pom.xml +++ b/gprof/org.eclipse.linuxtools.gprof.docs/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-gprof-parent</artifactId> <groupId>org.eclipse.linuxtools.gprof</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gprof.docs</artifactId> diff --git a/gprof/org.eclipse.linuxtools.gprof.launch/.classpath b/gprof/org.eclipse.linuxtools.gprof.launch/.classpath index 43b986286..1db08c6b4 100644 --- a/gprof/org.eclipse.linuxtools.gprof.launch/.classpath +++ b/gprof/org.eclipse.linuxtools.gprof.launch/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/gprof/org.eclipse.linuxtools.gprof.launch/.settings/org.eclipse.jdt.core.prefs b/gprof/org.eclipse.linuxtools.gprof.launch/.settings/org.eclipse.jdt.core.prefs index e7fba4098..c58287391 100644 --- a/gprof/org.eclipse.linuxtools.gprof.launch/.settings/org.eclipse.jdt.core.prefs +++ b/gprof/org.eclipse.linuxtools.gprof.launch/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -97,4 +99,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gprof/org.eclipse.linuxtools.gprof.launch/META-INF/MANIFEST.MF b/gprof/org.eclipse.linuxtools.gprof.launch/META-INF/MANIFEST.MF index 7d3d6391d..121d87bcf 100644 --- a/gprof/org.eclipse.linuxtools.gprof.launch/META-INF/MANIFEST.MF +++ b/gprof/org.eclipse.linuxtools.gprof.launch/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.gprof.launch;singleton:=true Bundle-Version: 1.2.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Require-Bundle: org.eclipse.linuxtools.profiling.launch;bundle-version="1.2.0", org.eclipse.core.runtime;bundle-version="3.8.0", diff --git a/gprof/org.eclipse.linuxtools.gprof.launch/pom.xml b/gprof/org.eclipse.linuxtools.gprof.launch/pom.xml index 42cbbfc98..44e8f88e2 100644 --- a/gprof/org.eclipse.linuxtools.gprof.launch/pom.xml +++ b/gprof/org.eclipse.linuxtools.gprof.launch/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gprof-parent</artifactId> <groupId>org.eclipse.linuxtools.gprof</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gprof.launch</artifactId> diff --git a/gprof/org.eclipse.linuxtools.gprof.test/.classpath b/gprof/org.eclipse.linuxtools.gprof.test/.classpath index 43b986286..a621c21ac 100644 --- a/gprof/org.eclipse.linuxtools.gprof.test/.classpath +++ b/gprof/org.eclipse.linuxtools.gprof.test/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/gprof/org.eclipse.linuxtools.gprof.test/.settings/org.eclipse.jdt.core.prefs b/gprof/org.eclipse.linuxtools.gprof.test/.settings/org.eclipse.jdt.core.prefs index 89403a779..649554d9b 100644 --- a/gprof/org.eclipse.linuxtools.gprof.test/.settings/org.eclipse.jdt.core.prefs +++ b/gprof/org.eclipse.linuxtools.gprof.test/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gprof/org.eclipse.linuxtools.gprof.test/META-INF/MANIFEST.MF b/gprof/org.eclipse.linuxtools.gprof.test/META-INF/MANIFEST.MF index b49f8c309..5c8480175 100644 --- a/gprof/org.eclipse.linuxtools.gprof.test/META-INF/MANIFEST.MF +++ b/gprof/org.eclipse.linuxtools.gprof.test/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.gprof.test Bundle-Version: 5.1.0.qualifier Bundle-Vendor: %bundleProvider -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit;bundle-version="4.10.0", org.eclipse.linuxtools.gprof.launch;bundle-version="1.0.0", org.eclipse.linuxtools.profiling.tests;bundle-version="1.0.0", diff --git a/gprof/org.eclipse.linuxtools.gprof.test/bigtest_gprof_input/gmon.out b/gprof/org.eclipse.linuxtools.gprof.test/bigtest_gprof_input/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..3d425c91e1862d54f46e9ad365ee136d7c5d6645 GIT binary patch literal 109532 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 W{<^M20(b<yS0V+xgg^Cv;lBV0-Y^aT literal 0 HcmV?d00001 diff --git a/gprof/org.eclipse.linuxtools.gprof.test/foocpp_gprof_input/gmon.out b/gprof/org.eclipse.linuxtools.gprof.test/foocpp_gprof_input/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..3f9fdb70b62896d23ee0a422bb74e556e5f5a24c GIT binary patch literal 1380 zcmYe#&Cg?GKm$6hEF3v~EF1w$3=Anix#HC1{JfN6m?}5}CNN5mh5%*=U?eL{C1i=v z%3QJ>Lr~MuaxFpc3<(8{Puf^Gta@2EK!MMw)6T-72jkcPIgMRVnI}MwZYPv8r-Ow< o0meB3<h%xAumLPUQMk+%AO~)MPB#ljdk<9E6=Y5b&_bA{0Dqt!KL7v# literal 0 HcmV?d00001 diff --git a/gprof/org.eclipse.linuxtools.gprof.test/foox_gprof_input/gmon.out b/gprof/org.eclipse.linuxtools.gprof.test/foox_gprof_input/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..e1071405b1619fae93fa9d34750ceb80c08140e0 GIT binary patch literal 1222 zcmYe#&Cg?GKm$F^EF2m=K+MFzkOGt|PEF3wODTq_f-_(O!<~i&5R9gle?jI^+f0bt zXk#j>+0?Lu8fM^*4ceNH+ul(b(n5f-rVUuww6bu3B8*X`9f_0E!NPG7CUd0|iBr?X L!f^qp6r=|LaIO++ literal 0 HcmV?d00001 diff --git a/gprof/org.eclipse.linuxtools.gprof.test/partially-pg-build_gprof_input/gmon.out b/gprof/org.eclipse.linuxtools.gprof.test/partially-pg-build_gprof_input/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..c7da11fb0a8ed213448d4c8e7629fa7c775cc7fe GIT binary patch literal 433 tcmYe#&Cg?GKm#Y5SvU@~v2g4Iil+c^acXjYUP>`c6`TPR7^UeK0ss?)2;cw! literal 0 HcmV?d00001 diff --git a/gprof/org.eclipse.linuxtools.gprof.test/pom.xml b/gprof/org.eclipse.linuxtools.gprof.test/pom.xml index 272ba6dde..44a5badb2 100644 --- a/gprof/org.eclipse.linuxtools.gprof.test/pom.xml +++ b/gprof/org.eclipse.linuxtools.gprof.test/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gprof-parent</artifactId> <groupId>org.eclipse.linuxtools.gprof</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gprof.test</artifactId> diff --git a/gprof/org.eclipse.linuxtools.gprof/.classpath b/gprof/org.eclipse.linuxtools.gprof/.classpath index 43b986286..1db08c6b4 100644 --- a/gprof/org.eclipse.linuxtools.gprof/.classpath +++ b/gprof/org.eclipse.linuxtools.gprof/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/gprof/org.eclipse.linuxtools.gprof/.settings/org.eclipse.jdt.core.prefs b/gprof/org.eclipse.linuxtools.gprof/.settings/org.eclipse.jdt.core.prefs index e8b51e59e..7d0d95828 100644 --- a/gprof/org.eclipse.linuxtools.gprof/.settings/org.eclipse.jdt.core.prefs +++ b/gprof/org.eclipse.linuxtools.gprof/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/gprof/org.eclipse.linuxtools.gprof/META-INF/MANIFEST.MF b/gprof/org.eclipse.linuxtools.gprof/META-INF/MANIFEST.MF index f2134e1bb..8f1e5d9ef 100644 --- a/gprof/org.eclipse.linuxtools.gprof/META-INF/MANIFEST.MF +++ b/gprof/org.eclipse.linuxtools.gprof/META-INF/MANIFEST.MF @@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.linuxtools.binutils, org.eclipse.linuxtools.dataviewers.charts Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Export-Package: org.eclipse.linuxtools.internal.gprof.view;x-friends:="org.eclipse.linuxtools.gprof.launch" diff --git a/gprof/org.eclipse.linuxtools.gprof/pom.xml b/gprof/org.eclipse.linuxtools.gprof/pom.xml index b4b568653..bb49df6b0 100644 --- a/gprof/org.eclipse.linuxtools.gprof/pom.xml +++ b/gprof/org.eclipse.linuxtools.gprof/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-gprof-parent</artifactId> <groupId>org.eclipse.linuxtools.gprof</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.gprof</artifactId> diff --git a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/Activator.java b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/Activator.java index 37975809d..0a77d9efe 100644 --- a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/Activator.java +++ b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/Activator.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.internal.gprof; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -56,6 +57,6 @@ public class Activator extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } } diff --git a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/parser/GmonDecoder.java b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/parser/GmonDecoder.java index b63115eae..10145a130 100644 --- a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/parser/GmonDecoder.java +++ b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/parser/GmonDecoder.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 STMicroelectronics and others. + * Copyright (c) 2009, 2019 STMicroelectronics and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -24,10 +24,10 @@ import java.text.DateFormat; import java.util.Date; import java.util.HashMap; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.Platform; import org.eclipse.linuxtools.binutils.utils.STSymbolManager; import org.eclipse.linuxtools.internal.gprof.Messages; import org.eclipse.linuxtools.internal.gprof.utils.LEDataInputStream; @@ -87,15 +87,20 @@ public class GmonDecoder { this.ps = ps; this.project = project; program.getBinaryParser().getFormat(); + IAddressFactory factory = program.getAddressFactory(); + int addrSize = 4; + if (factory != null) { + addrSize = factory.getMax().getSize(); + } String cpu = program.getCPU(); - if (Platform.ARCH_X86_64.equals(cpu) || "amd64".equals(cpu) || "aarch64".equals(cpu) || "ppc64".equals(cpu)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - histo = new HistogramDecoder64(this); - callGraph = new CallGraphDecoder64(this); - _32_bit_platform = false; + if (addrSize > 4 || cpu.endsWith("64")) { //$NON-NLS-1$ + histo = new HistogramDecoder64(this); + callGraph = new CallGraphDecoder64(this); + _32_bit_platform = false; } else { - _32_bit_platform = true; - histo = new HistogramDecoder(this); - callGraph = new CallGraphDecoder(this); + _32_bit_platform = true; + histo = new HistogramDecoder(this); + callGraph = new CallGraphDecoder(this); } } diff --git a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/view/GmonView.java b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/view/GmonView.java index ba412fa65..c1b33319c 100644 --- a/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/view/GmonView.java +++ b/gprof/org.eclipse.linuxtools.gprof/src/org/eclipse/linuxtools/internal/gprof/view/GmonView.java @@ -132,7 +132,7 @@ public class GmonView extends AbstractSTDataView { manager.add(new Separator()); manager.add(switchSampleTime); manager.add(new Separator()); - manager.add(new ChartAction(getViewSite().getShell(), getSTViewer())); + manager.add(new ChartAction(getViewSite().getShell(), getSTViewer())); } @Override diff --git a/gprof/pom.xml b/gprof/pom.xml index f60c2fc5d..43f44c228 100644 --- a/gprof/pom.xml +++ b/gprof/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.gprof</groupId> diff --git a/javadocs/org.eclipse.linuxtools.javadocs-feature/feature.xml b/javadocs/org.eclipse.linuxtools.javadocs-feature/feature.xml index 7504bc4c3..69d7cac9a 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs-feature/feature.xml +++ b/javadocs/org.eclipse.linuxtools.javadocs-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.javadocs.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" license-feature="org.eclipse.license" license-feature-version="0.0.0" provider-name="%provider"> diff --git a/javadocs/org.eclipse.linuxtools.javadocs-feature/pom.xml b/javadocs/org.eclipse.linuxtools.javadocs-feature/pom.xml index c0e9a8966..01695df77 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs-feature/pom.xml +++ b/javadocs/org.eclipse.linuxtools.javadocs-feature/pom.xml @@ -15,13 +15,13 @@ <parent> <artifactId>linuxtools-javadocs-parent</artifactId> <groupId>org.eclipse.linuxtools.javadocs</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.javadocs.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> <name>Linux Tools Javadocs Feature</name> + <version>8.1.0-SNAPSHOT</version> <build> <plugins> diff --git a/javadocs/org.eclipse.linuxtools.javadocs.tests/.classpath b/javadocs/org.eclipse.linuxtools.javadocs.tests/.classpath index 43b986286..a621c21ac 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs.tests/.classpath +++ b/javadocs/org.eclipse.linuxtools.javadocs.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/javadocs/org.eclipse.linuxtools.javadocs.tests/.settings/org.eclipse.jdt.core.prefs b/javadocs/org.eclipse.linuxtools.javadocs.tests/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs.tests/.settings/org.eclipse.jdt.core.prefs +++ b/javadocs/org.eclipse.linuxtools.javadocs.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/javadocs/org.eclipse.linuxtools.javadocs.tests/META-INF/MANIFEST.MF b/javadocs/org.eclipse.linuxtools.javadocs.tests/META-INF/MANIFEST.MF index 5f19a50eb..37cc962f3 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs.tests/META-INF/MANIFEST.MF +++ b/javadocs/org.eclipse.linuxtools.javadocs.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Javadocs Plug-in Tests Bundle-SymbolicName: org.eclipse.linuxtools.javadocs.tests Bundle-Version: 1.0.0.qualifier Fragment-Host: org.eclipse.linuxtools.javadocs -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit;bundle-version="4.11.0", org.eclipse.core.resources;bundle-version="3.9.1" Automatic-Module-Name: org.eclipse.linuxtools.javadocs.tests diff --git a/javadocs/org.eclipse.linuxtools.javadocs.tests/pom.xml b/javadocs/org.eclipse.linuxtools.javadocs.tests/pom.xml index 3091e22b4..c9d9a01a7 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs.tests/pom.xml +++ b/javadocs/org.eclipse.linuxtools.javadocs.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-javadocs-parent</artifactId> <groupId>org.eclipse.linuxtools.javadocs</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.javadocs.tests</artifactId> diff --git a/javadocs/org.eclipse.linuxtools.javadocs/.classpath b/javadocs/org.eclipse.linuxtools.javadocs/.classpath index 43b986286..1db08c6b4 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs/.classpath +++ b/javadocs/org.eclipse.linuxtools.javadocs/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/javadocs/org.eclipse.linuxtools.javadocs/.settings/org.eclipse.jdt.core.prefs b/javadocs/org.eclipse.linuxtools.javadocs/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs/.settings/org.eclipse.jdt.core.prefs +++ b/javadocs/org.eclipse.linuxtools.javadocs/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/javadocs/org.eclipse.linuxtools.javadocs/META-INF/MANIFEST.MF b/javadocs/org.eclipse.linuxtools.javadocs/META-INF/MANIFEST.MF index c27c648c7..cd1c57284 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs/META-INF/MANIFEST.MF +++ b/javadocs/org.eclipse.linuxtools.javadocs/META-INF/MANIFEST.MF @@ -9,6 +9,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.help;bundle-version="3.6.0", org.eclipse.core.filesystem;bundle-version="1.4.100" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Automatic-Module-Name: org.eclipse.linuxtools.javadocs diff --git a/javadocs/org.eclipse.linuxtools.javadocs/pom.xml b/javadocs/org.eclipse.linuxtools.javadocs/pom.xml index 8f3753fda..4b19ba14a 100644 --- a/javadocs/org.eclipse.linuxtools.javadocs/pom.xml +++ b/javadocs/org.eclipse.linuxtools.javadocs/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-javadocs-parent</artifactId> <groupId>org.eclipse.linuxtools.javadocs</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.javadocs</artifactId> diff --git a/javadocs/pom.xml b/javadocs/pom.xml index d11a6d9ca..f06455e26 100644 --- a/javadocs/pom.xml +++ b/javadocs/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.javadocs</groupId> diff --git a/man/org.eclipse.linuxtools.man-feature/feature.xml b/man/org.eclipse.linuxtools.man-feature/feature.xml index 27c5486dc..e946d1b67 100644 --- a/man/org.eclipse.linuxtools.man-feature/feature.xml +++ b/man/org.eclipse.linuxtools.man-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.man" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%provider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/man/org.eclipse.linuxtools.man-feature/pom.xml b/man/org.eclipse.linuxtools.man-feature/pom.xml index 433cb3171..1bcad84bf 100644 --- a/man/org.eclipse.linuxtools.man-feature/pom.xml +++ b/man/org.eclipse.linuxtools.man-feature/pom.xml @@ -20,12 +20,12 @@ <parent> <groupId>org.eclipse.linuxtools.man</groupId> <artifactId>linuxtools-man-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.man</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Man Feature (Incubation)</name> diff --git a/man/org.eclipse.linuxtools.man.core/.classpath b/man/org.eclipse.linuxtools.man.core/.classpath index 43b986286..1db08c6b4 100644 --- a/man/org.eclipse.linuxtools.man.core/.classpath +++ b/man/org.eclipse.linuxtools.man.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/man/org.eclipse.linuxtools.man.core/.settings/org.eclipse.jdt.core.prefs b/man/org.eclipse.linuxtools.man.core/.settings/org.eclipse.jdt.core.prefs index 8d6cd3c2f..739a5fd96 100644 --- a/man/org.eclipse.linuxtools.man.core/.settings/org.eclipse.jdt.core.prefs +++ b/man/org.eclipse.linuxtools.man.core/.settings/org.eclipse.jdt.core.prefs @@ -17,9 +17,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -34,6 +34,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -89,6 +90,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -120,23 +122,28 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 @@ -212,11 +219,12 @@ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert @@ -246,6 +254,8 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=inser org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert @@ -269,12 +279,16 @@ org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert @@ -320,6 +334,8 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do n org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert @@ -355,8 +371,11 @@ org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not inser org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert @@ -381,4 +400,8 @@ org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=tab org.eclipse.jdt.core.formatter.tabulation.size=4 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true diff --git a/man/org.eclipse.linuxtools.man.core/META-INF/MANIFEST.MF b/man/org.eclipse.linuxtools.man.core/META-INF/MANIFEST.MF index 5950bc7c2..9f79c6e70 100644 --- a/man/org.eclipse.linuxtools.man.core/META-INF/MANIFEST.MF +++ b/man/org.eclipse.linuxtools.man.core/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.jface.text, com.jcraft.jsch -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Export-Package: org.eclipse.linuxtools.internal.man.parser;x-friends:="org.eclipse.linuxtools.man.help", org.eclipse.linuxtools.man.parser, org.eclipse.linuxtools.man.views diff --git a/man/org.eclipse.linuxtools.man.core/pom.xml b/man/org.eclipse.linuxtools.man.core/pom.xml index 5e4f2e5fd..d824c415b 100644 --- a/man/org.eclipse.linuxtools.man.core/pom.xml +++ b/man/org.eclipse.linuxtools.man.core/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.man</groupId> <artifactId>linuxtools-man-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.man.core</artifactId> diff --git a/man/org.eclipse.linuxtools.man.help/.classpath b/man/org.eclipse.linuxtools.man.help/.classpath index 43b986286..1db08c6b4 100644 --- a/man/org.eclipse.linuxtools.man.help/.classpath +++ b/man/org.eclipse.linuxtools.man.help/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.core.prefs b/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.core.prefs index dd535f881..3b27d2a18 100644 --- a/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.core.prefs +++ b/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.core.prefs @@ -16,9 +16,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -33,6 +33,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -88,6 +89,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -119,23 +121,28 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 @@ -211,11 +218,12 @@ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert @@ -245,6 +253,8 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=inser org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert @@ -268,12 +278,16 @@ org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert @@ -319,6 +333,8 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do n org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert @@ -354,8 +370,11 @@ org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not inser org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert @@ -380,4 +399,8 @@ org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=tab org.eclipse.jdt.core.formatter.tabulation.size=4 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true diff --git a/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.ui.prefs b/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.ui.prefs index c43046c52..1080c8321 100644 --- a/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.ui.prefs +++ b/man/org.eclipse.linuxtools.man.help/.settings/org.eclipse.jdt.ui.prefs @@ -1,4 +1,3 @@ -#Wed Dec 09 21:56:11 EET 2009 eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile @@ -14,33 +13,46 @@ sp_cleanup.add_missing_deprecated_annotations=true sp_cleanup.add_missing_methods=false sp_cleanup.add_missing_nls_tags=false sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true sp_cleanup.add_serial_version_id=false sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false sp_cleanup.make_local_variable_final=false sp_cleanup.make_parameters_final=false sp_cleanup.make_private_fields_final=true sp_cleanup.make_type_abstract_if_missing_method=false sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.objects_equals=false sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true sp_cleanup.remove_trailing_whitespaces=false sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=true sp_cleanup.remove_unused_imports=true @@ -49,12 +61,19 @@ sp_cleanup.remove_unused_private_fields=true sp_cleanup.remove_unused_private_members=false sp_cleanup.remove_unused_private_methods=true sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=true +sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/man/org.eclipse.linuxtools.man.help/META-INF/MANIFEST.MF b/man/org.eclipse.linuxtools.man.help/META-INF/MANIFEST.MF index 50d6d8589..6a4172495 100644 --- a/man/org.eclipse.linuxtools.man.help/META-INF/MANIFEST.MF +++ b/man/org.eclipse.linuxtools.man.help/META-INF/MANIFEST.MF @@ -7,6 +7,6 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.help, org.eclipse.help.base, org.eclipse.linuxtools.man.core;bundle-version="1.3.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %Bundle-Vendor Automatic-Module-Name: org.eclipse.linuxtools.man.help diff --git a/man/org.eclipse.linuxtools.man.help/pom.xml b/man/org.eclipse.linuxtools.man.help/pom.xml index 46eb6a1ff..2bc4a9d66 100644 --- a/man/org.eclipse.linuxtools.man.help/pom.xml +++ b/man/org.eclipse.linuxtools.man.help/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.man</groupId> <artifactId>linuxtools-man-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.man.help</artifactId> diff --git a/man/org.eclipse.linuxtools.man.help/src/org/eclipse/linuxtools/internal/man/help/ManualToc.java b/man/org.eclipse.linuxtools.man.help/src/org/eclipse/linuxtools/internal/man/help/ManualToc.java index eb858784c..02f9c66b0 100644 --- a/man/org.eclipse.linuxtools.man.help/src/org/eclipse/linuxtools/internal/man/help/ManualToc.java +++ b/man/org.eclipse.linuxtools.man.help/src/org/eclipse/linuxtools/internal/man/help/ManualToc.java @@ -57,7 +57,7 @@ public class ManualToc implements IToc { private void generateSections() { // Filter to make sure we only get manual section directories - DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() { + DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<>() { private final Pattern p = Pattern.compile("^man\\d[xp]?"); //$NON-NLS-1$ @Override diff --git a/man/pom.xml b/man/pom.xml index 717ad8f0b..abb683048 100644 --- a/man/pom.xml +++ b/man/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.man</groupId> diff --git a/oprofile/eclipse-oprofile.metainfo.xml b/oprofile/eclipse-oprofile.metainfo.xml deleted file mode 100644 index 240d8ffab..000000000 --- a/oprofile/eclipse-oprofile.metainfo.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2015, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<component type="addon"> - <id>eclipse-oprofile</id> - <metadata_license>CC-BY-SA-3.0</metadata_license> - <project_license>EPL-2.0</project_license> - <extends>eclipse.desktop</extends> - <name>Oprofile</name> - <summary>Linux Tools Eclipse plug-ins for Oprofile profiling tool</summary> - <url type="homepage">http://www.eclipse.org/linuxtools/projectPages/oprofile/</url> - <updatecontact>rgrunber@redhat.com</updatecontact> -</component> diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile-feature/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/.project b/oprofile/org.eclipse.linuxtools.oprofile-feature/.project deleted file mode 100644 index e08eda091..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/.project +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile-feature</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.pde.FeatureBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.FeatureNature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.properties b/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.properties deleted file mode 100644 index ffb7ca0fe..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.properties +++ /dev/null @@ -1,16 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2008 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat, Inc. - initial API and implementation -#******************************************************************************** -featureName=OProfile Integration -description=Plugins to bring OProfile-based profiling into the workbench. -provider=Eclipse Linux Tools -copyright=Copyright 2008, 2010 Red Hat, Inc. diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.xml b/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.xml deleted file mode 100644 index 58f227492..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/feature.xml +++ /dev/null @@ -1,73 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<feature - id="org.eclipse.linuxtools.oprofile.feature" - label="%featureName" - version="7.4.0.qualifier" - provider-name="%provider" - os="linux" - license-feature="org.eclipse.license" - license-feature-version="0.0.0"> - - <description> - %description - </description> - - <copyright> - %copyright - </copyright> - - <license url="%licenseURL"> - %license - </license> - - <url> - <update label="Linux Tools Update Site" url="http://download.eclipse.org/linuxtools/update"/> - </url> - - <requires> - <import plugin="org.eclipse.core.runtime" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.ui" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.cdt.core"/> - <import plugin="org.eclipse.cdt.debug.core"/> - <import plugin="org.eclipse.cdt.launch"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.debug.core"/> - <import plugin="org.eclipse.debug.ui"/> - <import plugin="org.eclipse.linuxtools.profiling.launch"/> - <import plugin="org.eclipse.ui.ide"/> - <import plugin="org.eclipse.jface.text"/> - <import plugin="org.eclipse.linuxtools.profiling.ui"/> - <import feature="org.eclipse.linuxtools.profiling" version="0.1.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.ui.editors" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.linuxtools.oprofile.core" version="0.1.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.help"/> - </requires> - - <plugin - id="org.eclipse.linuxtools.oprofile.core" - download-size="0" - install-size="0" - version="0.0.0"/> - - <plugin - id="org.eclipse.linuxtools.oprofile.launch" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - - <plugin - id="org.eclipse.linuxtools.oprofile.ui" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - - <plugin - id="org.eclipse.linuxtools.oprofile.doc" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - -</feature> diff --git a/oprofile/org.eclipse.linuxtools.oprofile-feature/p2.inf b/oprofile/org.eclipse.linuxtools.oprofile-feature/p2.inf deleted file mode 100644 index 193bce9e3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile-feature/p2.inf +++ /dev/null @@ -1,3 +0,0 @@ -instructions.configure=\ -org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/linuxtools/update,type:0,name:Linux Tools,enabled:false); \ -org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/linuxtools/update,type:1,name:Linux Tools,enabled:false); diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 0f169a9f1..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,99 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.ui.prefs b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 0debfec81..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,54 +0,0 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=false -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=false -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=false -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 2a444d7b6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.core.tests -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: %bundleProvider -Require-Bundle: org.junit;bundle-version="4.10.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ActivationPolicy: lazy -Fragment-Host: org.eclipse.linuxtools.oprofile.core -Import-Package: org.eclipse.linuxtools.oprofile.tests -Bundle-Localization: plugin -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.core.tests diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/about.html b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/build.properties deleted file mode 100644 index 4b2537481..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - resources/,\ - plugin.properties -src.includes = resources/,\ - about.html -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/plugin.properties deleted file mode 100644 index dcf5f4f21..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/plugin.properties +++ /dev/null @@ -1,14 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2009, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Kent Sebastian <ksebasti@redhat.com> - initial API and implementation -#******************************************************************************* -bundleName=OProfile Core Tests Plug-in -bundleProvider=Eclipse Linux Tools diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/pom.xml deleted file mode 100644 index b79664b20..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.core.tests</artifactId> - <version>1.0.0-SNAPSHOT</version> - <packaging>eclipse-test-plugin</packaging> - - <name>Linux Tools OProfile Core Tests Plug-in</name> - - <build> - <plugins> - <plugin> - <groupId>org.eclipse.tycho</groupId> - <artifactId>tycho-surefire-plugin</artifactId> - <version>${tycho-version}</version> - <configuration> - <useUIHarness>true</useUIHarness> - <useUIThread>false</useUIThread> - <product>org.eclipse.platform.ide</product> - <testSuite>org.eclipse.linuxtools.oprofile.core.tests</testSuite> - <testClass>org.eclipse.linuxtools.oprofile.core.tests.AllCoreTests</testClass> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/0/event b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/0/event deleted file mode 100644 index 573541ac9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/0/event +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/1/event b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/1/event deleted file mode 100644 index 573541ac9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/1/event +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/cpu_type b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/cpu_type deleted file mode 100644 index 5b6464f50..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/dev/oprofile/cpu_type +++ /dev/null @@ -1 +0,0 @@ -i386/arch_perfmon diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_counter.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_counter.xml deleted file mode 100644 index 0d95acc0f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_counter.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<check-events> - <result>invalid-counter</result> -</check-events> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_umask.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_umask.xml deleted file mode 100644 index 126fd38be..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_invalid_umask.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<check-events> - <result>invalid-um</result> -</check-events> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_ok.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_ok.xml deleted file mode 100644 index 7f6c9a9f8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_check-event_ok.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<check-events> - <result>ok</result> -</check-events> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info.xml deleted file mode 100644 index 022a5d979..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info.xml +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<info> - <num-counters>2</num-counters> - <cpu-frequency>800</cpu-frequency> - <defaults> - <sample-dir>/var/lib/oprofile/samples/</sample-dir> - <lock-file>/var/lib/oprofile/lock</lock-file> - <log-file>/var/lib/oprofile/samples/oprofiled.log</log-file> - <dump-status>/var/lib/oprofile/complete_dump</dump-status> - </defaults> - <timer-mode>true</timer-mode> - <event-list counter="0"> - <event> - <name>CPU_CLK_UNHALTED</name> - <description>Clock cycles when not halted</description> - <value>60</value> - <minimum>6000</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>Unhalted core cycles</description> - </mask> - <mask> - <value>1</value> - <description>Unhalted bus cycles</description> - </mask> - <mask> - <value>2</value> - <description>Unhalted bus cycles of this core while the other core is halted</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_RETIRED_ANY_P</name> - <description>number of instructions retired</description> - <value>192</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>DTLB_MISSES</name> - <description>DTLB miss events</description> - <value>8</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ANY Memory accesses that missed the DTLB.</description> - </mask> - <mask> - <value>2</value> - <description>MISS_LD DTLB misses due to load operations.</description> - </mask> - <mask> - <value>4</value> - <description>L0_MISS_LD L0 DTLB misses due to load operations.</description> - </mask> - <mask> - <value>8</value> - <description>MISS_ST TLB misses due to store operations.</description> - </mask> - </unit-mask> - </event> - </event-list> - <event-list counter="1"> - <event> - <name>L2_M_LINES_IN</name> - <description>number of modified lines allocated in L2</description> - <value>37</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LINES_OUT</name> - <description>number of recovered lines from L2</description> - <value>38</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>EIST_TRANS_ALL</name> - <description>Intel(tm) Enhanced SpeedStep(r) Technology transitions</description> - <value>58</value> - <minimum>500</minimum> - <unit-mask> - <type>notavalidtype</type> - <default>1</default> - <mask> - <value>1</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - </event-list> -</info> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_0ctrs.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_0ctrs.xml deleted file mode 100644 index c7dac5069..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_0ctrs.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<info> - <num-counters>error</num-counters> -</info> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_expected.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_expected.xml deleted file mode 100644 index 7003f9796..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_expected.xml +++ /dev/null @@ -1,5048 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<info> - <num-counters>2</num-counters> - <cpu-frequency>1995</cpu-frequency> - <defaults> - <sample-dir>/var/lib/oprofile/samples/</sample-dir> - <lock-file>/var/lib/oprofile/lock</lock-file> - <log-file>/var/lib/oprofile/samples/oprofiled.log</log-file> - <dump-status>/var/lib/oprofile/complete_dump</dump-status> - </defaults> - <timer-mode>false</timer-mode> - <event-list counter="0"> - <event> - <name>CPU_CLK_UNHALTED</name> - <description>Clock cycles when not halted</description> - <value>60</value> - <minimum>6000</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>Unhalted core cycles</description> - </mask> - <mask> - <value>1</value> - <description>Unhalted bus cycles</description> - </mask> - <mask> - <value>2</value> - <description>Unhalted bus cycles of this core while the other core is halted</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_RETIRED_ANY_P</name> - <description>number of instructions retired</description> - <value>192</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_RQSTS</name> - <description>number of L2 cache requests</description> - <value>46</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>LLC_MISSES</name> - <description>L2 cache demand requests from this core that missed the L2</description> - <value>46</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>65</default> - <mask> - <value>65</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>LLC_REFS</name> - <description>L2 cache demand requests from this core</description> - <value>46</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>79</default> - <mask> - <value>79</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>LOAD_BLOCK</name> - <description>events pertaining to loads</description> - <value>3</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>62</default> - <mask> - <value>2</value> - <description>STA Loads blocked by a preceding store with unknown address.</description> - </mask> - <mask> - <value>4</value> - <description>STD Loads blocked by a preceding store with unknown data.</description> - </mask> - <mask> - <value>8</value> - <description>OVERLAP_STORE Loads that partially overlap an earlier store, or 4K aliased with a previous store.</description> - </mask> - <mask> - <value>16</value> - <description>UNTIL_RETIRE Loads blocked until retirement.</description> - </mask> - <mask> - <value>32</value> - <description>L1D Loads blocked by the L1 data cache.</description> - </mask> - </unit-mask> - </event> - <event> - <name>STORE_BLOCK</name> - <description>events pertaining to stores</description> - <value>4</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>11</default> - <mask> - <value>1</value> - <description>SB_DRAIN_CYCLES Cycles while stores are blocked due to store buffer drain.</description> - </mask> - <mask> - <value>2</value> - <description>ORDER Cycles while store is waiting for a preceding store to be globally observed.</description> - </mask> - <mask> - <value>8</value> - <description>NOOP A store is blocked due to a conflict with an external or internal snoop.</description> - </mask> - </unit-mask> - </event> - <event> - <name>MISALIGN_MEM_REF</name> - <description>number of misaligned data memory references</description> - <value>5</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEGMENT_REG_LOADS</name> - <description>number of segment register loads</description> - <value>6</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SSE_PRE_EXEC</name> - <description>number of SSE pre-fetch/weakly ordered insns retired</description> - <value>7</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>prefetch NTA instructions executed.</description> - </mask> - <mask> - <value>1</value> - <description>prefetch T1 instructions executed.</description> - </mask> - <mask> - <value>2</value> - <description>prefetch T1 and T2 instructions executed.</description> - </mask> - <mask> - <value>3</value> - <description>SSE weakly-ordered stores</description> - </mask> - </unit-mask> - </event> - <event> - <name>DTLB_MISSES</name> - <description>DTLB miss events</description> - <value>8</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ANY Memory accesses that missed the DTLB.</description> - </mask> - <mask> - <value>2</value> - <description>MISS_LD DTLB misses due to load operations.</description> - </mask> - <mask> - <value>4</value> - <description>L0_MISS_LD L0 DTLB misses due to load operations.</description> - </mask> - <mask> - <value>8</value> - <description>MISS_ST TLB misses due to store operations.</description> - </mask> - </unit-mask> - </event> - <event> - <name>MEMORY_DISAMBIGUATION</name> - <description>Memory disambiguation reset cycles.</description> - <value>9</value> - <minimum>1000</minimum> - <unit-mask> - <type>exclusive</type> - <default>1</default> - <mask> - <value>1</value> - <description>RESET Memory disambiguation reset cycles.</description> - </mask> - <mask> - <value>2</value> - <description>SUCCESS Number of loads that were successfully disambiguated.</description> - </mask> - </unit-mask> - </event> - <event> - <name>PAGE_WALKS</name> - <description>Page table walk events</description> - <value>12</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>2</default> - <mask> - <value>1</value> - <description>COUNT Number of page-walks executed.</description> - </mask> - <mask> - <value>2</value> - <description>CYCLES Duration of page-walks in core cycles.</description> - </mask> - </unit-mask> - </event> - <event> - <name>FLOPS</name> - <description>number of FP computational micro-ops executed</description> - <value>16</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>FP_ASSIST</name> - <description>number of FP assists</description> - <value>17</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>MUL</name> - <description>number of multiplies</description> - <value>18</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>DIV</name> - <description>number of divides</description> - <value>19</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>CYCLES_DIV_BUSY</name> - <description>cycles divider is busy</description> - <value>20</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>IDLE_DURING_DIV</name> - <description>cycles divider is busy and all other execution units are idle.</description> - <value>24</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>DELAYED_BYPASS</name> - <description>Delayed bypass events</description> - <value>25</value> - <minimum>1000</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>FP Delayed bypass to FP operation.</description> - </mask> - <mask> - <value>1</value> - <description>SIMD Delayed bypass to SIMD operation.</description> - </mask> - <mask> - <value>2</value> - <description>LOAD Delayed bypass to load operation.</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_ADS</name> - <description>Cycles the L2 address bus is in use.</description> - <value>33</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_DBUS_BUSY_RD</name> - <description>Cycles the L2 transfers data to the core.</description> - <value>35</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LINES_IN</name> - <description>number of allocated lines in L2</description> - <value>36</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_M_LINES_IN</name> - <description>number of modified lines allocated in L2</description> - <value>37</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LINES_OUT</name> - <description>number of recovered lines from L2</description> - <value>38</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_M_LINES_OUT</name> - <description>number of modified lines removed from L2</description> - <value>39</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_IFETCH</name> - <description>number of L2 cacheable instruction fetches</description> - <value>40</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LD</name> - <description>number of L2 data loads</description> - <value>41</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_ST</name> - <description>number of L2 data stores</description> - <value>42</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LOCK</name> - <description>number of locked L2 data accesses</description> - <value>43</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_REJECT_BUSQ</name> - <description>Rejected L2 cache requests</description> - <value>48</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_NO_REQ</name> - <description>Cycles no L2 cache requests are pending</description> - <value>50</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>EIST_TRANS_ALL</name> - <description>Intel(tm) Enhanced SpeedStep(r) Technology transitions</description> - <value>58</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>THERMAL_TRIP</name> - <description>Number of thermal trips</description> - <value>59</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>192</default> - <mask> - <value>192</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LD</name> - <description>L1 cacheable data read operations</description> - <value>64</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_ST</name> - <description>L1 cacheable data write operations</description> - <value>65</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LOCK</name> - <description>L1 cacheable lock read operations</description> - <value>66</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LOCK_DURATION</name> - <description>Duration of L1 data cacheable locked operations</description> - <value>66</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_ALL_REF</name> - <description>All references to the L1 data cache</description> - <value>67</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_ALL_CACHE_REF</name> - <description>L1 data cacheable reads and writes</description> - <value>67</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>2</default> - <mask> - <value>2</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_REPL</name> - <description>Cache lines allocated in the L1 data cache</description> - <value>69</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>15</default> - <mask> - <value>15</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_M_REPL</name> - <description>Modified cache lines allocated in the L1 data cache</description> - <value>70</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_M_EVICT</name> - <description>Modified cache lines evicted from the L1 data cache</description> - <value>71</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_PEND_MISS</name> - <description>Total number of outstanding L1 data cache misses at any cycle</description> - <value>72</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_SPLIT</name> - <description>Cache line split load/stores</description> - <value>73</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>1</default> - <mask> - <value>1</value> - <description>split loads</description> - </mask> - <mask> - <value>2</value> - <description>split stores</description> - </mask> - </unit-mask> - </event> - <event> - <name>SSE_PREF_MISS</name> - <description>SSE instructions that missed all caches</description> - <value>75</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>PREFETCHNTA</description> - </mask> - <mask> - <value>1</value> - <description>PREFETCHT0</description> - </mask> - <mask> - <value>2</value> - <description>PREFETCHT1/PREFETCHT2</description> - </mask> - </unit-mask> - </event> - <event> - <name>LOAD_HIT_PRE</name> - <description>Load operations conflicting with a software prefetch to the same address</description> - <value>76</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_PREFETCH</name> - <description>L1 data cache prefetch requests</description> - <value>78</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_REQ_OUTSTANDING</name> - <description>Outstanding cacheable data read bus requests duration</description> - <value>96</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_BNR_DRV</name> - <description>Number of Bus Not Ready signals asserted</description> - <value>97</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_DRDY_CLOCKS</name> - <description>Bus cycles when data is sent on the bus</description> - <value>98</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_LOCK_CLOCKS</name> - <description>Bus cycles when a LOCK signal is asserted</description> - <value>99</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_DATA_RCV</name> - <description>Bus cycles while processor receives data</description> - <value>100</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_BRD</name> - <description>Burst read bus transactions</description> - <value>101</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_RFO</name> - <description>number of completed read for ownership transactions</description> - <value>102</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_WB</name> - <description>number of explicit writeback bus transactions</description> - <value>103</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_IFETCH</name> - <description>number of instruction fetch transactions</description> - <value>104</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_INVAL</name> - <description>number of invalidate transactions</description> - <value>105</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_PWR</name> - <description>number of partial write bus transactions</description> - <value>106</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_P</name> - <description>number of partial bus transactions</description> - <value>107</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_IO</name> - <description>number of I/O bus transactions</description> - <value>108</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_DEF</name> - <description>number of completed defer transactions</description> - <value>109</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_BURST</name> - <description>number of completed burst transactions</description> - <value>110</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_MEM</name> - <description>number of completed memory transactions</description> - <value>111</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_ANY</name> - <description>number of any completed bus transactions</description> - <value>112</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>EXT_SNOOP</name> - <description>External snoops</description> - <value>119</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>11</default> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - <mask> - <value>8</value> - <description>snoop: HITM snoops</description> - </mask> - <mask> - <value>2</value> - <description>snoop: HIT snoops</description> - </mask> - <mask> - <value>1</value> - <description>snoop: CLEAN snoops</description> - </mask> - </unit-mask> - </event> - <event> - <name>CMP_SNOOP</name> - <description>L1 data cache is snooped by other core</description> - <value>120</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>1</value> - <description>snoop: CMP2I snoops</description> - </mask> - <mask> - <value>2</value> - <description>snoop: CMP2S snoops</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_HIT_DRV</name> - <description>HIT signal asserted</description> - <value>122</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_HITM_DRV</name> - <description>HITM signal asserted</description> - <value>123</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUSQ_EMPTY</name> - <description>Bus queue is empty</description> - <value>125</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>SNOOP_STALL_DRV</name> - <description>Bus stalled for snoops</description> - <value>126</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_IO_WAIT</name> - <description>IO requests waiting in the bus queue</description> - <value>127</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1I_READS</name> - <description>number of instruction fetches</description> - <value>128</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1I_MISSES</name> - <description>number of instruction fetch misses</description> - <value>129</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>ITLB</name> - <description>number of ITLB misses</description> - <value>130</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>18</default> - <mask> - <value>2</value> - <description>ITLB small page misses</description> - </mask> - <mask> - <value>16</value> - <description>ITLB large page misses</description> - </mask> - <mask> - <value>64</value> - <description>ITLB flushes</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_QUEUE_FULL</name> - <description>cycles during which the instruction queue is full</description> - <value>131</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>2</default> - <mask> - <value>2</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>IFU_MEM_STALL</name> - <description>cycles instruction fetch pipe is stalled</description> - <value>134</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>ILD_STALL</name> - <description>cycles instruction length decoder is stalled</description> - <value>135</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_EXEC</name> - <description>Branch instructions executed (not necessarily retired)</description> - <value>136</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at execution</description> - <value>137</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_BAC_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at Front End (BAC)</description> - <value>138</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CND_EXEC</name> - <description>Conditional Branch instructions executed</description> - <value>139</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CND_MISSP_EXEC</name> - <description>Conditional Branch instructions executed that were mispredicted</description> - <value>140</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_EXEC</name> - <description>Indirect Branch instructions executed</description> - <value>141</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_MISSP_EXEC</name> - <description>Indirect Branch instructions executed that were mispredicted</description> - <value>142</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_EXEC</name> - <description>Return Branch instructions executed</description> - <value>143</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_MISSP_EXEC</name> - <description>Return Branch instructions executed that were mispredicted at Execution</description> - <value>144</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_BAC_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at Front End (BAC)</description> - <value>145</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CALL_EXEC</name> - <description>CALL instruction executed</description> - <value>146</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CALL_MISSP_EXEC</name> - <description>CALL instruction executed and miss predicted</description> - <value>147</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_CALL_EXEC</name> - <description>Indirect CALL instruction executed</description> - <value>148</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_TKN_BUBBLE_1</name> - <description>Branch predicted taken with bubble 1</description> - <value>151</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_TKN_BUBBLE_2</name> - <description>Branch predicted taken with bubble 2</description> - <value>152</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RS_UOPS_DISPATCHED</name> - <description>Micro-ops dispatched for execution</description> - <value>160</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RS_UOPS_DISPATCHED_NONE</name> - <description>No Micro-ops dispatched for execution</description> - <value>25165984</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>MACRO_INSTS</name> - <description>instructions decoded</description> - <value>170</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>9</default> - <mask> - <value>1</value> - <description>Instructions decoded</description> - </mask> - <mask> - <value>8</value> - <description>CISC Instructions decoded</description> - </mask> - </unit-mask> - </event> - <event> - <name>ESP</name> - <description>ESP register events</description> - <value>171</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>1</default> - <mask> - <value>1</value> - <description>ESP register content synchronizations</description> - </mask> - <mask> - <value>2</value> - <description>ESP register automatic additions</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_UOPS_EXEC</name> - <description>SIMD micro-ops executed (excluding stores)</description> - <value>176</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_SAT_UOP_EXEC</name> - <description>number of SIMD saturating instructions executed</description> - <value>177</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_UOP_TYPE_EXEC</name> - <description>number of SIMD packing instructions</description> - <value>179</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>63</default> - <mask> - <value>1</value> - <description>SIMD packed multiplies</description> - </mask> - <mask> - <value>2</value> - <description>SIMD packed shifts</description> - </mask> - <mask> - <value>4</value> - <description>SIMD pack operations</description> - </mask> - <mask> - <value>8</value> - <description>SIMD unpack operations</description> - </mask> - <mask> - <value>16</value> - <description>SIMD packed logical</description> - </mask> - <mask> - <value>32</value> - <description>SIMD packed arithmetic</description> - </mask> - <mask> - <value>63</value> - <description>all of the above</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_RETIRED</name> - <description>number of instructions retired</description> - <value>192</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>0</default> - <mask> - <value>0</value> - <description>Any</description> - </mask> - <mask> - <value>1</value> - <description>Loads</description> - </mask> - <mask> - <value>2</value> - <description>Stores</description> - </mask> - <mask> - <value>4</value> - <description>Other</description> - </mask> - </unit-mask> - </event> - <event> - <name>X87_OPS_RETIRED</name> - <description>number of computational FP operations retired</description> - <value>193</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>254</default> - <mask> - <value>1</value> - <description>FXCH instructions retired</description> - </mask> - <mask> - <value>254</value> - <description>Retired floating-point computational operations (precise)</description> - </mask> - </unit-mask> - </event> - <event> - <name>UOPS_RETIRED</name> - <description>number of UOPs retired</description> - <value>194</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>Fused load+op or load+indirect branch retired</description> - </mask> - <mask> - <value>2</value> - <description>Fused store address + data retired</description> - </mask> - <mask> - <value>4</value> - <description>Retired instruction pairs fused into one micro-op</description> - </mask> - <mask> - <value>7</value> - <description>Fused micro-ops retired</description> - </mask> - <mask> - <value>8</value> - <description>Non-fused micro-ops retired</description> - </mask> - <mask> - <value>15</value> - <description>Micro-ops retired</description> - </mask> - </unit-mask> - </event> - <event> - <name>MACHINE_NUKES_SMC</name> - <description>number of pipeline flushing events</description> - <value>195</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>5</default> - <mask> - <value>1</value> - <description>Self-Modifying Code detected</description> - </mask> - <mask> - <value>4</value> - <description>Execution pipeline restart due to memory ordering conflict or memory disambiguation misprediction</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_RETIRED</name> - <description>number of branch instructions retired</description> - <value>196</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>10</default> - <mask> - <value>1</value> - <description>predicted not-taken</description> - </mask> - <mask> - <value>2</value> - <description>mispredicted not-taken</description> - </mask> - <mask> - <value>4</value> - <description>predicted taken</description> - </mask> - <mask> - <value>8</value> - <description>mispredicted taken</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_MISS_PRED_RETIRED</name> - <description>number of mispredicted branches retired (precise)</description> - <value>197</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>CYCLES_INT_MASKED</name> - <description>cycles interrupts are disabled</description> - <value>198</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>2</default> - <mask> - <value>1</value> - <description>Interrupts disabled</description> - </mask> - <mask> - <value>2</value> - <description>Interrupts pending and disabled</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_INST_RETIRED</name> - <description>SSE/SSE2 instructions retired</description> - <value>199</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>31</default> - <mask> - <value>1</value> - <description>Retired SSE packed-single instructions</description> - </mask> - <mask> - <value>2</value> - <description>Retired SSE scalar-single instructions</description> - </mask> - <mask> - <value>4</value> - <description>Retired SSE2 packed-double instructions</description> - </mask> - <mask> - <value>8</value> - <description>Retired SSE2 scalar-double instructions</description> - </mask> - <mask> - <value>16</value> - <description>Retired SSE2 vector integer instructions</description> - </mask> - <mask> - <value>31</value> - <description>Retired Streaming SIMD instructions (precise event)</description> - </mask> - </unit-mask> - </event> - <event> - <name>HW_INT_RCV</name> - <description>number of hardware interrupts received</description> - <value>200</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>ITLB_MISS_RETIRED</name> - <description>Retired instructions that missed the ITLB</description> - <value>201</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_COMP_INST_RETIRED</name> - <description>Retired computational SSE/SSE2 instructions</description> - <value>202</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>Retired computational SSE packed-single instructions</description> - </mask> - <mask> - <value>2</value> - <description>Retired computational SSE scalar-single instructions</description> - </mask> - <mask> - <value>4</value> - <description>Retired computational SSE2 packed-double instructions</description> - </mask> - <mask> - <value>8</value> - <description>Retired computational SSE2 scalar-double instructions</description> - </mask> - </unit-mask> - </event> - <event> - <name>MEM_LOAD_RETIRED</name> - <description>Retired loads</description> - <value>203</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>1</default> - <mask> - <value>1</value> - <description>Retired loads that miss the L1 data cache (precise event)</description> - </mask> - <mask> - <value>2</value> - <description>L1 data cache line missed by retired loads (precise event)</description> - </mask> - <mask> - <value>4</value> - <description>Retired loads that miss the L2 cache (precise event)</description> - </mask> - <mask> - <value>8</value> - <description>L2 cache line missed by retired loads (precise event)</description> - </mask> - <mask> - <value>16</value> - <description>Retired loads that miss the DTLB (precise event)</description> - </mask> - </unit-mask> - </event> - <event> - <name>FP_MMX_TRANS</name> - <description>MMX-floating point transitions</description> - <value>204</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>3</default> - <mask> - <value>1</value> - <description>float->MMX transitions</description> - </mask> - <mask> - <value>2</value> - <description>MMX->float transitions</description> - </mask> - </unit-mask> - </event> - <event> - <name>MMX_ASSIST</name> - <description>number of EMMS instructions executed</description> - <value>205</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_INSTR_RET</name> - <description>number of SIMD instructions retired</description> - <value>206</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_SAT_INSTR_RET</name> - <description>number of saturated arithmetic instructions retired</description> - <value>207</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RAT_STALLS</name> - <description>Partial register stall cycles</description> - <value>210</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ROB read port</description> - </mask> - <mask> - <value>2</value> - <description>Partial register</description> - </mask> - <mask> - <value>4</value> - <description>Flag</description> - </mask> - <mask> - <value>8</value> - <description>FPU status word</description> - </mask> - <mask> - <value>15</value> - <description>All RAT</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEG_RENAME_STALLS</name> - <description>Segment rename stalls</description> - <value>212</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ES</description> - </mask> - <mask> - <value>2</value> - <description>DS</description> - </mask> - <mask> - <value>4</value> - <description>FS</description> - </mask> - <mask> - <value>8</value> - <description>GS</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEG_RENAMES</name> - <description>Segment renames</description> - <value>213</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ES</description> - </mask> - <mask> - <value>2</value> - <description>DS</description> - </mask> - <mask> - <value>4</value> - <description>FS</description> - </mask> - <mask> - <value>8</value> - <description>GS</description> - </mask> - </unit-mask> - </event> - <event> - <name>RESOURCE_STALLS</name> - <description>Cycles during which resource stalls occur</description> - <value>220</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>when the ROB is full</description> - </mask> - <mask> - <value>2</value> - <description>during which the RS is full</description> - </mask> - <mask> - <value>4</value> - <description>during which the pipeline has exceeded the load or store limit or is waiting to commit all stores</description> - </mask> - <mask> - <value>8</value> - <description>due to FPU control word write</description> - </mask> - <mask> - <value>16</value> - <description>due to branch misprediction</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_DECODED</name> - <description>number of branch instructions decoded</description> - <value>224</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_BOGUS</name> - <description>number of bogus branches</description> - <value>228</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BACLEARS</name> - <description>number of times BACLEAR is asserted</description> - <value>230</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>PREF_RQSTS_UP</name> - <description>Number of upward prefetches issued</description> - <value>240</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>PREF_RQSTS_DN</name> - <description>Number of downward prefetches issued</description> - <value>248</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - </event-list> - <event-list counter="1"> - <event> - <name>CPU_CLK_UNHALTED</name> - <description>Clock cycles when not halted</description> - <value>60</value> - <minimum>6000</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>Unhalted core cycles</description> - </mask> - <mask> - <value>1</value> - <description>Unhalted bus cycles</description> - </mask> - <mask> - <value>2</value> - <description>Unhalted bus cycles of this core while the other core is halted</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_RETIRED_ANY_P</name> - <description>number of instructions retired</description> - <value>192</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_RQSTS</name> - <description>number of L2 cache requests</description> - <value>46</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>LLC_MISSES</name> - <description>L2 cache demand requests from this core that missed the L2</description> - <value>46</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>65</default> - <mask> - <value>65</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>LLC_REFS</name> - <description>L2 cache demand requests from this core</description> - <value>46</value> - <minimum>6000</minimum> - <unit-mask> - <type>mandatory</type> - <default>79</default> - <mask> - <value>79</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>LOAD_BLOCK</name> - <description>events pertaining to loads</description> - <value>3</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>62</default> - <mask> - <value>2</value> - <description>STA Loads blocked by a preceding store with unknown address.</description> - </mask> - <mask> - <value>4</value> - <description>STD Loads blocked by a preceding store with unknown data.</description> - </mask> - <mask> - <value>8</value> - <description>OVERLAP_STORE Loads that partially overlap an earlier store, or 4K aliased with a previous store.</description> - </mask> - <mask> - <value>16</value> - <description>UNTIL_RETIRE Loads blocked until retirement.</description> - </mask> - <mask> - <value>32</value> - <description>L1D Loads blocked by the L1 data cache.</description> - </mask> - </unit-mask> - </event> - <event> - <name>STORE_BLOCK</name> - <description>events pertaining to stores</description> - <value>4</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>11</default> - <mask> - <value>1</value> - <description>SB_DRAIN_CYCLES Cycles while stores are blocked due to store buffer drain.</description> - </mask> - <mask> - <value>2</value> - <description>ORDER Cycles while store is waiting for a preceding store to be globally observed.</description> - </mask> - <mask> - <value>8</value> - <description>NOOP A store is blocked due to a conflict with an external or internal snoop.</description> - </mask> - </unit-mask> - </event> - <event> - <name>MISALIGN_MEM_REF</name> - <description>number of misaligned data memory references</description> - <value>5</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEGMENT_REG_LOADS</name> - <description>number of segment register loads</description> - <value>6</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SSE_PRE_EXEC</name> - <description>number of SSE pre-fetch/weakly ordered insns retired</description> - <value>7</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>prefetch NTA instructions executed.</description> - </mask> - <mask> - <value>1</value> - <description>prefetch T1 instructions executed.</description> - </mask> - <mask> - <value>2</value> - <description>prefetch T1 and T2 instructions executed.</description> - </mask> - <mask> - <value>3</value> - <description>SSE weakly-ordered stores</description> - </mask> - </unit-mask> - </event> - <event> - <name>DTLB_MISSES</name> - <description>DTLB miss events</description> - <value>8</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ANY Memory accesses that missed the DTLB.</description> - </mask> - <mask> - <value>2</value> - <description>MISS_LD DTLB misses due to load operations.</description> - </mask> - <mask> - <value>4</value> - <description>L0_MISS_LD L0 DTLB misses due to load operations.</description> - </mask> - <mask> - <value>8</value> - <description>MISS_ST TLB misses due to store operations.</description> - </mask> - </unit-mask> - </event> - <event> - <name>MEMORY_DISAMBIGUATION</name> - <description>Memory disambiguation reset cycles.</description> - <value>9</value> - <minimum>1000</minimum> - <unit-mask> - <type>exclusive</type> - <default>1</default> - <mask> - <value>1</value> - <description>RESET Memory disambiguation reset cycles.</description> - </mask> - <mask> - <value>2</value> - <description>SUCCESS Number of loads that were successfully disambiguated.</description> - </mask> - </unit-mask> - </event> - <event> - <name>PAGE_WALKS</name> - <description>Page table walk events</description> - <value>12</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>2</default> - <mask> - <value>1</value> - <description>COUNT Number of page-walks executed.</description> - </mask> - <mask> - <value>2</value> - <description>CYCLES Duration of page-walks in core cycles.</description> - </mask> - </unit-mask> - </event> - <event> - <name>FLOPS</name> - <description>number of FP computational micro-ops executed</description> - <value>16</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>FP_ASSIST</name> - <description>number of FP assists</description> - <value>17</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>MUL</name> - <description>number of multiplies</description> - <value>18</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>DIV</name> - <description>number of divides</description> - <value>19</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>CYCLES_DIV_BUSY</name> - <description>cycles divider is busy</description> - <value>20</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>IDLE_DURING_DIV</name> - <description>cycles divider is busy and all other execution units are idle.</description> - <value>24</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>DELAYED_BYPASS</name> - <description>Delayed bypass events</description> - <value>25</value> - <minimum>1000</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>FP Delayed bypass to FP operation.</description> - </mask> - <mask> - <value>1</value> - <description>SIMD Delayed bypass to SIMD operation.</description> - </mask> - <mask> - <value>2</value> - <description>LOAD Delayed bypass to load operation.</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_ADS</name> - <description>Cycles the L2 address bus is in use.</description> - <value>33</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_DBUS_BUSY_RD</name> - <description>Cycles the L2 transfers data to the core.</description> - <value>35</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LINES_IN</name> - <description>number of allocated lines in L2</description> - <value>36</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_M_LINES_IN</name> - <description>number of modified lines allocated in L2</description> - <value>37</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LINES_OUT</name> - <description>number of recovered lines from L2</description> - <value>38</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_M_LINES_OUT</name> - <description>number of modified lines removed from L2</description> - <value>39</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>112</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_IFETCH</name> - <description>number of L2 cacheable instruction fetches</description> - <value>40</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LD</name> - <description>number of L2 data loads</description> - <value>41</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_ST</name> - <description>number of L2 data stores</description> - <value>42</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_LOCK</name> - <description>number of locked L2 data accesses</description> - <value>43</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>79</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_REJECT_BUSQ</name> - <description>Rejected L2 cache requests</description> - <value>48</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>127</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>48</value> - <description>prefetch: all inclusive</description> - </mask> - <mask> - <value>16</value> - <description>prefetch: Hardware prefetch only</description> - </mask> - <mask> - <value>0</value> - <description>prefetch: exclude hardware prefetch</description> - </mask> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L2_NO_REQ</name> - <description>Cycles no L2 cache requests are pending</description> - <value>50</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>EIST_TRANS_ALL</name> - <description>Intel(tm) Enhanced SpeedStep(r) Technology transitions</description> - <value>58</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>THERMAL_TRIP</name> - <description>Number of thermal trips</description> - <value>59</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>192</default> - <mask> - <value>192</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LD</name> - <description>L1 cacheable data read operations</description> - <value>64</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_ST</name> - <description>L1 cacheable data write operations</description> - <value>65</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LOCK</name> - <description>L1 cacheable lock read operations</description> - <value>66</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>8</value> - <description>(M)ESI: Modified</description> - </mask> - <mask> - <value>4</value> - <description>M(E)SI: Exclusive</description> - </mask> - <mask> - <value>2</value> - <description>ME(S)I: Shared</description> - </mask> - <mask> - <value>1</value> - <description>MES(I): Invalid</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_CACHE_LOCK_DURATION</name> - <description>Duration of L1 data cacheable locked operations</description> - <value>66</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_ALL_REF</name> - <description>All references to the L1 data cache</description> - <value>67</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_ALL_CACHE_REF</name> - <description>L1 data cacheable reads and writes</description> - <value>67</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>2</default> - <mask> - <value>2</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_REPL</name> - <description>Cache lines allocated in the L1 data cache</description> - <value>69</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>15</default> - <mask> - <value>15</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_M_REPL</name> - <description>Modified cache lines allocated in the L1 data cache</description> - <value>70</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_M_EVICT</name> - <description>Modified cache lines evicted from the L1 data cache</description> - <value>71</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_PEND_MISS</name> - <description>Total number of outstanding L1 data cache misses at any cycle</description> - <value>72</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_SPLIT</name> - <description>Cache line split load/stores</description> - <value>73</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>1</default> - <mask> - <value>1</value> - <description>split loads</description> - </mask> - <mask> - <value>2</value> - <description>split stores</description> - </mask> - </unit-mask> - </event> - <event> - <name>SSE_PREF_MISS</name> - <description>SSE instructions that missed all caches</description> - <value>75</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>PREFETCHNTA</description> - </mask> - <mask> - <value>1</value> - <description>PREFETCHT0</description> - </mask> - <mask> - <value>2</value> - <description>PREFETCHT1/PREFETCHT2</description> - </mask> - </unit-mask> - </event> - <event> - <name>LOAD_HIT_PRE</name> - <description>Load operations conflicting with a software prefetch to the same address</description> - <value>76</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1D_PREFETCH</name> - <description>L1 data cache prefetch requests</description> - <value>78</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>16</default> - <mask> - <value>16</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_REQ_OUTSTANDING</name> - <description>Outstanding cacheable data read bus requests duration</description> - <value>96</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_BNR_DRV</name> - <description>Number of Bus Not Ready signals asserted</description> - <value>97</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_DRDY_CLOCKS</name> - <description>Bus cycles when data is sent on the bus</description> - <value>98</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_LOCK_CLOCKS</name> - <description>Bus cycles when a LOCK signal is asserted</description> - <value>99</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_DATA_RCV</name> - <description>Bus cycles while processor receives data</description> - <value>100</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_BRD</name> - <description>Burst read bus transactions</description> - <value>101</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_RFO</name> - <description>number of completed read for ownership transactions</description> - <value>102</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_WB</name> - <description>number of explicit writeback bus transactions</description> - <value>103</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_IFETCH</name> - <description>number of instruction fetch transactions</description> - <value>104</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_INVAL</name> - <description>number of invalidate transactions</description> - <value>105</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_PWR</name> - <description>number of partial write bus transactions</description> - <value>106</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_P</name> - <description>number of partial bus transactions</description> - <value>107</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_IO</name> - <description>number of I/O bus transactions</description> - <value>108</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRANS_DEF</name> - <description>number of completed defer transactions</description> - <value>109</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_BURST</name> - <description>number of completed burst transactions</description> - <value>110</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_MEM</name> - <description>number of completed memory transactions</description> - <value>111</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_TRAN_ANY</name> - <description>number of any completed bus transactions</description> - <value>112</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>EXT_SNOOP</name> - <description>External snoops</description> - <value>119</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>11</default> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - <mask> - <value>8</value> - <description>snoop: HITM snoops</description> - </mask> - <mask> - <value>2</value> - <description>snoop: HIT snoops</description> - </mask> - <mask> - <value>1</value> - <description>snoop: CLEAN snoops</description> - </mask> - </unit-mask> - </event> - <event> - <name>CMP_SNOOP</name> - <description>L1 data cache is snooped by other core</description> - <value>120</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>1</value> - <description>snoop: CMP2I snoops</description> - </mask> - <mask> - <value>2</value> - <description>snoop: CMP2S snoops</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_HIT_DRV</name> - <description>HIT signal asserted</description> - <value>122</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_HITM_DRV</name> - <description>HITM signal asserted</description> - <value>123</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>0</default> - <mask> - <value>0</value> - <description>this agent</description> - </mask> - <mask> - <value>32</value> - <description>include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUSQ_EMPTY</name> - <description>Bus queue is empty</description> - <value>125</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>SNOOP_STALL_DRV</name> - <description>Bus stalled for snoops</description> - <value>126</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>64</default> - <mask> - <value>192</value> - <description>core: all cores</description> - </mask> - <mask> - <value>64</value> - <description>core: this core</description> - </mask> - <mask> - <value>0</value> - <description>bus: this agent</description> - </mask> - <mask> - <value>32</value> - <description>bus: include all agents</description> - </mask> - </unit-mask> - </event> - <event> - <name>BUS_IO_WAIT</name> - <description>IO requests waiting in the bus queue</description> - <value>127</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>64</default> - <mask> - <value>192</value> - <description>All cores</description> - </mask> - <mask> - <value>64</value> - <description>This core</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1I_READS</name> - <description>number of instruction fetches</description> - <value>128</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>L1I_MISSES</name> - <description>number of instruction fetch misses</description> - <value>129</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>ITLB</name> - <description>number of ITLB misses</description> - <value>130</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>18</default> - <mask> - <value>2</value> - <description>ITLB small page misses</description> - </mask> - <mask> - <value>16</value> - <description>ITLB large page misses</description> - </mask> - <mask> - <value>64</value> - <description>ITLB flushes</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_QUEUE_FULL</name> - <description>cycles during which the instruction queue is full</description> - <value>131</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>2</default> - <mask> - <value>2</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>IFU_MEM_STALL</name> - <description>cycles instruction fetch pipe is stalled</description> - <value>134</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>ILD_STALL</name> - <description>cycles instruction length decoder is stalled</description> - <value>135</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_EXEC</name> - <description>Branch instructions executed (not necessarily retired)</description> - <value>136</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at execution</description> - <value>137</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_BAC_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at Front End (BAC)</description> - <value>138</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CND_EXEC</name> - <description>Conditional Branch instructions executed</description> - <value>139</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CND_MISSP_EXEC</name> - <description>Conditional Branch instructions executed that were mispredicted</description> - <value>140</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_EXEC</name> - <description>Indirect Branch instructions executed</description> - <value>141</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_MISSP_EXEC</name> - <description>Indirect Branch instructions executed that were mispredicted</description> - <value>142</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_EXEC</name> - <description>Return Branch instructions executed</description> - <value>143</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_MISSP_EXEC</name> - <description>Return Branch instructions executed that were mispredicted at Execution</description> - <value>144</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_RET_BAC_MISSP_EXEC</name> - <description>Branch instructions executed that were mispredicted at Front End (BAC)</description> - <value>145</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CALL_EXEC</name> - <description>CALL instruction executed</description> - <value>146</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_CALL_MISSP_EXEC</name> - <description>CALL instruction executed and miss predicted</description> - <value>147</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_IND_CALL_EXEC</name> - <description>Indirect CALL instruction executed</description> - <value>148</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_TKN_BUBBLE_1</name> - <description>Branch predicted taken with bubble 1</description> - <value>151</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_TKN_BUBBLE_2</name> - <description>Branch predicted taken with bubble 2</description> - <value>152</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RS_UOPS_DISPATCHED</name> - <description>Micro-ops dispatched for execution</description> - <value>160</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RS_UOPS_DISPATCHED_NONE</name> - <description>No Micro-ops dispatched for execution</description> - <value>25165984</value> - <minimum>1000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>MACRO_INSTS</name> - <description>instructions decoded</description> - <value>170</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>9</default> - <mask> - <value>1</value> - <description>Instructions decoded</description> - </mask> - <mask> - <value>8</value> - <description>CISC Instructions decoded</description> - </mask> - </unit-mask> - </event> - <event> - <name>ESP</name> - <description>ESP register events</description> - <value>171</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>1</default> - <mask> - <value>1</value> - <description>ESP register content synchronizations</description> - </mask> - <mask> - <value>2</value> - <description>ESP register automatic additions</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_UOPS_EXEC</name> - <description>SIMD micro-ops executed (excluding stores)</description> - <value>176</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_SAT_UOP_EXEC</name> - <description>number of SIMD saturating instructions executed</description> - <value>177</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_UOP_TYPE_EXEC</name> - <description>number of SIMD packing instructions</description> - <value>179</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>63</default> - <mask> - <value>1</value> - <description>SIMD packed multiplies</description> - </mask> - <mask> - <value>2</value> - <description>SIMD packed shifts</description> - </mask> - <mask> - <value>4</value> - <description>SIMD pack operations</description> - </mask> - <mask> - <value>8</value> - <description>SIMD unpack operations</description> - </mask> - <mask> - <value>16</value> - <description>SIMD packed logical</description> - </mask> - <mask> - <value>32</value> - <description>SIMD packed arithmetic</description> - </mask> - <mask> - <value>63</value> - <description>all of the above</description> - </mask> - </unit-mask> - </event> - <event> - <name>INST_RETIRED</name> - <description>number of instructions retired</description> - <value>192</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>0</default> - <mask> - <value>0</value> - <description>Any</description> - </mask> - <mask> - <value>1</value> - <description>Loads</description> - </mask> - <mask> - <value>2</value> - <description>Stores</description> - </mask> - <mask> - <value>4</value> - <description>Other</description> - </mask> - </unit-mask> - </event> - <event> - <name>X87_OPS_RETIRED</name> - <description>number of computational FP operations retired</description> - <value>193</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>254</default> - <mask> - <value>1</value> - <description>FXCH instructions retired</description> - </mask> - <mask> - <value>254</value> - <description>Retired floating-point computational operations (precise)</description> - </mask> - </unit-mask> - </event> - <event> - <name>UOPS_RETIRED</name> - <description>number of UOPs retired</description> - <value>194</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>Fused load+op or load+indirect branch retired</description> - </mask> - <mask> - <value>2</value> - <description>Fused store address + data retired</description> - </mask> - <mask> - <value>4</value> - <description>Retired instruction pairs fused into one micro-op</description> - </mask> - <mask> - <value>7</value> - <description>Fused micro-ops retired</description> - </mask> - <mask> - <value>8</value> - <description>Non-fused micro-ops retired</description> - </mask> - <mask> - <value>15</value> - <description>Micro-ops retired</description> - </mask> - </unit-mask> - </event> - <event> - <name>MACHINE_NUKES_SMC</name> - <description>number of pipeline flushing events</description> - <value>195</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>5</default> - <mask> - <value>1</value> - <description>Self-Modifying Code detected</description> - </mask> - <mask> - <value>4</value> - <description>Execution pipeline restart due to memory ordering conflict or memory disambiguation misprediction</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_RETIRED</name> - <description>number of branch instructions retired</description> - <value>196</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>10</default> - <mask> - <value>1</value> - <description>predicted not-taken</description> - </mask> - <mask> - <value>2</value> - <description>mispredicted not-taken</description> - </mask> - <mask> - <value>4</value> - <description>predicted taken</description> - </mask> - <mask> - <value>8</value> - <description>mispredicted taken</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_MISS_PRED_RETIRED</name> - <description>number of mispredicted branches retired (precise)</description> - <value>197</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>CYCLES_INT_MASKED</name> - <description>cycles interrupts are disabled</description> - <value>198</value> - <minimum>500</minimum> - <unit-mask> - <type>exclusive</type> - <default>2</default> - <mask> - <value>1</value> - <description>Interrupts disabled</description> - </mask> - <mask> - <value>2</value> - <description>Interrupts pending and disabled</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_INST_RETIRED</name> - <description>SSE/SSE2 instructions retired</description> - <value>199</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>31</default> - <mask> - <value>1</value> - <description>Retired SSE packed-single instructions</description> - </mask> - <mask> - <value>2</value> - <description>Retired SSE scalar-single instructions</description> - </mask> - <mask> - <value>4</value> - <description>Retired SSE2 packed-double instructions</description> - </mask> - <mask> - <value>8</value> - <description>Retired SSE2 scalar-double instructions</description> - </mask> - <mask> - <value>16</value> - <description>Retired SSE2 vector integer instructions</description> - </mask> - <mask> - <value>31</value> - <description>Retired Streaming SIMD instructions (precise event)</description> - </mask> - </unit-mask> - </event> - <event> - <name>HW_INT_RCV</name> - <description>number of hardware interrupts received</description> - <value>200</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_COMP_INST_RETIRED</name> - <description>Retired computational SSE/SSE2 instructions</description> - <value>202</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>Retired computational SSE packed-single instructions</description> - </mask> - <mask> - <value>2</value> - <description>Retired computational SSE scalar-single instructions</description> - </mask> - <mask> - <value>4</value> - <description>Retired computational SSE2 packed-double instructions</description> - </mask> - <mask> - <value>8</value> - <description>Retired computational SSE2 scalar-double instructions</description> - </mask> - </unit-mask> - </event> - <event> - <name>FP_MMX_TRANS</name> - <description>MMX-floating point transitions</description> - <value>204</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>3</default> - <mask> - <value>1</value> - <description>float->MMX transitions</description> - </mask> - <mask> - <value>2</value> - <description>MMX->float transitions</description> - </mask> - </unit-mask> - </event> - <event> - <name>MMX_ASSIST</name> - <description>number of EMMS instructions executed</description> - <value>205</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_INSTR_RET</name> - <description>number of SIMD instructions retired</description> - <value>206</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>SIMD_SAT_INSTR_RET</name> - <description>number of saturated arithmetic instructions retired</description> - <value>207</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>RAT_STALLS</name> - <description>Partial register stall cycles</description> - <value>210</value> - <minimum>6000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ROB read port</description> - </mask> - <mask> - <value>2</value> - <description>Partial register</description> - </mask> - <mask> - <value>4</value> - <description>Flag</description> - </mask> - <mask> - <value>8</value> - <description>FPU status word</description> - </mask> - <mask> - <value>15</value> - <description>All RAT</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEG_RENAME_STALLS</name> - <description>Segment rename stalls</description> - <value>212</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ES</description> - </mask> - <mask> - <value>2</value> - <description>DS</description> - </mask> - <mask> - <value>4</value> - <description>FS</description> - </mask> - <mask> - <value>8</value> - <description>GS</description> - </mask> - </unit-mask> - </event> - <event> - <name>SEG_RENAMES</name> - <description>Segment renames</description> - <value>213</value> - <minimum>500</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>ES</description> - </mask> - <mask> - <value>2</value> - <description>DS</description> - </mask> - <mask> - <value>4</value> - <description>FS</description> - </mask> - <mask> - <value>8</value> - <description>GS</description> - </mask> - </unit-mask> - </event> - <event> - <name>RESOURCE_STALLS</name> - <description>Cycles during which resource stalls occur</description> - <value>220</value> - <minimum>3000</minimum> - <unit-mask> - <type>bitmask</type> - <default>15</default> - <mask> - <value>1</value> - <description>when the ROB is full</description> - </mask> - <mask> - <value>2</value> - <description>during which the RS is full</description> - </mask> - <mask> - <value>4</value> - <description>during which the pipeline has exceeded the load or store limit or is waiting to commit all stores</description> - </mask> - <mask> - <value>8</value> - <description>due to FPU control word write</description> - </mask> - <mask> - <value>16</value> - <description>due to branch misprediction</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_INST_DECODED</name> - <description>number of branch instructions decoded</description> - <value>224</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BR_BOGUS</name> - <description>number of bogus branches</description> - <value>228</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>BACLEARS</name> - <description>number of times BACLEAR is asserted</description> - <value>230</value> - <minimum>500</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>PREF_RQSTS_UP</name> - <description>Number of upward prefetches issued</description> - <value>240</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - <event> - <name>PREF_RQSTS_DN</name> - <description>Number of downward prefetches issued</description> - <value>248</value> - <minimum>3000</minimum> - <unit-mask> - <type>mandatory</type> - <default>0</default> - <mask> - <value>0</value> - <description>No unit mask</description> - </mask> - </unit-mask> - </event> - </event-list> -</info> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_raw.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_raw.xml deleted file mode 100644 index 7d38fdb4f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_info_pre_parse_raw.xml +++ /dev/null @@ -1,638 +0,0 @@ -<help_events> -<header title="oprofile: available events for CPU type "Core 2" - -" schemaversion="1.0" doc="See Intel Architecture Developer's Manual Volume 3B, Appendix A and -Intel Architecture Optimization Reference Manual (730795-001) - -"/> -<event event_name="CPU_CLK_UNHALTED" desc="Clock cycles when not halted" counter_mask="3" min_count="6000"> -<unit_masks default="0"> -<unit_mask mask="0" desc="Unhalted core cycles"/> -<unit_mask mask="1" desc="Unhalted bus cycles"/> -<unit_mask mask="2" desc="Unhalted bus cycles of this core while the other core is halted"/> -</unit_masks> -</event> -<event event_name="INST_RETIRED_ANY_P" desc="number of instructions retired" counter_mask="3" min_count="6000"/> -<event event_name="L2_RQSTS" desc="number of L2 cache requests" counter_mask="3" min_count="500"> -<unit_masks default="127"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="LLC_MISSES" desc="L2 cache demand requests from this core that missed the L2" counter_mask="3" min_count="6000"> -<unit_masks default="65"> -<unit_mask mask="65" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="LLC_REFS" desc="L2 cache demand requests from this core" counter_mask="3" min_count="6000"> -<unit_masks default="79"> -<unit_mask mask="79" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="LOAD_BLOCK" desc="events pertaining to loads" counter_mask="3" min_count="500"> -<unit_masks default="62"> -<unit_mask mask="2" desc="STA Loads blocked by a preceding store with unknown address."/> -<unit_mask mask="4" desc="STD Loads blocked by a preceding store with unknown data."/> -<unit_mask mask="8" desc="OVERLAP_STORE Loads that partially overlap an earlier store, or 4K aliased with a previous store."/> -<unit_mask mask="16" desc="UNTIL_RETIRE Loads blocked until retirement."/> -<unit_mask mask="32" desc="L1D Loads blocked by the L1 data cache."/> -</unit_masks> -</event> -<event event_name="STORE_BLOCK" desc="events pertaining to stores" counter_mask="3" min_count="500"> -<unit_masks default="11"> -<unit_mask mask="1" desc="SB_DRAIN_CYCLES Cycles while stores are blocked due to store buffer drain."/> -<unit_mask mask="2" desc="ORDER Cycles while store is waiting for a preceding store to be globally observed."/> -<unit_mask mask="8" desc="NOOP A store is blocked due to a conflict with an external or internal snoop."/> -</unit_masks> -</event> -<event event_name="MISALIGN_MEM_REF" desc="number of misaligned data memory references" counter_mask="3" min_count="500"/> -<event event_name="SEGMENT_REG_LOADS" desc="number of segment register loads" counter_mask="3" min_count="500"/> -<event event_name="SSE_PRE_EXEC" desc="number of SSE pre-fetch/weakly ordered insns retired" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="prefetch NTA instructions executed."/> -<unit_mask mask="1" desc="prefetch T1 instructions executed."/> -<unit_mask mask="2" desc="prefetch T1 and T2 instructions executed."/> -<unit_mask mask="3" desc="SSE weakly-ordered stores"/> -</unit_masks> -</event> -<event event_name="DTLB_MISSES" desc="DTLB miss events" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="1" desc="ANY Memory accesses that missed the DTLB."/> -<unit_mask mask="2" desc="MISS_LD DTLB misses due to load operations."/> -<unit_mask mask="4" desc="L0_MISS_LD L0 DTLB misses due to load operations."/> -<unit_mask mask="8" desc="MISS_ST TLB misses due to store operations."/> -</unit_masks> -</event> -<event event_name="MEMORY_DISAMBIGUATION" desc="Memory disambiguation reset cycles." counter_mask="3" min_count="1000"> -<unit_masks default="1"> -<unit_mask mask="1" desc="RESET Memory disambiguation reset cycles."/> -<unit_mask mask="2" desc="SUCCESS Number of loads that were successfully disambiguated."/> -</unit_masks> -</event> -<event event_name="PAGE_WALKS" desc="Page table walk events" counter_mask="3" min_count="500"> -<unit_masks default="2"> -<unit_mask mask="1" desc="COUNT Number of page-walks executed."/> -<unit_mask mask="2" desc="CYCLES Duration of page-walks in core cycles."/> -</unit_masks> -</event> -<event event_name="FLOPS" desc="number of FP computational micro-ops executed" counter_mask="3" min_count="3000"/> -<event event_name="FP_ASSIST" desc="number of FP assists" counter_mask="3" min_count="500"/> -<event event_name="MUL" desc="number of multiplies" counter_mask="3" min_count="1000"/> -<event event_name="DIV" desc="number of divides" counter_mask="3" min_count="500"/> -<event event_name="CYCLES_DIV_BUSY" desc="cycles divider is busy" counter_mask="3" min_count="1000"/> -<event event_name="IDLE_DURING_DIV" desc="cycles divider is busy and all other execution units are idle." counter_mask="3" min_count="1000"/> -<event event_name="DELAYED_BYPASS" desc="Delayed bypass events" counter_mask="3" min_count="1000"> -<unit_masks default="0"> -<unit_mask mask="0" desc="FP Delayed bypass to FP operation."/> -<unit_mask mask="1" desc="SIMD Delayed bypass to SIMD operation."/> -<unit_mask mask="2" desc="LOAD Delayed bypass to load operation."/> -</unit_masks> -</event> -<event event_name="L2_ADS" desc="Cycles the L2 address bus is in use." counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="L2_DBUS_BUSY_RD" desc="Cycles the L2 transfers data to the core." counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="L2_LINES_IN" desc="number of allocated lines in L2" counter_mask="3" min_count="500"> -<unit_masks default="112"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -</unit_masks> -</event> -<event event_name="L2_M_LINES_IN" desc="number of modified lines allocated in L2" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="L2_LINES_OUT" desc="number of recovered lines from L2" counter_mask="3" min_count="500"> -<unit_masks default="112"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -</unit_masks> -</event> -<event event_name="L2_M_LINES_OUT" desc="number of modified lines removed from L2" counter_mask="3" min_count="500"> -<unit_masks default="112"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -</unit_masks> -</event> -<event event_name="L2_IFETCH" desc="number of L2 cacheable instruction fetches" counter_mask="3" min_count="500"> -<unit_masks default="79"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L2_LD" desc="number of L2 data loads" counter_mask="3" min_count="500"> -<unit_masks default="127"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L2_ST" desc="number of L2 data stores" counter_mask="3" min_count="500"> -<unit_masks default="79"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L2_LOCK" desc="number of locked L2 data accesses" counter_mask="3" min_count="500"> -<unit_masks default="79"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L2_REJECT_BUSQ" desc="Rejected L2 cache requests" counter_mask="3" min_count="500"> -<unit_masks default="127"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="48" desc="prefetch: all inclusive"/> -<unit_mask mask="16" desc="prefetch: Hardware prefetch only"/> -<unit_mask mask="0" desc="prefetch: exclude hardware prefetch"/> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L2_NO_REQ" desc="Cycles no L2 cache requests are pending" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="EIST_TRANS_ALL" desc="Intel(tm) Enhanced SpeedStep(r) Technology transitions" counter_mask="3" min_count="500"/> -<event event_name="THERMAL_TRIP" desc="Number of thermal trips" counter_mask="3" min_count="500"> -<unit_masks default="192"> -<unit_mask mask="192" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="L1D_CACHE_LD" desc="L1 cacheable data read operations" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L1D_CACHE_ST" desc="L1 cacheable data write operations" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L1D_CACHE_LOCK" desc="L1 cacheable lock read operations" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="8" desc="(M)ESI: Modified"/> -<unit_mask mask="4" desc="M(E)SI: Exclusive"/> -<unit_mask mask="2" desc="ME(S)I: Shared"/> -<unit_mask mask="1" desc="MES(I): Invalid"/> -</unit_masks> -</event> -<event event_name="L1D_CACHE_LOCK_DURATION" desc="Duration of L1 data cacheable locked operations" counter_mask="3" min_count="500"> -<unit_masks default="16"> -<unit_mask mask="16" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="L1D_ALL_REF" desc="All references to the L1 data cache" counter_mask="3" min_count="500"> -<unit_masks default="16"> -<unit_mask mask="16" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="L1D_ALL_CACHE_REF" desc="L1 data cacheable reads and writes" counter_mask="3" min_count="500"> -<unit_masks default="2"> -<unit_mask mask="2" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="L1D_REPL" desc="Cache lines allocated in the L1 data cache" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="15" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="L1D_M_REPL" desc="Modified cache lines allocated in the L1 data cache" counter_mask="3" min_count="500"/> -<event event_name="L1D_M_EVICT" desc="Modified cache lines evicted from the L1 data cache" counter_mask="3" min_count="500"/> -<event event_name="L1D_PEND_MISS" desc="Total number of outstanding L1 data cache misses at any cycle" counter_mask="3" min_count="500"/> -<event event_name="L1D_SPLIT" desc="Cache line split load/stores" counter_mask="3" min_count="500"> -<unit_masks default="1"> -<unit_mask mask="1" desc="split loads"/> -<unit_mask mask="2" desc="split stores"/> -</unit_masks> -</event> -<event event_name="SSE_PREF_MISS" desc="SSE instructions that missed all caches" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="PREFETCHNTA"/> -<unit_mask mask="1" desc="PREFETCHT0"/> -<unit_mask mask="2" desc="PREFETCHT1/PREFETCHT2"/> -</unit_masks> -</event> -<event event_name="LOAD_HIT_PRE" desc="Load operations conflicting with a software prefetch to the same address" counter_mask="3" min_count="500"/> -<event event_name="L1D_PREFETCH" desc="L1 data cache prefetch requests" counter_mask="3" min_count="500"> -<unit_masks default="16"> -<unit_mask mask="16" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="BUS_REQ_OUTSTANDING" desc="Outstanding cacheable data read bus requests duration" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_BNR_DRV" desc="Number of Bus Not Ready signals asserted" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="this agent"/> -<unit_mask mask="32" desc="include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_DRDY_CLOCKS" desc="Bus cycles when data is sent on the bus" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="this agent"/> -<unit_mask mask="32" desc="include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_LOCK_CLOCKS" desc="Bus cycles when a LOCK signal is asserted" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_DATA_RCV" desc="Bus cycles while processor receives data" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_BRD" desc="Burst read bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_RFO" desc="number of completed read for ownership transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_WB" desc="number of explicit writeback bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_IFETCH" desc="number of instruction fetch transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_INVAL" desc="number of invalidate transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_PWR" desc="number of partial write bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRANS_P" desc="number of partial bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRANS_IO" desc="number of I/O bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRANS_DEF" desc="number of completed defer transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_BURST" desc="number of completed burst transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_MEM" desc="number of completed memory transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_TRAN_ANY" desc="number of any completed bus transactions" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="EXT_SNOOP" desc="External snoops" counter_mask="3" min_count="500"> -<unit_masks default="11"> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -<unit_mask mask="8" desc="snoop: HITM snoops"/> -<unit_mask mask="2" desc="snoop: HIT snoops"/> -<unit_mask mask="1" desc="snoop: CLEAN snoops"/> -</unit_masks> -</event> -<event event_name="CMP_SNOOP" desc="L1 data cache is snooped by other core" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="1" desc="snoop: CMP2I snoops"/> -<unit_mask mask="2" desc="snoop: CMP2S snoops"/> -</unit_masks> -</event> -<event event_name="BUS_HIT_DRV" desc="HIT signal asserted" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="this agent"/> -<unit_mask mask="32" desc="include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_HITM_DRV" desc="HITM signal asserted" counter_mask="3" min_count="500"> -<unit_masks default="0"> -<unit_mask mask="0" desc="this agent"/> -<unit_mask mask="32" desc="include all agents"/> -</unit_masks> -</event> -<event event_name="BUSQ_EMPTY" desc="Bus queue is empty" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="SNOOP_STALL_DRV" desc="Bus stalled for snoops" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="core: all cores"/> -<unit_mask mask="64" desc="core: this core"/> -<unit_mask mask="0" desc="bus: this agent"/> -<unit_mask mask="32" desc="bus: include all agents"/> -</unit_masks> -</event> -<event event_name="BUS_IO_WAIT" desc="IO requests waiting in the bus queue" counter_mask="3" min_count="500"> -<unit_masks default="64"> -<unit_mask mask="192" desc="All cores"/> -<unit_mask mask="64" desc="This core"/> -</unit_masks> -</event> -<event event_name="L1I_READS" desc="number of instruction fetches" counter_mask="3" min_count="500"/> -<event event_name="L1I_MISSES" desc="number of instruction fetch misses" counter_mask="3" min_count="500"/> -<event event_name="ITLB" desc="number of ITLB misses" counter_mask="3" min_count="500"> -<unit_masks default="18"> -<unit_mask mask="2" desc="ITLB small page misses"/> -<unit_mask mask="16" desc="ITLB large page misses"/> -<unit_mask mask="64" desc="ITLB flushes"/> -</unit_masks> -</event> -<event event_name="INST_QUEUE_FULL" desc="cycles during which the instruction queue is full" counter_mask="3" min_count="500"> -<unit_masks default="2"> -<unit_mask mask="2" desc="No unit mask"/> -</unit_masks> -</event> -<event event_name="IFU_MEM_STALL" desc="cycles instruction fetch pipe is stalled" counter_mask="3" min_count="500"/> -<event event_name="ILD_STALL" desc="cycles instruction length decoder is stalled" counter_mask="3" min_count="500"/> -<event event_name="BR_INST_EXEC" desc="Branch instructions executed (not necessarily retired)" counter_mask="3" min_count="3000"/> -<event event_name="BR_MISSP_EXEC" desc="Branch instructions executed that were mispredicted at execution" counter_mask="3" min_count="3000"/> -<event event_name="BR_BAC_MISSP_EXEC" desc="Branch instructions executed that were mispredicted at Front End (BAC)" counter_mask="3" min_count="3000"/> -<event event_name="BR_CND_EXEC" desc="Conditional Branch instructions executed" counter_mask="3" min_count="3000"/> -<event event_name="BR_CND_MISSP_EXEC" desc="Conditional Branch instructions executed that were mispredicted" counter_mask="3" min_count="3000"/> -<event event_name="BR_IND_EXEC" desc="Indirect Branch instructions executed" counter_mask="3" min_count="3000"/> -<event event_name="BR_IND_MISSP_EXEC" desc="Indirect Branch instructions executed that were mispredicted" counter_mask="3" min_count="3000"/> -<event event_name="BR_RET_EXEC" desc="Return Branch instructions executed" counter_mask="3" min_count="3000"/> -<event event_name="BR_RET_MISSP_EXEC" desc="Return Branch instructions executed that were mispredicted at Execution" counter_mask="3" min_count="3000"/> -<event event_name="BR_RET_BAC_MISSP_EXEC" desc="Branch instructions executed that were mispredicted at Front End (BAC)" counter_mask="3" min_count="3000"/> -<event event_name="BR_CALL_EXEC" desc="CALL instruction executed" counter_mask="3" min_count="3000"/> -<event event_name="BR_CALL_MISSP_EXEC" desc="CALL instruction executed and miss predicted" counter_mask="3" min_count="3000"/> -<event event_name="BR_IND_CALL_EXEC" desc="Indirect CALL instruction executed" counter_mask="3" min_count="3000"/> -<event event_name="BR_TKN_BUBBLE_1" desc="Branch predicted taken with bubble 1" counter_mask="3" min_count="3000"/> -<event event_name="BR_TKN_BUBBLE_2" desc="Branch predicted taken with bubble 2" counter_mask="3" min_count="3000"/> -<event event_name="RS_UOPS_DISPATCHED" desc="Micro-ops dispatched for execution" counter_mask="3" min_count="1000"/> -<event event_name="RS_UOPS_DISPATCHED_NONE" desc="No Micro-ops dispatched for execution" counter_mask="3" min_count="1000"/> -<event event_name="MACRO_INSTS" desc="instructions decoded" counter_mask="3" min_count="500"> -<unit_masks default="9"> -<unit_mask mask="1" desc="Instructions decoded"/> -<unit_mask mask="8" desc="CISC Instructions decoded"/> -</unit_masks> -</event> -<event event_name="ESP" desc="ESP register events" counter_mask="3" min_count="500"> -<unit_masks default="1"> -<unit_mask mask="1" desc="ESP register content synchronizations"/> -<unit_mask mask="2" desc="ESP register automatic additions"/> -</unit_masks> -</event> -<event event_name="SIMD_UOPS_EXEC" desc="SIMD micro-ops executed (excluding stores)" counter_mask="3" min_count="500"/> -<event event_name="SIMD_SAT_UOP_EXEC" desc="number of SIMD saturating instructions executed" counter_mask="3" min_count="3000"/> -<event event_name="SIMD_UOP_TYPE_EXEC" desc="number of SIMD packing instructions" counter_mask="3" min_count="3000"> -<unit_masks default="63"> -<unit_mask mask="1" desc="SIMD packed multiplies"/> -<unit_mask mask="2" desc="SIMD packed shifts"/> -<unit_mask mask="4" desc="SIMD pack operations"/> -<unit_mask mask="8" desc="SIMD unpack operations"/> -<unit_mask mask="16" desc="SIMD packed logical"/> -<unit_mask mask="32" desc="SIMD packed arithmetic"/> -<unit_mask mask="63" desc="all of the above"/> -</unit_masks> -</event> -<event event_name="INST_RETIRED" desc="number of instructions retired" counter_mask="3" min_count="6000"> -<unit_masks default="0"> -<unit_mask mask="0" desc="Any"/> -<unit_mask mask="1" desc="Loads"/> -<unit_mask mask="2" desc="Stores"/> -<unit_mask mask="4" desc="Other"/> -</unit_masks> -</event> -<event event_name="X87_OPS_RETIRED" desc="number of computational FP operations retired" counter_mask="3" min_count="500"> -<unit_masks default="254"> -<unit_mask mask="1" desc="FXCH instructions retired"/> -<unit_mask mask="254" desc="Retired floating-point computational operations (precise)"/> -</unit_masks> -</event> -<event event_name="UOPS_RETIRED" desc="number of UOPs retired" counter_mask="3" min_count="6000"> -<unit_masks default="15"> -<unit_mask mask="1" desc="Fused load+op or load+indirect branch retired"/> -<unit_mask mask="2" desc="Fused store address + data retired"/> -<unit_mask mask="4" desc="Retired instruction pairs fused into one micro-op"/> -<unit_mask mask="7" desc="Fused micro-ops retired"/> -<unit_mask mask="8" desc="Non-fused micro-ops retired"/> -<unit_mask mask="15" desc="Micro-ops retired"/> -</unit_masks> -</event> -<event event_name="MACHINE_NUKES_SMC" desc="number of pipeline flushing events" counter_mask="3" min_count="500"> -<unit_masks default="5"> -<unit_mask mask="1" desc="Self-Modifying Code detected"/> -<unit_mask mask="4" desc="Execution pipeline restart due to memory ordering conflict or memory disambiguation misprediction"/> -</unit_masks> -</event> -<event event_name="BR_INST_RETIRED" desc="number of branch instructions retired" counter_mask="3" min_count="500"> -<unit_masks default="10"> -<unit_mask mask="1" desc="predicted not-taken"/> -<unit_mask mask="2" desc="mispredicted not-taken"/> -<unit_mask mask="4" desc="predicted taken"/> -<unit_mask mask="8" desc="mispredicted taken"/> -</unit_masks> -</event> -<event event_name="BR_MISS_PRED_RETIRED" desc="number of mispredicted branches retired (precise)" counter_mask="3" min_count="500"/> -<event event_name="CYCLES_INT_MASKED" desc="cycles interrupts are disabled" counter_mask="3" min_count="500"> -<unit_masks default="2"> -<unit_mask mask="1" desc="Interrupts disabled"/> -<unit_mask mask="2" desc="Interrupts pending and disabled"/> -</unit_masks> -</event> -<event event_name="SIMD_INST_RETIRED" desc="SSE/SSE2 instructions retired" counter_mask="3" min_count="500"> -<unit_masks default="31"> -<unit_mask mask="1" desc="Retired SSE packed-single instructions"/> -<unit_mask mask="2" desc="Retired SSE scalar-single instructions"/> -<unit_mask mask="4" desc="Retired SSE2 packed-double instructions"/> -<unit_mask mask="8" desc="Retired SSE2 scalar-double instructions"/> -<unit_mask mask="16" desc="Retired SSE2 vector integer instructions"/> -<unit_mask mask="31" desc="Retired Streaming SIMD instructions (precise event)"/> -</unit_masks> -</event> -<event event_name="HW_INT_RCV" desc="number of hardware interrupts received" counter_mask="3" min_count="500"/> -<event event_name="ITLB_MISS_RETIRED" desc="Retired instructions that missed the ITLB" counter_mask="1" min_count="500"/> -<event event_name="SIMD_COMP_INST_RETIRED" desc="Retired computational SSE/SSE2 instructions" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="1" desc="Retired computational SSE packed-single instructions"/> -<unit_mask mask="2" desc="Retired computational SSE scalar-single instructions"/> -<unit_mask mask="4" desc="Retired computational SSE2 packed-double instructions"/> -<unit_mask mask="8" desc="Retired computational SSE2 scalar-double instructions"/> -</unit_masks> -</event> -<event event_name="MEM_LOAD_RETIRED" desc="Retired loads" counter_mask="1" min_count="500"> -<unit_masks default="1"> -<unit_mask mask="1" desc="Retired loads that miss the L1 data cache (precise event)"/> -<unit_mask mask="2" desc="L1 data cache line missed by retired loads (precise event)"/> -<unit_mask mask="4" desc="Retired loads that miss the L2 cache (precise event)"/> -<unit_mask mask="8" desc="L2 cache line missed by retired loads (precise event)"/> -<unit_mask mask="16" desc="Retired loads that miss the DTLB (precise event)"/> -</unit_masks> -</event> -<event event_name="FP_MMX_TRANS" desc="MMX-floating point transitions" counter_mask="3" min_count="3000"> -<unit_masks default="3"> -<unit_mask mask="1" desc="float->MMX transitions"/> -<unit_mask mask="2" desc="MMX->float transitions"/> -</unit_masks> -</event> -<event event_name="MMX_ASSIST" desc="number of EMMS instructions executed" counter_mask="3" min_count="500"/> -<event event_name="SIMD_INSTR_RET" desc="number of SIMD instructions retired" counter_mask="3" min_count="500"/> -<event event_name="SIMD_SAT_INSTR_RET" desc="number of saturated arithmetic instructions retired" counter_mask="3" min_count="500"/> -<event event_name="RAT_STALLS" desc="Partial register stall cycles" counter_mask="3" min_count="6000"> -<unit_masks default="15"> -<unit_mask mask="1" desc="ROB read port"/> -<unit_mask mask="2" desc="Partial register"/> -<unit_mask mask="4" desc="Flag"/> -<unit_mask mask="8" desc="FPU status word"/> -<unit_mask mask="15" desc="All RAT"/> -</unit_masks> -</event> -<event event_name="SEG_RENAME_STALLS" desc="Segment rename stalls" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="1" desc="ES"/> -<unit_mask mask="2" desc="DS"/> -<unit_mask mask="4" desc="FS"/> -<unit_mask mask="8" desc="GS"/> -</unit_masks> -</event> -<event event_name="SEG_RENAMES" desc="Segment renames" counter_mask="3" min_count="500"> -<unit_masks default="15"> -<unit_mask mask="1" desc="ES"/> -<unit_mask mask="2" desc="DS"/> -<unit_mask mask="4" desc="FS"/> -<unit_mask mask="8" desc="GS"/> -</unit_masks> -</event> -<event event_name="RESOURCE_STALLS" desc="Cycles during which resource stalls occur" counter_mask="3" min_count="3000"> -<unit_masks default="15"> -<unit_mask mask="1" desc="when the ROB is full"/> -<unit_mask mask="2" desc="during which the RS is full"/> -<unit_mask mask="4" desc="during which the pipeline has exceeded the load or store limit or is waiting to commit all stores"/> -<unit_mask mask="8" desc="due to FPU control word write"/> -<unit_mask mask="16" desc="due to branch misprediction"/> -</unit_masks> -</event> -<event event_name="BR_INST_DECODED" desc="number of branch instructions decoded" counter_mask="3" min_count="500"/> -<event event_name="BR_BOGUS" desc="number of bogus branches" counter_mask="3" min_count="500"/> -<event event_name="BACLEARS" desc="number of times BACLEAR is asserted" counter_mask="3" min_count="500"/> -<event event_name="PREF_RQSTS_UP" desc="Number of upward prefetches issued" counter_mask="3" min_count="3000"/> -<event event_name="PREF_RQSTS_DN" desc="Number of downward prefetches issued" counter_mask="3" min_count="3000"/> -</help_events> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data.xml deleted file mode 100644 index 7a0341ce1..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/test/path/for/image" count="205000"> - <symbols> - <symbol name="TestFunction1(int)" file="/test/path/for/src/image.cpp" line="1" count="180000"> - <sample> - <count>130000</count> - <file>/test/path/for/src/image.cpp</file> - <line>42</line> - </sample> - <sample> - <count>40000</count> - <file>/test/path/for/src/image.cpp</file> - <line>36</line> - </sample> - <sample> - <count>9999</count> - <file>/test/path/for/src/image.cpp</file> - <line>31</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image.cpp</file> - <line>39</line> - </sample> - </symbol> - <symbol name="TestFunction2(int, int)" file="/test/path/for/src/image2.cpp" line="50" count="20000"> - <sample> - <count>19998</count> - <file>/test/path/for/src/image2.cpp</file> - <line>94</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>12</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>55</line> - </sample> - </symbol> - </symbols> - <dependent count="5000"> - <image name="/no-vmlinux" count="4400"> - </image> - <image name="/lib64/ld-2.9.so" count="300"> - <symbols> - <symbol name="do_lookup_x" file="dl-lookup.c" line="0" count="299"> - <sample> - <count>299</count> - <file>dl-lookup.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_unload_cache" file="rawmemchr.c" line="0" count="1"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/usr/lib64/libstdc++.so.6.0.10" count="160"> - </image> - <image name="/lib64/libc-2.9.so" count="140"> - <symbols> - <symbol name="_IO_new_file_seekoff" file="" line="0" count="100"> - <sample> - <count>100</count> - <file></file> - <line>0</line> - </sample> - </symbol> - <symbol name="bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)" file="" line="0" count="40"> - <sample> - <count>40</count> - <file></file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - </dependent> - </image> -</model-data> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_expected.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_expected.xml deleted file mode 100644 index 4bf162767..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_expected.xml +++ /dev/null @@ -1,403 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/home/rgrunber/runtime-EclipseApplication/archer/gdb/gdb" count="176"> - <symbols> - <symbol name="d_demangle" file="??" count="26"> - <sample> - <count>26</count> - <line>0</line> - </sample> - </symbol> - <symbol name="gnu_special" file="??" count="9"> - <sample> - <count>9</count> - <line>0</line> - </sample> - </symbol> - <symbol name="htab_hash_string" file="??" count="9"> - <sample> - <count>9</count> - <line>0</line> - </sample> - </symbol> - <symbol name="add_minsym_to_hash_table" file="??" count="7"> - <sample> - <count>7</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_elf_string_from_elf_section" file="??" count="7"> - <sample> - <count>7</count> - <line>0</line> - </sample> - </symbol> - <symbol name="internal_cplus_demangle" file="??" count="7"> - <sample> - <count>7</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_elf32_swap_symbol_in" file="??" count="6"> - <sample> - <count>6</count> - <line>0</line> - </sample> - </symbol> - <symbol name="eq_demangled_name_entry" file="??" count="6"> - <sample> - <count>6</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_methods" file="??" count="6"> - <sample> - <count>6</count> - <line>0</line> - </sample> - </symbol> - <symbol name="prim_record_minimal_symbol_full" file="??" count="6"> - <sample> - <count>6</count> - <line>0</line> - </sample> - </symbol> - <symbol name="symbol_set_names" file="??" count="6"> - <sample> - <count>6</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_elf32_slurp_symbol_table" file="??" count="5"> - <sample> - <count>5</count> - <line>0</line> - </sample> - </symbol> - <symbol name="cplus_demangle" file="??" count="4"> - <sample> - <count>4</count> - <line>0</line> - </sample> - </symbol> - <symbol name="htab_find_slot_with_hash" file="??" count="4"> - <sample> - <count>4</count> - <line>0</line> - </sample> - </symbol> - <symbol name="compare_minimal_symbols" file="??" count="3"> - <sample> - <count>3</count> - <line>0</line> - </sample> - </symbol> - <symbol name="d_demangle_callback" file="??" count="3"> - <sample> - <count>3</count> - <line>0</line> - </sample> - </symbol> - <symbol name="elf_symtab_read" file="??" count="3"> - <sample> - <count>3</count> - <line>0</line> - </sample> - </symbol> - <symbol name="obsavestring" file="??" count="3"> - <sample> - <count>3</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_bread" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_getl16" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_section_from_elf_index" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_pc_partial_function" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="get_objfile_arch" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="htab_expand" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="regcache_raw_supply" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="symbol_init_language_specific" file="??" count="2"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - <symbol name="_initialize_mi_cmds" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="add_cmd" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="allocate_bp_location" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_elf32_object_p" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_getl32" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="bfd_section_hash_newfunc" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="build_minimal_symbol_hash_tables" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="core_addr_identity" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="cpname_lex" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="dwarf2_frame_cache" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="exceptions_state_mc_action_iter_1" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_and_open_source" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_charset_names" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_function_start_sal" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="find_pc_section" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="forget_types" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="gdbarch_has_global_breakpoints" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="gdbarch_smash_text_address" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="hex_string" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="htab_find_slot" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="htab_find_with_hash" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="linux_nat_wait" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="linux_nat_xfer_partial" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="lookup_minimal_symbol_by_pc_section_1" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="lookup_minimal_symbol_text" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="make_cleanup" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="objc_demangle" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="prefixify_expression" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="process_next_line" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="qsort_cmp" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="read_psymtabs_with_filename" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="symbol_natural_name" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="symbol_set_demangled_name" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="target_read_memory" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="target_xfer_partial" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="tdesc_gdb_type" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="tilde_expand" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="update_global_location_list" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="update_solib_list" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="xmalloc" file="??" count="1"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> -</model-data> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_multiple_image.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_multiple_image.xml deleted file mode 100644 index 485a22971..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_multiple_image.xml +++ /dev/null @@ -1,239 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/no-vmlinux" count="6844"> - </image> - <image name="/bin/grep" count="2"> - </image> - <image name="/bin/gawk" count="8"> - </image> - <image name="/bin/bash" count="142"> - </image> - <image name="/lib64/libgobject-2.0.so.0.1800.3" count="61"> - </image> - <image name="/lib64/libgio-2.0.so.0.1800.3" count="2"> - </image> - <image name="/lib64/libdl-2.9.so" count="2"> - <symbols> - <symbol name="__do_global_dtors_aux" file="crtstuff.c" count="2" line="0"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/ld-2.9.so" count="36"> - <symbols> - <symbol name="_dl_start" file="rtld.c" count="1" line="0"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="dl_main" file="rtld.c" count="3" line="0"> - <sample> - <count>3</count> - <file>rtld.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="init_tls" file="rtld.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rtld.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="open_verify" file="dl-load.c" count="2" line="0"> - <sample> - <count>2</count> - <file>dl-load.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_setup_hash" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_init_internal" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_important_hwcaps" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="munmap" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_load_cache_lookup" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_fini" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__GI_memset" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_init_paths" file="rawmemchr.c" count="3" line="0"> - <sample> - <count>3</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__brk" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_name_match_p" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="index" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_resolve_conflicts" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_cache_libcmp" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="strcmp" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_start_user" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="strlen" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_sort_fini" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_map_object_deps" file="rawmemchr.c" count="4" line="0"> - <sample> - <count>4</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__libc_memalign" file="" count="1" line="0"> - <sample> - <count>1</count> - <file></file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/libdbus-1.so.3.4.0" count="10"> - </image> - <image name="/lib64/libfuse.so.2.7.4" count="1"> - </image> - <image name="/lib64/libm-2.9.so" count="2"> - <symbols> - <symbol name="__dubsin" file="interp.c" count="2" line="0"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/libglib-2.0.so.0.1800.3" count="107"> - </image> - <image name="/lib64/libgthread-2.0.so.0.1800.3" count="3"> - </image> - <image name="/usr/bin/which" count="1"> - </image> - <image name="/usr/bin/compiz" count="21"> - </image> - <image name="/usr/bin/Xorg" count="154"> - <dependent count="6"> - <image name="[vdso]" count="6"> - </image> - </dependent> - </image> - <image name="/usr/bin/ophelp" count="11"> - </image> - <image name="/usr/bin/qemu-kvm" count="142"> - <dependent count="1"> - <image name="[vdso]" count="1"> - </image> - </dependent> - </image> - <image name="/usr/bin/oprofiled" count="26"> - </image> - <image name="/usr/sbin/libvirtd" count="3"> - </image> - <image name="/usr/libexec/multiload-applet-2" count="1"> - </image> - <image name="/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so" count="7"> - </image> - <image name="/usr/lib64/libgtk-x11-2.0.so.0.1400.5" count="22"> - </image> - <image name="/usr/lib64/libpangocairo-1.0.so.0.2203.0" count="4"> - </image> - <image name="/usr/lib64/libXrender.so.1.3.0" count="2"> - </image> -</model-data> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_raw.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_raw.xml deleted file mode 100644 index 4bb288432..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_model-data_raw.xml +++ /dev/null @@ -1,1175 +0,0 @@ -<?xml version="1.0" ?> -<profile schemaversion="3.0" cputype="i386" - processor="core_2" - mhz="1995.00" - title="opreport -X --details event:CPU_CLK_UNHALTED "> -<options session="event:CPU_CLK_UNHALTED" details="true"/> -<setup> -<eventsetup id="0" eventname="CPU_CLK_UNHALTED" unitmask="0" setupcount="100000"/> -</setup> - -<binary name="/home/rgrunber/runtime-EclipseApplication/archer/gdb/gdb"> -<count> -176</count> -<symbol idref="0" detaillo="0" detailhi="11"> -<count> -26</count> -</symbol> -<symbol idref="1" detaillo="0" detailhi="5"> -<count> -9</count> -</symbol> -<symbol idref="2" detaillo="0" detailhi="5"> -<count> -9</count> -</symbol> -<symbol idref="3" detaillo="0" detailhi="4"> -<count> -7</count> -</symbol> -<symbol idref="4" detaillo="0" detailhi="6"> -<count> -7</count> -</symbol> -<symbol idref="5" detaillo="0" detailhi="5"> -<count> -7</count> -</symbol> -<symbol idref="6" detaillo="0" detailhi="4"> -<count> -6</count> -</symbol> -<symbol idref="7" detaillo="0" detailhi="3"> -<count> -6</count> -</symbol> -<symbol idref="8" detaillo="0" detailhi="2"> -<count> -6</count> -</symbol> -<symbol idref="9" detaillo="0" detailhi="4"> -<count> -6</count> -</symbol> -<symbol idref="10" detaillo="0" detailhi="5"> -<count> -6</count> -</symbol> -<symbol idref="11" detaillo="0" detailhi="4"> -<count> -5</count> -</symbol> -<symbol idref="12" detaillo="0" detailhi="2"> -<count> -4</count> -</symbol> -<symbol idref="13" detaillo="0" detailhi="1"> -<count> -4</count> -</symbol> -<symbol idref="14" detaillo="0" detailhi="2"> -<count> -3</count> -</symbol> -<symbol idref="15" detaillo="0" detailhi="1"> -<count> -3</count> -</symbol> -<symbol idref="16" detaillo="0" detailhi="2"> -<count> -3</count> -</symbol> -<symbol idref="17" detaillo="0" detailhi="1"> -<count> -3</count> -</symbol> -<symbol idref="18" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="19" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="20" detaillo="0" detailhi="0"> -<count> -2</count> -</symbol> -<symbol idref="21" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="22" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="23" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="24" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="25" detaillo="0" detailhi="1"> -<count> -2</count> -</symbol> -<symbol idref="26" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="27" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="28" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="29" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="30" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="31" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="32" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="33" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="34" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="35" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="36" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="37" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="38" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="39" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="40" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="41" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="42" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="43" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="44" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="45" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="46" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="47" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="48" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="49" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="50" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="51" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="52" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="53" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="54" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="55" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="56" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="57" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="58" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="59" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="60" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="61" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="62" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="63" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="64" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -<symbol idref="65" detaillo="0" detailhi="0"> -<count> -1</count> -</symbol> -</binary> -<symboltable> -<symboldata id="0" name="d_demangle" startingaddr="081b6710"/> -<symboldata id="1" name="gnu_special" startingaddr="08292fe0"/> -<symboldata id="2" name="htab_hash_string" startingaddr="08299e60"/> -<symboldata id="3" name="add_minsym_to_hash_table" startingaddr="08051e70"/> -<symboldata id="4" name="bfd_elf_string_from_elf_section" startingaddr="082523a0"/> -<symboldata id="5" name="internal_cplus_demangle" startingaddr="0828f4e0"/> -<symboldata id="6" name="bfd_elf32_swap_symbol_in" startingaddr="08245720"/> -<symboldata id="7" name="eq_demangled_name_entry" startingaddr="08119ef0"/> -<symboldata id="8" name="find_methods" startingaddr="081b9210"/> -<symboldata id="9" name="prim_record_minimal_symbol_full" startingaddr="080528c0"/> -<symboldata id="10" name="symbol_set_names" startingaddr="0811e9a0"/> -<symboldata id="11" name="bfd_elf32_slurp_symbol_table" startingaddr="08247200"/> -<symboldata id="12" name="cplus_demangle" startingaddr="0828fb80"/> -<symboldata id="13" name="htab_find_slot_with_hash" startingaddr="0829a6b0"/> -<symboldata id="14" name="compare_minimal_symbols" startingaddr="08051f10"/> -<symboldata id="15" name="d_demangle_callback" startingaddr="082979a0"/> -<symboldata id="16" name="elf_symtab_read" startingaddr="080d6430"/> -<symboldata id="17" name="obsavestring" startingaddr="08124690"/> -<symboldata id="18" name="bfd_bread" startingaddr="0822cf20"/> -<symboldata id="19" name="bfd_getl16" startingaddr="082319c0"/> -<symboldata id="20" name="bfd_section_from_elf_index" startingaddr="08248ac0"/> -<symboldata id="21" name="find_pc_partial_function" startingaddr="080e23a0"/> -<symboldata id="22" name="get_objfile_arch" startingaddr="0804e9c0"/> -<symboldata id="23" name="htab_expand" startingaddr="0829a430"/> -<symboldata id="24" name="regcache_raw_supply" startingaddr="080f6bd0"/> -<symboldata id="25" name="symbol_init_language_specific" startingaddr="0811ef90"/> -<symboldata id="26" name="_initialize_mi_cmds" startingaddr="080c3230"/> -<symboldata id="27" name="add_cmd" startingaddr="080bada0"/> -<symboldata id="28" name="allocate_bp_location" startingaddr="080e74b0"/> -<symboldata id="29" name="bfd_elf32_object_p" startingaddr="08247bb0"/> -<symboldata id="30" name="bfd_getl32" startingaddr="08231a90"/> -<symboldata id="31" name="bfd_section_hash_newfunc" startingaddr="08234570"/> -<symboldata id="32" name="build_minimal_symbol_hash_tables" startingaddr="08052c80"/> -<symboldata id="33" name="core_addr_identity" startingaddr="08159a80"/> -<symboldata id="34" name="cpname_lex" startingaddr="080d7930"/> -<symboldata id="35" name="dwarf2_frame_cache" startingaddr="081a1d30"/> -<symboldata id="36" name="exceptions_state_mc_action_iter_1" startingaddr="08146080"/> -<symboldata id="37" name="find_and_open_source" startingaddr="080fc770"/> -<symboldata id="38" name="find_charset_names" startingaddr="080f9910"/> -<symboldata id="39" name="find_function_start_sal" startingaddr="0811c7c0"/> -<symboldata id="40" name="find_pc_section" startingaddr="0804f550"/> -<symboldata id="41" name="forget_types" startingaddr="0828e8f0"/> -<symboldata id="42" name="gdbarch_has_global_breakpoints" startingaddr="08151110"/> -<symboldata id="43" name="gdbarch_smash_text_address" startingaddr="08153650"/> -<symboldata id="44" name="hex_string" startingaddr="080584e0"/> -<symboldata id="45" name="htab_find_slot" startingaddr="0829a920"/> -<symboldata id="46" name="htab_find_with_hash" startingaddr="08299c60"/> -<symboldata id="47" name="linux_nat_wait" startingaddr="080936b0"/> -<symboldata id="48" name="linux_nat_xfer_partial" startingaddr="0808e2c0"/> -<symboldata id="49" name="lookup_minimal_symbol_by_pc_section_1" startingaddr="080523a0"/> -<symboldata id="50" name="lookup_minimal_symbol_text" startingaddr="080521c0"/> -<symboldata id="51" name="make_cleanup" startingaddr="08059c50"/> -<symboldata id="52" name="objc_demangle" startingaddr="081b9bf0"/> -<symboldata id="53" name="prefixify_expression" startingaddr="0816d860"/> -<symboldata id="54" name="process_next_line" startingaddr="080bbf70"/> -<symboldata id="55" name="qsort_cmp" startingaddr="0804ed20"/> -<symboldata id="56" name="read_psymtabs_with_filename" startingaddr="081207f0"/> -<symboldata id="57" name="symbol_natural_name" startingaddr="0811d140"/> -<symboldata id="58" name="symbol_set_demangled_name" startingaddr="0811e880"/> -<symboldata id="59" name="target_read_memory" startingaddr="08169560"/> -<symboldata id="60" name="target_xfer_partial" startingaddr="08168120"/> -<symboldata id="61" name="tdesc_gdb_type" startingaddr="081e99e0"/> -<symboldata id="62" name="tilde_expand" startingaddr="082249b0"/> -<symboldata id="63" name="update_global_location_list" startingaddr="080ee430"/> -<symboldata id="64" name="update_solib_list" startingaddr="08063670"/> -<symboldata id="65" name="xmalloc" startingaddr="08058f80"/> -</symboltable> -<detailtable> -<symboldetails id="0"> -<detaildata id="0" vmaoffset="081b6718"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="081b6734"> -<count class=""> -4</count> -</detaildata> -<detaildata id="2" vmaoffset="081b677a"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="081b683d"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="081b6846"> -<count class=""> -3</count> -</detaildata> -<detaildata id="5" vmaoffset="081b6858"> -<count class=""> -1</count> -</detaildata> -<detaildata id="6" vmaoffset="081b685a"> -<count class=""> -3</count> -</detaildata> -<detaildata id="7" vmaoffset="081b686e"> -<count class=""> -2</count> -</detaildata> -<detaildata id="8" vmaoffset="081b6880"> -<count class=""> -1</count> -</detaildata> -<detaildata id="9" vmaoffset="081b6882"> -<count class=""> -5</count> -</detaildata> -<detaildata id="10" vmaoffset="081b6896"> -<count class=""> -3</count> -</detaildata> -<detaildata id="11" vmaoffset="081b69e3"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="1"> -<detaildata id="0" vmaoffset="08293009"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0829300b"> -<count class=""> -3</count> -</detaildata> -<detaildata id="2" vmaoffset="0829301f"> -<count class=""> -2</count> -</detaildata> -<detaildata id="3" vmaoffset="08293080"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="08293088"> -<count class=""> -1</count> -</detaildata> -<detaildata id="5" vmaoffset="08293093"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="2"> -<detaildata id="0" vmaoffset="08299e61"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="08299e6b"> -<count class=""> -2</count> -</detaildata> -<detaildata id="2" vmaoffset="08299e78"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="08299e7b"> -<count class=""> -2</count> -</detaildata> -<detaildata id="4" vmaoffset="08299e82"> -<count class=""> -2</count> -</detaildata> -<detaildata id="5" vmaoffset="08299e8d"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="3"> -<detaildata id="0" vmaoffset="08051e91"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="08051e98"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="08051e9b"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="08051ea5"> -<count class=""> -3</count> -</detaildata> -<detaildata id="4" vmaoffset="08051ebb"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="4"> -<detaildata id="0" vmaoffset="082523a0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="082523a8"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="082523b7"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="082523d0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="082523f2"> -<count class=""> -1</count> -</detaildata> -<detaildata id="5" vmaoffset="08252406"> -<count class=""> -1</count> -</detaildata> -<detaildata id="6" vmaoffset="0825240a"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="5"> -<detaildata id="0" vmaoffset="0828f555"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0828f5a6"> -<count class=""> -2</count> -</detaildata> -<detaildata id="2" vmaoffset="0828f5c0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="0828f62a"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="0828f746"> -<count class=""> -1</count> -</detaildata> -<detaildata id="5" vmaoffset="0828f8d9"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="6"> -<detaildata id="0" vmaoffset="08245720"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="08245735"> -<count class=""> -2</count> -</detaildata> -<detaildata id="2" vmaoffset="08245770"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="0824578d"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="082457c4"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="7"> -<detaildata id="0" vmaoffset="08119ef1"> -<count class=""> -3</count> -</detaildata> -<detaildata id="1" vmaoffset="08119ef6"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="08119f04"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="08119f0c"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="8"> -<detaildata id="0" vmaoffset="081b92d0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="081b92ec"> -<count class=""> -4</count> -</detaildata> -<detaildata id="2" vmaoffset="081b9303"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="9"> -<detaildata id="0" vmaoffset="0805290c"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0805297a"> -<count class=""> -2</count> -</detaildata> -<detaildata id="2" vmaoffset="080529b1"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="080529ed"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="08052a08"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="10"> -<detaildata id="0" vmaoffset="0811eb7c"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0811ec36"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="0811eca6"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="0811ed34"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="0811ed61"> -<count class=""> -1</count> -</detaildata> -<detaildata id="5" vmaoffset="0811ed64"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="11"> -<detaildata id="0" vmaoffset="08247485"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="082475ae"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="082475b2"> -<count class=""> -1</count> -</detaildata> -<detaildata id="3" vmaoffset="082475cf"> -<count class=""> -1</count> -</detaildata> -<detaildata id="4" vmaoffset="08247657"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="12"> -<detaildata id="0" vmaoffset="0828fbb6"> -<count class=""> -2</count> -</detaildata> -<detaildata id="1" vmaoffset="0828fbc7"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="0828fc2d"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="13"> -<detaildata id="0" vmaoffset="0829a6e3"> -<count class=""> -2</count> -</detaildata> -<detaildata id="1" vmaoffset="0829a718"> -<count class=""> -2</count> -</detaildata> -</symboldetails> -<symboldetails id="14"> -<detaildata id="0" vmaoffset="08051f10"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="08051f19"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="08051f46"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="15"> -<detaildata id="0" vmaoffset="082979c8"> -<count class=""> -2</count> -</detaildata> -<detaildata id="1" vmaoffset="08297acd"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="16"> -<detaildata id="0" vmaoffset="080d6629"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="080d66a4"> -<count class=""> -1</count> -</detaildata> -<detaildata id="2" vmaoffset="080d67cd"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="17"> -<detaildata id="0" vmaoffset="081246d8"> -<count class=""> -2</count> -</detaildata> -<detaildata id="1" vmaoffset="081246f3"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="18"> -<detaildata id="0" vmaoffset="0822cf21"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0822cf35"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="19"> -<detaildata id="0" vmaoffset="082319c0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="082319d1"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="20"> -<detaildata id="0" vmaoffset="08248ad6"> -<count class=""> -2</count> -</detaildata> -</symboldetails> -<symboldetails id="21"> -<detaildata id="0" vmaoffset="080e23a1"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="080e2502"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="22"> -<detaildata id="0" vmaoffset="0804e9c0"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0804e9c6"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="23"> -<detaildata id="0" vmaoffset="0829a541"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0829a568"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="24"> -<detaildata id="0" vmaoffset="080f6bf9"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="080f6c3b"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="25"> -<detaildata id="0" vmaoffset="0811ef90"> -<count class=""> -1</count> -</detaildata> -<detaildata id="1" vmaoffset="0811efa1"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="26"> -<detaildata id="0" vmaoffset="080c3230"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="27"> -<detaildata id="0" vmaoffset="080baf11"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="28"> -<detaildata id="0" vmaoffset="080e74d5"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="29"> -<detaildata id="0" vmaoffset="08247fa4"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="30"> -<detaildata id="0" vmaoffset="08231a90"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="31"> -<detaildata id="0" vmaoffset="082345ab"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="32"> -<detaildata id="0" vmaoffset="08052c9b"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="33"> -<detaildata id="0" vmaoffset="08159a87"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="34"> -<detaildata id="0" vmaoffset="080d8487"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="35"> -<detaildata id="0" vmaoffset="081a205c"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="36"> -<detaildata id="0" vmaoffset="08146081"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="37"> -<detaildata id="0" vmaoffset="080fc7c2"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="38"> -<detaildata id="0" vmaoffset="080f9b7b"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="39"> -<detaildata id="0" vmaoffset="0811c876"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="40"> -<detaildata id="0" vmaoffset="0804f551"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="41"> -<detaildata id="0" vmaoffset="0828e8f7"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="42"> -<detaildata id="0" vmaoffset="08151111"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="43"> -<detaildata id="0" vmaoffset="08153650"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="44"> -<detaildata id="0" vmaoffset="08058550"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="45"> -<detaildata id="0" vmaoffset="0829a926"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="46"> -<detaildata id="0" vmaoffset="08299d55"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="47"> -<detaildata id="0" vmaoffset="080939f9"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="48"> -<detaildata id="0" vmaoffset="0808e43a"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="49"> -<detaildata id="0" vmaoffset="08052535"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="50"> -<detaildata id="0" vmaoffset="08052282"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="51"> -<detaildata id="0" vmaoffset="08059c50"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="52"> -<detaildata id="0" vmaoffset="081b9bfc"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="53"> -<detaildata id="0" vmaoffset="0816d881"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="54"> -<detaildata id="0" vmaoffset="080bc25e"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="55"> -<detaildata id="0" vmaoffset="0804ed5d"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="56"> -<detaildata id="0" vmaoffset="08120812"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="57"> -<detaildata id="0" vmaoffset="0811d15e"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="58"> -<detaildata id="0" vmaoffset="0811e88c"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="59"> -<detaildata id="0" vmaoffset="081695c1"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="60"> -<detaildata id="0" vmaoffset="081685fb"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="61"> -<detaildata id="0" vmaoffset="081e99f7"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="62"> -<detaildata id="0" vmaoffset="08224a47"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="63"> -<detaildata id="0" vmaoffset="080ee8e5"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="64"> -<detaildata id="0" vmaoffset="08063775"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -<symboldetails id="65"> -<detaildata id="0" vmaoffset="08058f9c"> -<count class=""> -1</count> -</detaildata> -</symboldetails> -</detailtable> -<bytestable> -<bytes id="0"> -5531C089E557565383EC6C8B5D0885DB0F8403010000BFC00E3108B90700000089DEF3A60F846E0100008D45BCC7442410806E0508C744240C808F0508C744240800000000C744240400000000890424E8674CE9FF803B5F0F845A010000BFCE0E3108B90800000089DEF3A60F85B60000008D730831DB8D55BC89F0E87FF7FFFF85C00F840F0200008B45C88D50013955CC0F8248010000C600288B45C883C00180FB018945C80F84530100008D50023955CC0F82AF010000C600298B45C8C64001008B4DC483C00239C80F84B70100008B55D48B5DC001D0F7D221D08B55CC89C629DE8945C889D729DF39FE0F8FBD00000089C28955C4890C24E870660E008D55BCC7442404000000008914248945B4E88653E9FF8B45B483C46C5B5E5F5DC38DB42600000000BFD70E3108B90700000089DEF3A60F8494000000BFDF0E3108B90700000089DEF3A60F8480000000BFE70E3108B90A00000089DEF3A60F8454010000BFF20E3108B90A00000089DEF3A60F8440010000BFFD0E3108B90D00000089DEF3A60F85440100008D730D31DBE9E1FEFFFF6690C70424C70E3108E8CC650E0083C46C5B5E5F5DC38D7426008955C8E93DFFFFFF807B01440F859CFEFFFF8D7302BB01000000E9A8FEFFFF908D730731DBE99DFEFFFF8DB6000000008D45BC890424C744240401000000E8D94CE9FF8B45C8E99DFEFFFF908D742600803E460F85A4FEFFFF83C601EB1E669066C7002C208345C8028D55BC89F0E8EDF6FFFFBB0200000085C0746C0FB6063C5A0F849100000084C00F848900000080FB0174D58B45C88D50023955CC73C18D55BCC744240402000000891424E86A4CE9FF8B45C8EBA9908D45BC890424C744240402000000E8514CE9FF8B45C8E936FEFFFF908D742600804DE402E940FEFFFF8DB426000000008D7DBCC744240400000000893C24E8F151E9FF31C0E967FEFFFF8DB6000000008D730A31DBE9B5FDFFFF8DB6000000008B45C8E9DDFDFFFF8D55BCC744240400000000891424E8B951E9FF31C0E92FFEFFFF909090909090</bytes> -<bytes id="1"> -5589E557565383EC7C8B1A89459C8955A4894DA0803B5F0F8493000000BFD0F93708B90800000089DEF3A60F8487010000BFD9F93708B90300000089DEF3A6755F0FB64303BEDDF937083C690F94C23C660F85F10100008B55A48D430489020FB643043C510F84350300003C740F84FD0200003C4B0F84250300008B4DA08B55A48B459CE8A7DAFFFF89C385DB74138B55A48B028038000F84DB0300008D760031DB83C47C89D85B5E5F5DC38D7426008D43018945940FB67301C70424083C3A0889F20FBEFA897C2404E89D81DBFF85C0740A807B025F0F84AB03000089F03C5F0F847901000089F280FA760F8446020000897C2404C7042401FA3708E86A81DBFF85C00F8413FFFFFFC7442404083C3A08891C24E8328DDBFF85C08945980F84F8FEFFFF8B45948B55A489020FB643013C510F84170300003C740F84870200003C4B0F84070300008B45A4E80FB1FFFF85C089C30F8845FFFFFF8B45A48B10891424895590E81187DBFF8B559039C30F8F2AFFFFFF83FB0A7E1ABF18F93708B90800000089D6F3A6750A807A094E0F84B60300008B45A089D989DEE88FB9FFFF8B45A403308930BB01000000E94A0200008DB6000000008B55A483C308891A89D0E899B0FFFF83F8FF89C60F84CEFEFFFF8B45A48B1083C20189108B459CE81CC3FFFF85C089C30F84B2FEFFFFF7DE897424088D75B6C7442404F4053808893424E8B57DDBFF8B45A089F2E83FBDFFFF8B45A089DAE835BDFFFF891C24E88983DBFF8B55A48B1A891C24E84C86DBFF01C38B45A48918BB01000000E961FEFFFF8DB4260000000084D20F8450FEFFFFBEF1F93708E9FDFDFFFF8DB600000000807B02760F8588FEFFFF807B03740F85A9FDFFFF807B045F0F859FFDFFFF8B45A48D730589306690BB0100000089DF8B5DA48DB6000000000FB60684C00F84940200003C510F84450200003C740F84F50100003C4B0F84350200000FB6C0F6840080253808040F8544020000C7442404083C3A08893424E8408CDBFF8945A48B4DA489F28B45A0E844B8FFFF8B75A403338933C7442404083C3A08893424E8498BDBFF85C0742639C60F8591FDFFFF8B459CBA06CC2B08F60004B8ED142E080F45D08B45A0E826BCFFFF8303018B33E964FFFFFF8D742600807B02740F85B0FDFFFF0FBE4303C70424083C3A0889442404E8167FDBFF85C00F84BFFCFFFF8B55A48D73048932E91DFFFFFF908D7426008B4DA08B55A48B459CC744240801000000C744240401000000C7042400000000E82BCEFFFF89C3E9EFFCFFFF8D7426008B4DA08B55A48B459CC744240401000000C7042400000000E883D3FFFF89C3E9C7FCFFFF8D7426008B4DA08B55A48B459CC744240801000000C744240401000000C7042400000000E8D3CDFFFF89C385DB0F84ABFCFFFF8B55A48B323B75980F859BFCFFFF8B45A483C601BA06CC2B0889308B459CF60004B8ED142E080F45D08B45A0E828BBFFFF8B55A48B3A893C24E84784DBFF89FA89C689C18B45A0E8EDB6FFFF8B45A40130E955FCFFFF8D76008B4DA08B55A48B459CC744240401000000C7042400000000E8D3D2FFFF89C3E97BFFFFFF8D7426008B45A089F2E8CEBAFFFFE91BFCFFFF908B45A483C3038B559C8918BB0100000083422C01E901FCFFFF8DB426000000008B4DA089DA8B459CC744240801000000C744240401000000C7042400000000E8F4CCFFFF89C78B33C7442404083C3A08893424E86C89DBFF85FF0F851BFEFFFF89FBE9B3FBFFFF908B4DA089DA8B459CC744240401000000C7042400000000E834D2FFFF89C7EBBE89D8E849ADFFFF8B338934248945A4E85883DBFF3945A40F8EB2FDFFFFBF01000000E9BCFDFFFF8B45A0BA3AF9370889FBE80ABAFFFFE957FBFFFF0FB642083A420A0F853DFCFFFF0FBEC089442404C70424083C3A08E8017DDBFF8B559085C00F841FFCFFFF8B45A0BA9AF9370889DEE8CBB9FFFF8B55A403328932C7442404083C3A08893424E8B088DBFF894598E904FCFFFF8DB6000000008DBF00000000</bytes> -<bytes id="2"> -5531C089E58B4D080FB61184D2741D83C1018DB6000000006BC0430FB6D28D44108F0FB61183C10184D275EC5DC36690</bytes> -<bytes id="3"> -5589E556538B5D088B432085C074095B5E5DC3908D7426008B1331C931F60FB60284C0743A8D76006BC9430FBEC083C2018D4C018F0FB60284C075EC89C8BA6F452101F7E289C829D0D1E801C2C1EA0A69D2F707000029D18D348D000000008B4D0C01F18B0189432089195B5E5DC390</bytes> -<bytes id="4"> -55B812C42B0889E583EC68895DF48B5D108975F88B7508897DFC8B7D0C85DB750F8B5DF48B75F88B7DFC89EC5DC366908B86A00000008B504085D2750B31C0EBE08DB4260000000039785876F08D0CBA8B018B50308945C485D20F849F0000008B45C48B481839CB730A8B55C489D8034230EBAD8B86A00000008B15E02E3A088B403C8955E039C774628B55C48B128955E48B55E48944240489342489542408E85BFFFFFF89C78B45C48B4818894DD4C744240805000000C7442404ECF53608C7042471632B08E89091DFFF8B4DD4897C2410895C240889742404894C240C890424FF55E031C0E935FFFFFF8B55C4BFABED36088B1239DA8955E47595EBAE89C28B40108B52148945D88B45C48955DC8B40188945E083C00183F8017646894DD489442404893424E8230DFEFF8B4DD485C08945E474288B45D88B55DC894DD4C744240C000000008944240489542408893424E8F8B0FDFF8B4DD485C074168B09894DC48B45C4C740300000000031C0E9ACFEFFFF8B55E08B45E4894DD48974240889542404890424E8F2A9FDFF8B4DD43945E0742AE82598FDFF8B4DD483F801740FC7042411000000E821A2FDFF8B4DD48B11C74218000000008955C4EBA48B45E48B55E0C60410008B018B55E4895030E989FEFFFF89F68DBC2700000000</bytes> -<bytes id="5"> -5589E583EC68895DF489C385D28975F8897DFC8B40288B4B2C8B7B308955D48945C48B4338894DC8897DCCC7432C000000008945D0C7432800000000C7433800000000C7433C000000008955C0752931C08B55C48B7DCC8B4DC88953288B55D0897B30894B2C8953388B5DF48B75F88B7DFC89EC5DC36690803A0074D2C745E000000000C745DC00000000C745D800000000F703000300000F85420100008914248955BCE8D3C2DBFF8B55BC83F8068945B40F86A8010000BF11F93708B90600000089D6F3A60F848C020000BF9D292B08B90600000089D6F3A60F8478020000837DB40A0F8676010000BF18F93708B90800000089D6F3A60F85620100000FBE4208C70424083C3A088955BC89442404E857BCDBFF8B55BC85C00F84430400000FB6003A420A0F84D50300008D7426008B55C0908D742600C74424045F000000891424E824BCDBFF85C089C6745C8078015F8D500175E180385F7526B95F00000031D2EB088D76000FB64C100183C20180F95F74F383FA027E088D7402FE85F674288B533085D20F84430100000FB6160FB6C2F6840080253808040F850F02000080FA740F8406020000837B2802740831F6837B2C0275618B55D48D45D8E88DF8FFFF8B75D4893424E8AEC1DBFF8D14068955D4BE01000000EB1F908D7426008D55D489D88D4DD8E81339000085C089C60F84960400008B55D4803A000F85950000008B432883F8020F84A1000000837B2C020F841F010000837B3C010F844D01000089D8E836F2FFFF85F675128D45D8E89AF1FFFF31C0E914FEFFFF8D76008D45D8B901000000BA12C42B08E8DEF3FFFF8B45D8E9F7FDFFFF8DB600000000F703003800000F84C4FEFFFFBF21F93708B90700000089D6F3A60F853801000083C2078955C08955D4C7432C02000000E99BFEFFFF8D76008D55D489D88D4DD8E85B2F000089C6E957FFFFFF8D742600BA229B2C088D45D8E853F7FFFFC7432800000000E95AFFFFFF8DB426000000003975C00F84080100008B03F6C408740A807E02700F8450010000F6C42074140FB646023C740F848E0000003C700F84E50100003975C00F845F010000807E02000F8494FEFFFF8D55D489D88D4DD8893424E83AFBFFFF89C685F60F84D3FEFFFFE9C2FEFFFF8D7600BA409B2C088D45D8E8CBF6FFFFC7432C00000000E9D2FEFFFF8DB4260000000083C2068955C08955D4C7433C01000000E9C3FDFFFF8D7600BA49F937088D45D8E893F6FFFFC7433C00000000E99AFEFFFF807E036D0F8570FFFFFF8B55C0891424E8DEBFDBFF8D4DD8890C248D55D489C189D8E8B01D00008B55D4E91CFEFFFFBF29F93708B90700000089D6F3A60F8564FDFFFF83C2078955C08955D4C7432802000000E94FFDFFFF8B7DC08B4DC00FB6570283C1020FB6C20FB784008025380889C783E704751880FA51741380FA74740E80FA4B740980FA480F85C1FEFFFF8B03F6C41C740885FF0F8544010000F6C43C750483432801894DD489CAE99AFDFFFF807E03740F85A6FEFFFF8B7DC031C083C9FF8D55D4F2AE8D45D889042489D8F7D183E901E8FD1C00008B55D4E969FDFFFF8B7DC00FB657020FB6C2F6840080253808040F8589FEFFFF80FA740F8480FEFFFFF703003C00000F8503010000803E5F750E8B45C083C00180385F74F88945C08B45C0C74424045EDA3008890424E8EEC0DBFF85C00F84E4FCFFFF807802000F84DAFCFFFF8904248D55D489D88D4DD8E880F9FFFF89C6E941FEFFFF900FB646033C730F849FFEFFFF3C740F8507FEFFFFE992FEFFFF0FB642093C4474353C490F851FFCFFFF83C20B89D88955D48D4DD8C74328020000008D55D4E8D535000085C00F857DFEFFFF8B4DD4894DC0E9F2FBFFFF83C20B89D88955D48D4DD8C7432C020000008D55D4E8A835000085C00F8550FEFFFF8B55D48955C0E9C5FBFFFF8D45D4894DD4E8EAE7FFFF8B55D48D45D8E8CFF4FFFF8B55D431C083C9FF89D7F2AEF7D18D540AFF8955D4E939FCFFFFC744240808000000C744240431F93708893C24E849C3DBFF85C00F85DDFEFFFF89F883C0088945E40FB657088D7DE484D2743089F8E88BE7FFFF83F8FF0F84BAFEFFFF0345E48945E40FB61080FA5F75DE8078015F75DC8D50028955E40FB65002EBCC8B45D489F789DE8D50088955D40FB6400884C074668D45D4E845E7FFFF83F8FF89C3744E8B55D48914248955BCE84CBDDBFF8B55BC39C37F3989D98D45D8E81FF3FFFF035DD4895DD40FB6033C5F75C1807B015F75BFBA06CC2B088D45D8E8AFF3FFFF8B45D48D50028955D40FB64002EB9F89F389FEE91FFEFFFFBA3AF9370889F38D45D8E8C8F3FFFFE923FDFFFF8B55D48955C0E906FAFFFF908DB42600000000</bytes> -<bytes id="6"> -5589E557565383EC2C8B7D088B750C8B5D148B47088B90A80100000FB69280010000893424C0EA078855E4FF504C0FB655E484D2894308745F8B47088D5604891424FF505089038B47088D5608891424FF504C8943040FB6460C88430C0FB6460D83C60E88430D8B4708893424FF50583DFFFF0000894310742E3DFFFE0000BA0100000076082D0000010089431083C42C89D05B5E5F5DC38B47088D5604891424FF504C8903EB9F8B451031D285C074DD8B55108B4708891424FF504CBA0100000089431083C42C89D05B5E5F5DC390</bytes> -<bytes id="7"> -5589E583EC188B450C8B00894424048B45088B00890424E89020F3FFC985C00F94C00FB6C0C38D76008DBC2700000000</bytes> -<bytes id="8"> -5589E557565383EC6C8945C08B4514894DB48855BFC645E70085C0C745E000000000C745DC00000000C745D8000000000F84360400008B7D1885FF0F84E70300008B75C0C745C40000000085F6740C8B55C08B42048B400C8945C4A1B0D63B08C745B000000000C745B8000000008B782085FF0F84190100008DB42600000000A158703B08893C2489442404E89F59E9FF85C08945CC740A8B1885DB0F84E60000008B9F80000000C745C8000000008B0B85C90F84FA000000897DD4EB3D6690A158D63B0885C07402FFD0891C24E85D3EF6FF85C089C674150FB6003C2B74043C2D750A807E015B0F842201000083C3288B3B85FF0F84B50000008B75D4893424E8AA56E9FF8B157CD63B0885D28945D08B7B0474AAE8C5DEE9FFEBA38D76008B4F3C8B473889CA29C283FA030F8E850200008B573483C00489473839D00F849E0200008B5F4401D8F7D321D889CB89C62B5F302B773089473839DE0F8F4E02000089C18B75C8A158703B08894F3489328954240889442404893C24E81F59E9FF8DB426000000008B3F85FF0F85EEFEFFFF8B5DB88B75188B4D148B45B08919890683C46C5B5E5F5DC38DB6000000008B7DD48B75CC85F60F8462FFFFFF8B45CC8B55C8391074C0C744240805000000C7442404AACA2A08C7042400000000E80822E9FFC7442410CF123108C744240C08153108C744240401050000C704249512310889442408E8E4ECE9FF8D7426008B45D0897C2404C7442408E0DD3B08890424E8D9A3F9FF89C78B45C085C074408B55C43B3A0F82B3FEFFFF3B7A040F83AAFEFFFFEB2A66908D041285D2B9000400000F44C1A350703B0889442404A154703B08890424E8B5FAE9FFA354703B08893424E8D423E9FF8B1550703B0883C00139D073C3A154703B0889742404890424E86624E9FF8D45D8894424108D45E789442404A154703B088D55DC8D4DE08954240C894C2408890424E881F9FFFF85C00F8427FEFFFF8345C801807DBF00740D0FB645BF3845E70F8510FEFFFF8B4DB485C974228B45E085C00F84FEFDFFFF8B55B489442404891424E88D2AE9FF85C00F85E7FDFFFF8B550885D274228B45DC85C00F84D5FDFFFF8B4D0889442404890C24E8642AE9FF85C00F85BEFDFFFF8B450C85C074228B45D885C00F84ACFDFFFF894424048B450C890424E83B2AE9FF85C00F8595FDFFFF893C24E84F91F2FF85C089C70F8480000000890424E8BD3BF6FF893424894424048945ACE80A2AE9FF8B55AC85C0757A837D100074138B55B08B4D108B75B88D04918B108914B189388345B8018345B001E93FFDFFFF90894F38E9ACFDFFFF8D472C890424C744240404000000E80120E9FF8B47388B57348B4F3C83C00439D08947380F8562FDFFFF804F5402E959FDFFFF837D100074098B4DB88B7510891C8E8345B801E9EBFCFFFF8974240889542404C7042434193108E8F91AEAFF837D100074DD8B45B88B5510891C82EBD2C744240805000000C7442404AACA2A08C7042400000000E8A81FE9FFC7442410C0123108C744240C08153108C744240489040000C704249512310889442408E884EAE9FFC744240805000000C7442404AACA2A08C7042400000000E8641FE9FFC7442410B1C82E08C744240C08153108C744240488040000C704249512310889442408E840EAE9FF</bytes> -<bytes id="9"> -5589E557565383EC3C8B5D20837D18060F84320100008B45080FB6108B4D248B412085C00F84560100008B40080FBE40180FBED239C20F8434010000837D18060F84BA0100008B359C3F3A0883FE7F0F844B0100008B3D983F3A088D04B6C1E0038945E48D04078D50048945E08914248955DCC744240400000000E850C60C008B4DE48B55DCC6443910018B4D24891424894C24108B4D10894C240C8B4D0C894C24088B4D08894C2404E831C00C008B551485DB8B45E08950088B551C8B4DE4C74014000000006689543912742C8B55248B82744000008B927840000039D0720EEB17908D74260083C00C39D0730B391875F58D14B68944D7148D04B60FB65D188D14C78D4A10806111FC8D4204C7421800000000C7422400000000C74228000000008B552483059C3F3A08018305A03F3A08018382884000000188591083C43C5B5E5F5DC366908B4D080FB61180FA670F85C5FEFFFF8B7508BF8AD52A08B90E000000F3A6756C31C0EBD28D74260083450801836D0C01E9BFFEFFFF8D7600A1B0D63B088B401C85C0740B8B402085C00F8593FEFFFF31C0E993FEFFFF6690C7442404DC13000031F6C7042401000000E84A640000C7059C3F3A080000000089C7A1983F3A088907893D983F3A08E987FEFFFF8B4508C744240498D52A088855DC890424E8F294FFFF0FB655DC85C00F8526FEFFFF31C0E941FFFFFF8D76008B7508BFA7D52A08B90E000000F3A60F8531FEFFFF31C0E922FFFFFF8D742600</bytes> -<bytes id="10"> -5589E557565383EC6C8B75088B55108B5D180FB6460C3C0B0F84AA0000008B4B6485C90F845F0400003C060F84DF0100008B4D0C89D7803C11000F8530010000894DC8C745CC000000008D45E0C744240801000000894424048B4364894DE0894DBC890424E816BF17008B4DBC89C28B0085C00F84370100008B55CC03108916807804007522895C2408893424C744240400000000E846FEFFFF8D65F45B5E5F5DC38DB60000000083C004895C240889342489442404E825FEFFFF8D65F45B5E5F5DC3908D7426008B7D1485FF0F84D50000008B4B3C8D7A018B4338894DD029C139CF0F8FE703000001F88B7B3489433839F8897DD40F842C0400008B4B4401C8F7D121C88B4DD089C72B7B30894338897DD089CF2B7B30397DD00F8F4701000089C18B45D4894B348B4D0C8955B8890689542408894C2404890424E82BCDF2FF8B068B55B8C6041000893424C744240800000000C744240400000000E87EFDFFFF8D65F45B5E5F5DC38DB6000000008D421F83E0F029C48B450C8D4C242783E1F0890C24894DBC8954240889442404E8D7CCF2FF8B4DBCC6043900E99FFEFFFF8DB426000000008B450C8906EB9B900FB6460C84C00F85B4000000C6460C018B45C88955B8894DBCC744240400000000890424E877B009008B55B88B4DBC85C08945C40F84F9010000C6460C058B45C48955B8894DBC890424E8BDCCF2FF8B4DBC8B55B88945C8E9AF0000008D76008D422783E0F029C48D4C242783E1F08D4108C70123234A418D7A08C74104564124248945C88B450C895424088955B8894DBC894424048B45C8890424E81BCCF2FF8B55B88B4DBCC6440A0800C745CC08000000E9E2FDFFFF894B38E9B3FEFFFF3C010F8448FFFFFF3C050F8440FFFFFFC645C4003C030F84EC000000807DC4000F85E20000003C060F84F60200003C010F840A0100003C040F8402010000C745C800000000C745C4000000003B4D0C0F85330100008B451485C00F85280100008B7DC88B433883C705897DC88B7B3C897DD029C7397DC80F8F4B0200008B7B340345C839F8894338897DD40F84C20200008B7B4401F8F7D721F88B7DD0894338897DC089C72B7B30897DD08B7DC02B7B30397DD00F8FEE0100008945C08B45D48B7DC08902897B3489088B7DC485FF0F84B30100008B4DC48955B8894C24048B0283C004890424E810CCF2FF8B7DC4893C24E87981F3FF8B55B88B02E908FDFFFF8DB426000000008B45C88955B8894DBCC74424040B000000890424E84F0E17008B55B88B4DBC85C08945C40F8433020000C6460C03E943FEFFFF908D7426008B45C88955B8894DBCC744240400000000890424E8A77909008B55B88B4DBC85C08945C40F84D4FEFFFFC6460C04E90BFEFFFF0FB6460C3C010F9445C4E992FEFFFF8DB6000000008B45C88D7C38068B4338897DC08B7B3C897DD029C7397DC00F8F520100008B7B340345C039F88945D48943380F84A20100008B45D40343448945B48B4344F7D02145B48B45B48943382B43308945C08B45D02B43303945C00F8FB20000008B45B48945D08B45D0893A8955B88943348B45C88D4407058907894C24048B028B00890424E8ECCAF2FF8B55B8E9B2FEFFFF8955B8C7442414806E0508C7442410C08E0508C744240C00000000C7442408F09E1108C744240460E81108C7042400010000E851B417008B55B88943640FB6460CE95BFBFFFF66908D432C8904248955B8897C2404E85AC7F2FF8B4B3C8B43388B55B8894DD0E9F6FBFFFF908D7426008B02C64004008B02E974FBFFFF8D76008B45D0894338E949FFFFFF908D7426008B45C0894338E90AFEFFFF908D742600804B5402E9CBFBFFFF8DB426000000008B45C88955B8894DBC894424048D432C890424E8ECC6F2FF8B7B3C8B43388B4DBC8B55B8897DD0E989FDFFFF8D7426008B45C08955B8894DBC894424048D432C890424E8BCC6F2FF8B7B3C8B43388B4DBC8B55B8897DD0E982FEFFFF8B45C88955B8894DBCC744240407000000890424E8330C17008B55B88B4DBC85C08945C47424C6460C06E92BFCFFFF804B5402E935FDFFFF804B5402E955FEFFFF0FB6460CE9B8FCFFFF0FB6460CE9B7FCFFFF89F68DBC2700000000</bytes> -<bytes id="11"> -5589E557565383EC6C8B4D108B5D0C85C90F85C90000008B550831F68B82A000000083C0648945D48B55088B4DD48B42088B79188B80A8010000C1EF0485FF8945C80F851401000031F631C9C745D000000000C745CC000000008B45C88B503085D274198B45CC894DB0897C2408894424048B4508890424FFD28B4DB085DB742585F67E1B8B55CC31C08DB60000000089148383C00183C23439F075F38D1CB3C703000000008B5DD085DB74118B55D0894DB0891424E8D142E0FF8B4DB085C974108B45D43948307408890C24E8BA42E0FF83C46C89F05B5E5F5DC38D7426008B4D088B81A00000008B904C0200008DB0000100008BB8500200008D88680100008975D431F685D20F45F185FF75418B905402000085D20F840BFFFFFF8BB8C402000085FF0F85FDFEFFFF8B4508C744240400000000890424E842B2000085C00F85E2FEFFFF83CEFFEB87908D7426008B88C002000085C975B5EBCF8B45D48B5508C744241800000000C744241400000000C744241000000000C744240C00000000897C240889442404891424E89E3D000085C089C174AE6BC734894DB0894424048B4508890424E813BFFEFF8B4DB085C08945CC0F844703000085F674598B5618D1EA39FA8955D00F848D0200008B45088B35E02E3A088B50048975C4C744240805000000C744240464EA36088955ACC7042471632B08E8FF41E0FF8B75D08B55AC897C240C8974240889542404890424FF55C48B4DB0C745D000000000C745C4000000008D04BF31F68D04818D51148945C08955BC8B45BC3945C08B55CC0F8614FEFFFF897DBC8B7D0889C6895DB489D3894DB866908B168D43188953188B56048950048B56088950088B560C89500C8B5610893B8950108B55D4C744240C0000000089742408893C2489542404E87BC700008943048B068943088B461085C00F851B010000C74310C02F3A08F647344274098B43108B401C2943080FB6460C89C2C0EA0480FA010F84310100000F830D010000834B0C010FB6460C669083E00F83F80A7710FF248500EB3608814B0C0401000066908B551085D27407814B0C008000008B45C485C074228B55C48D45E689442408893C2489542404E86D1400000FB745E68345C402668943308B4DC88B412C85C07409895C2404893C24FFD083C61483C3343975C00F8707FFFFFF89DA8B4DB889D68B5DB42B75CC897D088B7DBCC1FE0269F6C54EECC4E9E8FCFFFF814B0C00004000E97AFFFFFF814B0C00001000E96EFFFFFF814B0C00000800E962FFFFFF814B0C00000400E956FFFFFF814B0C04400000E94AFFFFFF834B0C08E941FFFFFF814B0C00000100E935FFFFFF83F8F10F848400000083F8F275618B4604C74310002F3A08894308E9CCFEFFFF80FA02743A80FA0A0F85EFFEFFFF814B0C000080000FB6460CE9DFFEFFFF8B561083FAF20F84D3FEFFFF85D20F84CBFEFFFF834B0C020FB6460CE9BEFEFFFF814B0C800000000FB6460CE9AEFEFFFF89442404893C24E882140000B980303A0885C00F44C1894310E95FFEFFFFC7431080303A08E953FEFFFFC744240C000000008B56148B4610894DB0895424088B550889442404891424E8705FFEFF8B4DB085C0757B8B4618894DB0890424E8DBAEFEFF8B4DB085C08945D074428B46188B5508894424048B45D0894DB089542408890424E86558FEFF8B4DB03B461875288B45D08B75D0C745C40000000083C00285F60F4445C48945C4E945FDFFFF837E1800751B31C0EBB7837DD00074118B55D0894DB0891424E88D3EE0FF8B4DB08B75D4394E300F8438FCFFFF890C2483CEFFE8733EE0FFE9B4FBFFFF6690</bytes> -<bytes id="12"> -5589E581EC98000000833D043C3A08FF895DF48B55088975F88B5D0C897DFC0F84B30000008D759431C0B91500000089F766F7C304FFF3AB89D8895D9474398B4D94F6C5417548F6C104756C6685C90F88A300000089F0E804F9FFFF89C789F0E8EBEDFFFF89F88B5DF48B75F88B7DFC89EC5DC38D742600A1043C3A082504FF000009D88945948B4D94F6C54174B889142489558489442404E8428000008B558485C089C775BE8B4D94F6C5407498EBB48DB42600000000891424895584E8FD7F00008B558485C089C775998B4D94E978FFFFFF8D742600891424E820D200008B5DF48B75F889C789F88B7DFC89EC5DC38DB42600000000895C2404891424E8ECE7FFFF8B5DF48B75F889C789F88B7DFC89EC5DC38D7426008DBC2700000000</bytes> -<bytes id="13"> -5589E557565383EC4C8B7508837D14018B46108945E00F846C0100008B4E388B451089CFC1E704894DDC8D8FE0203808F761048B490C8945D08B45108955D429D0D1E88D1C108B5510D3EB0FAF9FE02038088B7E0C83461C0129DA89D38D14950000000001D78B0785C00F84DF00000083F80174238B4D0C8955CC890424894C2404FF56048B55CC85C00F85B00000008B463831FF8945DC8B55DC8B4510C1E20489D181C1E02038088955D0F761088B490C8945C08B45108955C48B55C483C0018945DC8B451029D0D1E801D0D3E88B4DD08B91E020380883EA020FAFC28B56202945DC8D742600035DDC83C20189562089D82B45E0395DE00F46D88D049D000000008945E403460C8B0885C9744983F901741C8B550C890C2489542404FF560485C0755389F88B562089C7EBBA669085FF0F45C789C7EBAF8DB426000000008B7E0C01D783C44C89F85B5E5F5DC331FF8DB426000000008B451485C0745185FF7459836E180189F8C7070000000083C44C5B5E5F5DC3908B7DE4037E0C83C44C5B5E89F85F5DC38D14408B4614C1E00239C20F8783FEFFFF89F0E8E0FBFFFF85C0740C8B56108955E0E96DFEFFFF9031FF83C44C89F85B5E5F5DC38D3C9D0000000083461401037E0CE976FFFFFF90</bytes> -<bytes id="14"> -5589E583EC088B450C8B55088B4804394A04721C77228B128B0085D20F95C185C0751D31C084C9740C8DB42600000000B8FFFFFFFFC9C390B801000000C9C39084C974F489450C895508C9E93CA0FFFF</bytes> -<bytes id="15"> -5589E557565389C383EC6C8955A4894DA080385F0F842E010000BF18F93708B90800000089DEF3A6752E0FB643083C5F74083C2E0F85FE0000000FB643093C490F94C20F859F010000807B0A5F0F84A5010000908D74260031F631C0F645A4100F84C7000000891C2489E7E84C3EDBFF895DB4895DC0C745C800000000C745D400000000C745DC000000008D14038955B88B55A48945D8C745E000000000C745E4000000008955BC8D1400C1E0028955CC8D141083C01E8D14951E00000083E0F083E2F029D48D54241F29C48D44241F83E2F083E0F083FE018955C48945D00F84D300000073798D45B4890424E85EC7FFFF89C3F645A401740C8B45C08038000F85D200000085DB0F84CA0000008B45088944240C8B45A0895C2404894424088B55A4891424E865FDFFFF89FC8D65F45B5E5F5DC38D76003C240F8518FFFFFFE9F5FEFFFF8D76008078015ABE010000000F85C3FEFFFFE90AFFFFFF8D74260083FE03778283C30B895DC0891C24E8493DDBFF89DA89C18D45B4E841C0FFFF31D283FE020F95C283C23CC704240000000089C18D45B4E8A5BFFFFF8B75C089342489C3E8143DDBFF01C68975C0E942FFFFFF8DB6000000008D45B4C744240401000000890424E8D5DEFFFF89C3E922FFFFFF8DB60000000031C089FCE94CFFFFFF8DB426000000003C440F8568FEFFFFE954FEFFFF8D760089D6C1E61FC1FE1F83C603E95EFEFFFF908DB42600000000</bytes> -<bytes id="16"> -5589E557565383EC6C8B7D088955D8894DE48945E0890424E87385F7FF8B55E08B4DE485C98945D08B45E08B804C4000008945CC8B42208B40748945C00F8EED00000083C22C31DB8955B8C745C412C42B08C745BC00000000C745D400000000EB128DB60000000083C301395DE40F8EBC0000008B349F8B460485C074EA80380074E58B4DE08B41208B500889742404890424FF921801000085C00F85970000008B56108B420883F8FF0F84270500008B4DE0837DD8018B895C4000008B0481894DB48945DC0F849C0000008B460CF6C4400F84B00000008B4DD485C9740F8B4DCC8B55D48B41208942048951208B560483C3018914248955ACE82D53F7FF8B4DB88B55AC894C240889142489442404E84BE10400395DE48975BCC745D4000000008945C40F8F49FFFFFF908D74260083C46C5B5E5F5DC38B45D0890424E84D94070085C00F841DFFFFFF8B55E08B4DD08974240889542404890C24E84FAD0700E902FFFFFF669081FAC02F3A080F849C0100008B45C085C00F85E9FEFFFFE948FFFFFF8D742600F6C4010F85D7FEFFFFA8830F84CFFEFFFF8B4A1C894DC88B4E08014DC881FA80303A080F841F0200008B4A14894DA48B4DC8034DDCF745A400040000894DB48B4DC80F444DB4F645A410894DC80F8494010000A8820F84BA0100008B4E04C745B001000000894DB48B45B48955AC890424E82E52F7FF8B4DE08B55AC894C240C8B4DC8895424088B55B0890C248B4D0C8954240489C28B45B4E84AFDFFFF85C08945DC0F8437FEFFFF837DD80289F00F84DB01000085C074098B401C8B55DC8942148B4DDC8B45C48B55D0894118894C240889742404891424E87AC80700837DB0010F85F8FDFFFF837DD8020F85EEFDFFFF8B4E04890C24894DB4E8A451F7FF83F8040F8ED7FDFFFF8D50FC8B45B4C744240493992C088955AC01D0890424E8C058F7FF8B55AC85C00F85B1FDFFFF8B45E08B4DC88944240C8B4610890C24B901000000C744240405000000894424088B45B4E890FCFFFF85C00F8480FDFFFF8B4DDC8B51148B4DD08950148B55C48950188944240889742404890C24E8D6C70700E959FDFFFF90F6460C080F845AFEFFFF8B4E088B55E085C98B4220894DDC0F843AFDFFFF8B506485D20F842FFDFFFF895DC889CB8B4DB48DB42600000000F642140174128B421C39C3720B03422439C30F828A0100008B520C85D275E18B5DC8E9F9FCFFFFF645A4010F84EFFCFFFFA8820F849F000000F645A4020F84170100008B4604C745B0020000008945B4E953FEFFFF8B4E04894DB40FB60980F92E884DDC7409A801741280F924750D8B45B48078014C0F84A4FCFFFFC745B006000000E920FEFFFF837DD8020F84FE0000008B4628050001000083F8020F87DB0000008B0485B4992C0883F8048945B00F842D0300008B4E04894DB480392E0F845BFCFFFF8B45DC0145C8E9D8FDFFFF8B4614E91DFEFFFFA8010F848C0000008B4604C7042470992C088955AC894424048945B4E82B57F7FF8B55AC85C00F85090100008B4DE08B896C400000894DB0837DB0000F885D010000837DD4000F84E20100008B4DB08B45D483C104833C88000F858C0100008B56108B421C03460881FA80303A088B75DC8B55D48D34300F45C689048AE9C6FBFFFF8B4E04C745B003000000894DB4E93CFDFFFF8B4E04C745B000000000894DB4E92AFDFFFF8B4E04C745B004000000894DB4E918FDFFFF8B4604C745B0040000008945B4E906FDFFFF8B42088B5DC8894DB483F8FF8945C80F84370200008B76048955AC893424E81F4FF7FF8B55AC8B4DE0C744240405000000895424088B55B4894C240C8B4DDC8945B08B45C8030C8289F08B55B0890C248B4D0CE82EFAFFFF85C00F841EFBFFFF8B55C4895018E913FBFFFF8B45B4C7042479992C088955AC89442404E80156F7FF8B55AC85C00F854B0100008B4DE08B896840000083F9FF894DB00F85CDFEFFFFC744240805000000C744240450D52A08C7042400000000E8254CF7FFC7442404B3010000C7042466992C0889442408E81117F8FF8B4DA483E10283F90119C9F7D183C108894DB0E919FCFFFFC744240805000000C744240410CE2A08C7042400000000E8D94BF7FFC74424040A010000C7042466992C0889442408E8C516F8FF8B10894DA8C744240805000000C74424040C982C088955ACC7042400000000E89D4BF7FF8B55ACC70424E0B839088954240889442404E80AD7F7FF8B4DA8E931FEFFFF8B45E08B886C4000003988684000000F4D88684000008B807040000039C10F4CC88D148D14000000894DA88914248955ACE8CC24F8FF8B55ACC744240400000000895424088945D4890424E86E48F7FF8B4DA88B45D4837DBC0089480C0F84B90000008B55BC8B4DD48B42048901E9ABFDFFFF8B45B4C7042484992C088955AC89442404E89554F7FF8B55AC85C00F85DDFEFFFF8B4DE08B897040000083F9FF894DB00F8561FDFFFFC744240805000000C7442404A8972C08C7042400000000E8B94AF7FFC7442404B5010000C7042466992C0889442408E8A515F8FF8B46048945B4E9BAFAFFFFC744240805000000C744240410CE2A08C7042400000000E87A4AF7FFC744240430010000C7042466992C0889442408E86615F8FF8B5604C744240805000000C7442404CC972C08C70424000000008955ACE8404AF7FF8B55ACC70424E0B839088954240889442404E8ADD5F7FFE9C4FCFFFF908DB42600000000</bytes> -<bytes id="17"> -5589E557565383EC3C8B5D108B750C8B4B108B530C8D7E0189C829D039C77F688B430801FA89530C39C2747A8B7B1801FAF7D721FA89D72B7B0489530C897DE489CF2B7B04397DE47F3689D1894B088B5D0801F3395D0874168B550889C189DF0FB61A83C201881983C10139D775F1C604300083C43C5B5E5F5DC3908D742600894B0CEBC78D7600897C2404891C24E8B86EF2FF8B530C8B43088B4B1001FA39C289530C7586804B2802EB808D742600</bytes> -<bytes id="18"> -5589E583EC38895DF48B5D108975F88B4D0C897DFC8B838400000085C074288B400431D28B731C8B7B208945E489C801F011FA83FA00765083FF0077553B75E473508B4DE429F18B531031F631FF31C085D274218B4508894C2408C744240C00000000891C2489442404FF1283F8FF740A89C631FF01731C117B208B5DF48B75F88B7DFC89EC5DC33B45E476BA83FF0076AB8B5DF431C08B75F88B7DFC89EC5DC3EB0D90909090909090909090909090</bytes> -<bytes id="19"> -5589E58B55085D0FB642010FB612C1E00809D0C38DB6000000008DBF00000000</bytes> -<bytes id="20"> -5589E58B45088B550C8B88A000000031C039515876098B41408B04908B402C5DC3EB0D90909090909090909090909090</bytes> -<bytes id="21"> -5589E557565383EC3C8B4508890424E89C1B040085C089C30F84CC0200008B4508895C2404890424E8130404003B05C4773A088945E0720C3B05C8773A080F82B40100008B55E0895C2404891424E80D04F7FF89C6A1B0D63B088B782085FF0F8406010000895DE48B5DE0EB0D8D76008B3F85FF0F84EE0000008B874040000085C074EC8B40248B55E4C744241000000000895C2408897424048954240C893C24FF503C85C074C88B5DE48B45E0895C2404890424E816FFFFFF85C00F84A900000085F60F84160200008B50048B0A3B4E040F82930000008B52048B00890DC4773A08891DCC773A088915C8773A08A3D0773A088B751085F674218B4508895C2404890424E8F601040085C00F850E010000A1C4773A088B551089028B4D0C85C9740AA1D0773A088B550C89028B5514B80100000085D274268B4508895C2404890424E8B801040085C00F85F0000000A1C8773A088B55148902B80100000083C43C5B5E5F5DC3908B5DE485DB0F843201000085F60F842A0100008B068B7E04891DCC773A08A3D0773A088B4614893DC4773A0885C075788B4E288D562885C90F8456010000895DE48D465089FB66908B7A0439FB740C8B52103B56100F84AD0000008B0889C283C02885C975E28B5DE48B0B8B53048B411C8BB25C4000008B5108034124030496A3C8773A08E902FFFFFF8DB6000000003B1DCC773A080F8540FEFFFFE9EBFEFFFF8DB4260000000001F8A3C8773A08E9D8FEFFFF8D742600A1C4773A08895C2404890424E8AF0104008B55108902E9E1FEFFFF908D742600A1C8773A08895C240483E801890424E88C0104008B551483C001890283C43CB8010000005B5E5F5DC38DB4260000000085C98B5DE40F8456FFFFFF8B138B4B048B422403421C8B895C4000008B520803049139F80F864EFFFFFF893DC8773A08E94FFEFFFF8B550C85D274098B550CC702000000008B451085C074098B4510C700000000008B7D1431C085FF0F848DFEFFFF8B5514C70200000000E97FFEFFFF8B50048B0AE9EEFDFFFF8B5508891424E8BBCEF6FF89C3E922FDFFFF8B0B8B53048B41248BB25C4000008B510803411C030496E9D0FEFFFF908DB42600000000</bytes> -<bytes id="22"> -5589E58B45085D8B4024C3908D742600</bytes> -<bytes id="23"> -5589E557565383EC5C8945E08B55E08B400C8B5A108945C88B72388D0C9889D08B52142B5018894DD48D041239C30F8285010000C1E20339DA0F82710100008B55E08B423085C00F848A010000C744240804000000895C24048B522C891424FFD089C231C085D20F84340100008B4DE08B41182941148B45C889510C895910897138C74118000000008945E4EB1266908345E4048B55E43955D40F86EA0000008B55E48B1283FA018955DC76E38B4DE0891424FF118B55E08945D88B4238C1E0048D98E02038088B80E02038088B4B0C8945D08B45D8F76304894DCC8945C08B45D88955C48B55C429D0D1E88D04028B55D8D3E88B4DE00FAF45D08B491029C28B45E08955B4894DB08B700C8D3C968B0F85C9746083F9010F84FD0000008B45D8F763088B7DD80FB64DCC8B5DD88945C08B45B429D7D1EF01D783C301D3EF8B4DD08955C48B55B083E9020FAFF929FBEB0F8DB60000000083F9010F84BA00000001D889C129D139C20F46C18D3C868B0F85C975E38345E4048B45DC8B55E43955D489070F8716FFFFFF8B4DE08B412885C0745C8B55C8891424FFD0B80100000083C45C5B5E5F5DC38DB4260000000083FB200F8686FEFFFFE882FBFFFF8B55E089C6C1E0048B98E02038088B423085C00F8576FEFFFF8B55E0C744240404000000891C24FF522489C2E974FEFFFF908B4DE0B8010000008B513485D274A28B45C8894424048B412C890424FFD283C45CB8010000005B5E5F5DC3E80C09DBFF</bytes> -<bytes id="24"> -5589E583EC38895DF48B5D088975F88B4D10897DFC8B750C85DB0F84EE00000085F678628B033B70047D5B8B7B1085FF0F85940000008B781C8B40208B53080314B785C98B04B0742789442408894C2404891424E8E34BF5FF8B430CC60430018B5DF48B75F88B7DFC89EC5DC38D760089442408C744240400000000891424E8E846F5FFEBD3C744240805000000C7442404AACA2A08C7042400000000E88A49F5FFC7442410007A2D08C744240C487F2D08C744240474030000C70424E57D2D0889442408E86614F6FFC744240805000000C7442404AACA2A08C7042400000000E84649F5FFC7442410F07D2D08C744240C487F2D08C744240475030000C70424E57D2D0889442408E82214F6FFC744240805000000C7442404AACA2A08C7042400000000E80249F5FFC7442410D47D2D08C744240C487F2D08C744240473030000C70424E57D2D0889442408E8DE13F6FF8DB426000000008DBC2700000000</bytes> -<bytes id="25"> -5589E583EC188B550C8B4D0889D088510C8D50FD80FA0176173C0674133C05740F3C07740BC7410800000000C9C36690C744240800000000C744240400000000890C24E8A8F8FFFFC9C38DB600000000</bytes> -<bytes id="26"> -5589E5575383EC10C704248C030000E83C5DF9FFB9E300000089C2A348733A0889D731C0F3ABA180D5390885C0741FBB80D539088D742600E8E3FEFFFF8B1085D27530891883C3108B0385C075EAC70520DB3B0800000000C70524DB3B0800000000C70528DB3B080000000083C4105B5F5DC38B1BC744240805000000C7442404D8572C08C7042400000000E83B83F8FF895C240CC7442404D1000000C70424FE572C0889442408E8234EF9FF8D7600</bytes> -<bytes id="27"> -5589E557565383EC2C8B75088B7D18C7042474000000E8C5E1F9FF89FA89C38D482C8D4064894424088D4330894424048D436089042489F0E8B3FEFFFF85C089436C740E8D7426008958688B407085C075F68B432C85C074038958608B436085C0740389582C8B433085C074038958648B436485C074038958308B1785D2741D8B4204897424048955E0890424E86A11F9FF8B55E085C00F88B30000008913891F8B450CBA30970B088973048B7510C7431400000000C743200000000089430831C085F60F45C289430C8B4510C7432800000000C7433400000000C74338000000008943108B4514C74344009C1108C7432400000000C7433C0000000089431889D8C6434000C6434100C7434800000000C7434C00000000C7435000000000C7435400000000C7435800000000C7435C00000000C7436800000000C743700000000083C42C5B5E5F5DC38DB600000000895DE489D3EB16908B470489742404890424E89510F9FF85C07F0889FB8B3B85FF75E589DA8B5DE4893B891AE920FFFFFFEB0D90909090909090909090909090</bytes> -<bytes id="28"> -5589E583EC18C7042478000000895DF889C3897DFCE8B61AF7FFB91E00000089C231C089D7F3AB895A08C6421101837B04187634C744240805000000C74424047A642D08C7042400000000E8FC40F6FFC744240403150000C7042465612D0889442408E8E80BF7FF8B4304FF2485806D2D088DB6000000008B5DF889D08B7DFCC742040200000089EC5DC3908D7426008B5DF889D08B7DFCC742040300000089EC5DC3908D7426008B5DF889D08B7DFCC742040100000089EC5DC3908D7426008B5DF889D08B7DFCC742040000000089EC5DC38DB6000000008DBC2700000000</bytes> -<bytes id="29"> -5589E557565381EC2C0100008B5D088DBD6CFFFFFFC78500FFFFFF00000000C744240434000000895C2408893C24E83D53FEFF83F8340F851402000080BD6CFFFFFF7F742BC7042403000000E86F4BFEFF8B8500FFFFFF31F685C00F85CF01000081C42C01000089F05B5E5F5DC3669080BD6DFFFFFF4575CC80BD6EFFFFFF4C75C380BD6FFFFFFF4675BA80BD72FFFFFF0175B180BD70FFFFFF0175A80FB68571FFFFFF3C010F84BC0100003C0275958B43088B700C85F6758B8D8500FFFFFF89442404891C24E87447FEFF85C074818B7308891C24FF567885C00F8470FFFFFF8B93A000000089D889D18995F4FEFFFF899500FFFFFF89FAE8E2E0FFFF8B8DF4FEFFFF0FB749246683F90466898DF0FEFFFF0F842CFFFFFF8B95F4FEFFFF8B421885C0750A6683F9010F8415FFFFFF8B8DF4FEFFFF83793428740B8B493885C90F85FEFEFFFF85C075118B85F4FEFFFF8B503885D20F85E9FEFFFF8B43088B80A80100008985ECFEFFFF89C28B805C01000080780A200F85C8FEFFFF8B8DF4FEFFFF8B42040FB7792639F80F84EE0000008B925401000085D2740839D70F84DC0000008B8DECFEFFFF8B915801000085D2740839D70F84C400000085C00F8581FEFFFFA1E8313A088B1085D27516E9AC0000008D74260083C0048B1085D20F849B000000837A040575ED8B92A80100008B8A5C01000080790A2075DB3B7A040F843FFEFFFF8B8A5401000085C9740839CF0F842DFEFFFF8B925801000085D274B639D775B2E91AFEFFFF908D7426008D8500FFFFFF89442404891C24E86E45FEFF81C42C01000089F05B5E5F5DC390E85B3FFEFF83F8010F85E7FDFFFF6690E9ECFDFFFF8D76008B430883780C010F8445FEFFFFE9CBFDFFFF8DB6000000006683BDF0FEFFFF020F84720200006683BDF0FEFFFF030F84CC0300008B85F4FEFFFF8B403085C07407814B34000100008B95ECFEFFFFC7442408000000008B02891C2489442404E8343DFEFF85C00F85540100008B8DECFEFFFF8B790485FF0F856CFDFFFF8B85F4FEFFFF8B781885FF0F851A0200008B95F4FEFFFF8B423885C00F856E0300008B95F4FEFFFF8B7A3C85FF0F852DFDFFFF8BBBA00000008B8DF4FEFFFF8B413085C00F85F5050000C74744000000008B8DF4FEFFFF8B793C85FF745D8B511885D274568B83A00000008B405883F801763189B5F0FEFFFFBF0100000089C68D7600897C2404891C24E8DCD1000085C00F84D5FCFFFF83C70139FE77E58BB5F0FEFFFF891C24E88FBA000085C00F84ACFCFFFF8DB426000000008B95ECFEFFFF8B422885C0740D891C24FFD085C00F848BFCFFFF8B8DF4FEFFFF8B4110891C2489442404E8813EFEFF8B7B6485FF7515E90D010000908D7426008B7F0C85FF0F84FD0000008B87880000008B500483FA04740583FA0975E28B402085C074DB89442404891C24E8FF0A000085C074CBF640152074C5814F1400200000EBBC8D7426008B85ECFEFFFF8B480485C90F84ACFEFFFF8B95F4FEFFFF8B40080FB67A0739C70F8497FEFFFF85C00F85EFFBFFFF8B15E8313A088B0285C07513E97EFEFFFF9083C2048B0285C00F8470FEFFFF39C674EF8378040575E98B48083B4E0875E18B480C3B4E0C75D98B80A80100003B780875CE8B8DF4FEFFFF0FB74926394804898DE8FEFFFF0F8492FBFFFF8B885401000085C9898DF0FEFFFF740C398DE8FEFFFF0F8476FBFFFF8B805801000085C0748F3985E8FEFFFF7587E95FFBFFFF66908D8500FFFFFF89442404891C24E89642FEFFE962FBFFFF90834B3402E993FDFFFF8DB4260000000089FAC1FA1FC744240C00000000897C240489542408891C24E81355FEFF85C00F851CFBFFFF8D4DA0895C2408C744240428000000898DF0FEFFFF890C24E81E4EFEFF83F8280F85F6FAFFFF8B95F0FEFFFF89D88D8D38FFFFFFE8D2D6FFFF8B85F4FEFFFF8B503885D275178B8550FFFFFF8B95F4FEFFFF85C08942380F84B3FAFFFF8B8DF4FEFFFF81793CFFFF00000F844A0400008B85F4FEFFFF817830FFFF00000F84450400008B8DF4FEFFFF8B413883F8010F84AB0000003DC44EEC040F8770FAFFFF8D04808D44C7D83B41180F8660FAFFFF89C2C1FA1FC744240C000000008944240489542408891C24E83E54FEFF85C00F8547FAFFFF8B8DF0FEFFFF895C2408C744240428000000890C24E84C4DFEFF83F8280F8524FAFFFF8B95F4FEFFFFC744240C000000008B4218891C2483C02889C1C1F91F89442404894C2408E8EA53FEFF85C00F8498FCFFFFE9EEF9FFFF908D742600834B34408D742600E927FCFFFF6BC034891C2489442404E8BCAFFEFF85C089C70F84C3F9FFFF8B8DF4FEFFFF8B4938898DE8FEFFFF8B83A00000008948588B93A000000089C8C1E00289442404891C248995E0FEFFFFE87DAFFEFF8B95E0FEFFFF8942408B83A00000008B404085C00F8474F9FFFF8B8538FFFFFF89078B853CFFFFFF8947048B8540FFFFFF8947088B8544FFFFFF89470C8B8548FFFFFF8947108B854CFFFFFF8947148B8550FFFFFF8947188B8554FFFFFF89471C8B8558FFFFFF8947208B855CFFFFFF8947248B8560FFFFFF8947288B8564FFFFFF89472C8B8568FFFFFF8947308B8DE8FEFFFF85C9743189B5F0FEFFFF8BB5E8FEFFFF89F931C0908D7426008B93A00000008B5240890C8283C00183C13439C677EA8BB5F0FEFFFF8B95F4FEFFFF8B423883F8010F8607010000B80100000083C7348D4DA089B5E4FEFFFF89C6898DF0FEFFFF908B85F0FEFFFF895C2408C744240428000000890424E89E4BFEFF83F8280F8576F8FFFF8B95F0FEFFFF89D889F9E856D4FFFF8B471C3985E8FEFFFF77298B95ECFEFFFF837A043E0F8740F8FFFF8B5204FF24952CEB3608902D00FF000083F8010F8727F8FFFF8B4708A8400F85E70000008B570483FA040F84DB00000083FA090F84D20000008B571885D27443A802743F837F040874398B8DECFEFFFF31D28B470C2B47101B57148B4910C744240C0000000089042489542404894C2408E8F52B060009C27409816334FFFEFFFF66908B95F4FEFFFF83C60183C7348B423839F00F8719FFFFFF8BB5E4FEFFFF85C00F845AFAFFFF8B8DF4FEFFFF8BBBA00000008B413C3B47580F8259FAFFFFA1E02E3A08C7413C000000008B7B04C744240805000000C7442404A0EA36088985F0FEFFFFC7042471632B08E85631E0FF897C2404890424FF95F0FEFFFF8BBBA0000000E910FAFFFF66908B95E8FEFFFF3B57200F871FFFFFFFE921F7FFFFC1E00589442404891C24E80DADFEFF8947448B83A00000008B484485C90F840AF7FFFF8B85F4FEFFFFC744240C000000008B4014C744240800000000891C2489442404E8D450FEFF85C00F85DDF6FFFF8B95F4FEFFFF8B83A00000008B52308B404485D20F84A8F9FFFF89B5F0FEFFFF31FF89C6EB098DB60000000083C6208D4DC8895C2408C744240420000000890C24E8B649FEFF83F8200F858EF6FFFF8D45C883C7018974240889442404891C24E847D4FFFF8B95F4FEFFFF397A3077BC8BB5F0FEFFFFE947F9FFFF8B8554FFFFFF89413CE9A8FBFFFF8B8558FFFFFF85C00F84ADFBFFFF8B95F4FEFFFF894230E99FFBFFFF90909090909090</bytes> -<bytes id="30"> -5589E58B5508530FB642010FB64A020FB61A0FB65203C1E008C1E11009C809D8C1E21809D05B5DC3908DB42600000000</bytes> -<bytes id="31"> -5589E583EC188B5508895DF88B5D0C897DFC85D2743A8B4510891424895C240489442408E85717000085C089C2740E8D580CB92900000031C089DFF3AB8B5DF889D08B7DFC89EC5DC38DB42600000000C7442404B0000000891C24E8B016000085C089C275B0EBD5908DB42600000000</bytes> -<bytes id="32"> -5589E557565389C383EC2C31C08D7600C784838800000000000000C78483642000000000000083C0013DF707000075E08BBB840000008BB38000000085FF7E478D8388000000895DE489C3EB068D760083C628C7462000000000895C2404893424E88AF1FFFFC7462400000000893424E84BBB0C003B0674078B462485C0740F83EF0185FF7FC983C42C5B5E5F5DC3893424E829BB0C00890424E801FFFFFF89C1B86F452101F7E189C829D0D1E88D0402C1E80A69C0F707000029C189C88B4DE405180800008B54810489562489748104EBAD8DB6000000008DBC2700000000</bytes> -<bytes id="33"> -5589E58B450C5DC3908DB42600000000</bytes> -<bytes id="34"> -5589E557565383EC2CA11C763A088945E489C18B55E4890D20763A080FB6023C7E0FBED0766283FA240F85290500008B55E431DB8D74260083C3010FBE041A8D0C1A0FB6F0F68436802538088C75E983F85F74E483F82474DF8D43FD83F80D890D1C763A080F86250800008B45E489DAE87BFCFFFFBA04010000A3D8DB3B08E9CC0000008D7426000FB6D8FF249D009C2C088DB6000000008B75E48B4DE40FB65E0183C10180FB2E0F84CE0A000083EB3080FB090F87C600000083FA2D89C10F844307000083FA308B5DE40F84CF0400000FB60B31FF31D231F68845E0EB1F9085FF751E80F945740580F9657514BA01000000BE0100000083C3010FB60B85D274DE85F6750980F92E0F84A105000085D20F84B90400000FB643FF3C4574083C650F85A904000080F92B740A80F92D900F859A040000BA01000000EBBB8D76008B45E483C001A31C763A08908D7426008D65F489D05B5E5F5DC38DB6000000008B5DE48B4DE40FB6430183C1013C3D0F84730600003C260F84A60A00008D7600890D1C763A0889D08D65F45B5E5F5DC38B45E48B5DE483C001807B013D0F84E5050000908D742600A31C763A088D65F489D05B5E5F5DC3908B1528763A0885D20F84240A0000BA0D010000EB838D76008B45E48B4DE483C0018079013D75C989C8BA2A01000083C002A31C763A08C705D8DB3B08A40D2B08E953FFFFFF8D76008B4DE483C101890D1C763A08894DE4E9FFFDFFFF8D74260031D2E931FFFFFF908B75E48B4DE40FB6460183C1013C3D0F84730500003C7C0F8543FFFFFF8B45E4BA28010000C705D8DB3B08BE0D2B0883C002A31C763A08E9F4FEFFFF8D7426008B45E48B75E483C001807E013D0F8535FFFFFF89F0BA2201000083C002A31C763A08C705D8DB3B08C10D2B08E9BFFEFFFF8DB426000000008B75E4BF0C9A2C08B915000000F3A60F8593FEFFFF8B45E4BA1500000083C015A31C763A08B80C9A2C08E829FAFFFFBA04010000A3D8DB3B08E97AFEFFFF66908B5DE48B4DE40FB6430183C1013C3D0F84DB0400003C2B0F858BFEFFFF8B45E4BA31010000C705D8DB3B084227310883C002A31C763A08E93CFEFFFF8D7426008B45E48B75E483C001807E013D0F857DFEFFFF89F0BA2201000083C002A31C763A08C705D8DB3B089B0D2B08E907FEFFFF8DB426000000008B45E48B5DE483C001A31C763A080FBE530189D883C002A31C763A0883FA5C0F843709000083FA270F84B20400000FB61083C001A31C763A0880FA270F84A80900008B0D28763A0885C90F8526FEFFFFA120763A08BA0D010000C70528763A08F1992C08A324763A08E992FDFFFF66908B4DE48B5DE483C101894DE00FB65B0180FB3D885DDC0F848C030000807DDC2D0F841E080000807DDC3E0F84CB0800008B75E4BF229A2C08B904000000F3A60F856B0900008B45E4BA2701000083C004A31C763A08E936FDFFFF8DB6000000008B4DE483C101E955FDFFFF908D7426008B75E48B4DE40FB6460183C1013C3E0F84550700003C3D0F8533FDFFFF8B45E4BA2C010000C705D8DB3B08B50D2B0883C002A31C763A08E9E4FCFFFF8D7426008B45E48B4DE483C0018079013D0F8525FDFFFF89C8BA2B01000083C002A31C763A08C705D8DB3B08A70D2B08E9AFFCFFFF8DB426000000008B45E48B4DE483C0018079013D0F85EDFCFFFF89C8BA2201000083C002A31C763A08C705D8DB3B089E0D2B08E977FCFFFF8DB426000000008B5DE48B4DE40FB6430183C1013C3C0F84CD0600003C3D0F8583FCFFFF8B45E4BA2D010000C705D8DB3B08AE0D2B0883C002A31C763A08E934FCFFFF8D7426008B45E48B5DE483C001807B013A0F8575FCFFFF89D8BA0B01000083C002A31C763A08C705D8DB3B0806CC2B08E9FFFBFFFF8DB4260000000083FA5F0F84CEFAFFFF81E2FF000000F6841280253808880F85BAFAFFFFA128763A0885C00F8544FCFFFF890D24763A08BA0D010000C70528763A087D9A2C08E9B4FBFFFF8D7426000FB6530180FA58740980FA780F85A50200008B5DE4BF010000008B55E483C3020FB64A02E90DFBFFFF8DB426000000000FB6C9F68409802538088C0F8517FBFFFF0FB645E089D92B4DE43C2D0F84260200008B45E489CFC745DC350000008945E085D20F85CF00000085F60F85C700000085FFC745E4000000000F8E220600008B4DE08D47FF31F6C745E40000000001F90FB651FF8D780180FA4C740580FA6C757E89C783C60183E90183E80185FF7FE085F60F84E905000083FE010F842F060000B8419A2C08E8C4F6FFFF89C6B84A9A2C08E8B8F6FFFF8B55E485D289FA0F44F08B45E0E866F6FFFF89F289C18B45DCE8CAF6FFFFBA02010000A3D8DB3B08891D1C763A08E9A5FAFFFF908D74260066BE0100E93FFAFFFF8DB4260000000080FA55740580FA75758789C78345E401E972FFFFFF8D76008B55E00FB6443AFF0FB680802738083C660F84230600003C6C0F842F0600000FB6D0F6841280253808040F85580500003C2E0F84500500008D411F8B75E483E0F029C48D5C241B83E3F0894C2408894DD889742404891C24E8A737F7FF8B4DD8C6040B008B0D28763A0885C90F857CFAFFFFA120763A08BA0D010000C70528763A08549A2C08A324763A08E9E8F9FFFF8B45E4BA22010000C705D8DB3B08980D2B0883C002A31C763A08E9C9F9FFFF9089D8BA2201000083C002A31C763A08C705D8DB3B08A10D2B08E9AAF9FFFF669089F0BA2201000083C002A31C763A08C705D8DB3B08BB0D2B08E98AF9FFFF669089D8BA2201000083C002A31C763A08C705D8DB3B08910D2B08E96AF9FFFF669089D8BA2201000083C002A31C763A08C705D8DB3B08B80D2B08E94AF9FFFF66908B5DE483C301E9BEF8FFFF908D7426008B45E48D79FFC745DC3600000083C0018945E0E9D1FDFFFF8B1D28763A0885DB0F8588F9FFFF890D24763A0866BA0D01C70528763A08D8992C08E9F9F8FFFF80FA54741C80FA74741780FA64741231FF80FA448B5DE40F8562F8FFFF8D7426008B5DE431FF8B75E483C3020FB64E02E94AF8FFFF8D742600FF2485FC9D2C088B75E4B910000000BFC5DF2D08BA12010000F3A60F97C10F92C038C10F85B2F7FFFFE992F8FFFF8B75E4BF8F9A2C08B918000000F3A60F85CD0500008B45E4BA2601000083C018A31C763A08E968F8FFFF8B75E4B90B000000BFA89A2C08BA11010000F3A60F97C10F92C038C10F8561F7FFFFE941F8FFFF8B75E4BFB49A2C08B91A000000F3A60F85A30500008B45E4BA25010000C705D8DB3B081100000083C01AA31C763A08E90DF8FFFF8B75E4BFE89A2C08B90D000000F3A60F85B00500008B45E4BA25010000C705D8DB3B080C00000083C00DA31C763A08E9D9F7FFFF8B75E4BF969B2C08B911000000F3A60F85070400008B45E4BA25010000C705D8DB3B081000000083C011A31C763A08E9A5F7FFFF8B75E4BF6B9B2C08B913000000F3A60F85FA0300008B45E4BA25010000C705D8DB3B081300000083C013A31C763A08E971F7FFFF8B75E4BF229B2C08B91D000000F3A60F85560500008B45E48B5DE4C705D8DB3B083C00000083C01DA31C763A080FB6531D89C384D20F84B60600008DB6000000000FB6CAF68409802538088C750F80FA5F740A80FA24740580FA2E750A83C3010FB61384D275DA89DA29C2E8A1F2FFFFBA25010000891D1C763A08A3D8DB3B08E9ECF6FFFF8B75E4B904000000BF21883008BA1E010000F3A60F97C10F92C038C10F84CAF6FFFF8B75E4B904000000BF7F9B2C08B21BF3A60F97C10F92C038C10F84ABF6FFFF8B75E4C744240804000000C7442404B19B2C08893424E8EC39F7FFBA2001000085C00F8483F6FFFFC744240804000000C7442404849B2C08893424E8C739F7FFBA0801000085C00F845EF6FFFFC744240804000000C74424043C9A2C08893424E8A239F7FFBA1501000085C00F8439F6FFFFC744240804000000C74424048D642C08893424E87D39F7FFBA2301000085C00F852FF5FFFFE90FF6FFFF8DB426000000008B75E4BF899B2C08B908000000F3A60F85610400008B45E4BA25010000C705D8DB3B080A00000083C008A31C763A08E9D4F5FFFF807E022E0F85FAF5FFFF89F0BA1C01000083C003A31C763A08E9B6F5FFFF89F083C002807E023D0F844D010000A31C763A08BA2E010000C705D8DB3B08ABCB2A08E98EF5FFFF89D883C002807B023D0F8409010000A31C763A08BA2F010000C705D8DB3B08B10D2B08E966F5FFFF890D24763A08BA0D010000C70528763A08639A2C08E94CF5FFFF8B45E4BA30010000C705D8DB3B086186320883C002A31C763A08E92DF5FFFF8B45E4BA29010000C705D8DB3B08AA0D2B0883C002A31C763A08E90EF5FFFFB87A492B08E8E4F0FFFF89C6B883492B08E8D8F0FFFFE91BFAFFFF8D7600B82C9A2C08E8C6F0FFFF89C68B45E089FAE87AF0FFFF89F289C18B45DCE8DEF0FFFFBA03010000A3D8DB3B08E90FFAFFFFB8339A2C08E895F0FFFF89C6B83C9A2C08E889F0FFFFE9CCF9FFFFE84FF2FFFFA11C763A08E9C3F6FFFF8B45E4BA33010000C705D8DB3B0813052B0883C002A31C763A08E976F4FFFF83C001BA22010000A31C763A08C705D8DB3B08AD0D2B08E95AF4FFFF83C001BA22010000A31C763A08C705D8DB3B08B40D2B08E93EF4FFFFB857272B0883EF01E811F0FFFF89C6E946FFFFFFB8279A2C0883EF01E8FDEFFFFF89C6E932FFFFFF89C28B45E42B55E4E8A9EFFFFF89C3B8B19B2C08E8DDEFFFFF89D989C2B835000000E8FFEFFFFFBA02010000A3D8DB3B08E9E0F3FFFF0FB65DDC83EB3080FB090F863AF3FFFF8B75E0BA2D00000089351C763A08E9BDF3FFFF8B75E4B907000000BF1A9B2C08BA21010000F3A60F97C10F92C038C10F85B6F2FFFFE996F3FFFF8B75E4B905000000BF9B642C08BA24010000F3A60F97C10F92C038C10F8474F3FFFF8B4DE4C744240805000000C7442404B3F93708890C24E8B536F7FFBA0601000085C00F844CF3FFFF8B75E4C744240805000000C744240424112C08893424E88D36F7FFBA0701000085C00F8424F3FFFFC744240805000000C744240457272B08893424E86836F7FFBA1F01000085C00F84FFF2FFFFC744240805000000C7442404BF9B2C08893424E84336F7FFBA1601000085C00F84DAF2FFFFC744240805000000C7442404CD432E08893424E81E36F7FFBA1801000085C00F85D0F1FFFFE9B0F2FFFF8B75E4B90C000000BF9CDF2D08BA13010000F3A60F97C10F92C038C10F85A9F1FFFFE989F2FFFF8B75E4C744240818000000C7442404CF9A2C08893424E8CA35F7FF85C00F8581F1FFFF89F0BA2501000083C018A31C763A08C705D8DB3B0814000000E948F2FFFF8B45E4C744240810000000C7442404F69A2C08890424E88935F7FF85C00F85250100008B45E4BA25010000C705D8DB3B080E00000083C010A31C763A08E906F2FFFF8B75E4C74424081C000000C7442404409B2C08893424E84735F7FF85C00F852101000089F083C01CA31C763A0889C3C705D8DB3B083D0000000FB6561C84D20F84410100000FB6CAF68409802538088C751380FA5F740E80FA24740980FA2E0F8597FAFFFF83C3010FB61384D275D6E988FAFFFF8B75E4C744240815000000C7442404929B2C08893424E8D334F7FF85C0751E89F0BA2501000083C015A31C763A08C705D8DB3B080F000000E955F1FFFF8B45E4C744240803000000C744240422BD3108890424E89634F7FFBA0E01000085C00F842DF1FFFF8B55E4C744240803000000C744240483492B08891424E86E34F7FFBA1701000085C00F8520F0FFFFE900F1FFFF8B55E4C744240812000000C7442404079B2C08891424E84134F7FF85C075688B45E4BA25010000C705D8DB3B080D00000083C012A31C763A08E9C2F0FFFF8B45E4C74424080B000000C74424049C9A2C08890424E80334F7FF85C00F85EA0000008B45E4BA25010000C705D8DB3B080900000083C00BA31C763A08E980F0FFFF31D2E973F9FFFF8B4DE4C744240808000000C7442404FBE22E08890C24E8BA33F7FFBA1001000085C00F8451F0FFFF8B75E4C744240808000000C7442404BE153808893424E89233F7FFBA1D01000085C00F8429F0FFFFC744240808000000C74424048E883008893424E86D33F7FFBA0A01000085C00F8404F0FFFFC744240808000000C74424047F6F3008893424E84833F7FFBA0C01000085C00F84DFEFFFFFC744240808000000C7442404DDF83708893424E82333F7FFBA1901000085C00F85D5EEFFFFE9B5EFFFFF8B55E4C744240806000000C744240489CA2B08891424E8F632F7FFBA0F01000085C00F848DEFFFFF8B4DE4C744240806000000C74424045D9B2C08890C24E8CE32F7FFBA0501000085C00F8465EFFFFF8B75E4C744240806000000C74424046D883008893424E8A632F7FFBA1401000085C00F843DEFFFFFC744240806000000C7442404649B2C08893424E88132F7FFBA0901000085C00F8418EFFFFFC744240806000000C74424042C9A2C08893424E85C32F7FFBA1A01000085C00F850EEEFFFFE9EEEEFFFF8DB426000000008DBC2700000000</bytes> -<bytes id="35"> -5589E557565383EC7C8904248955D48945E4E8C9C1EBFF8945DC890424E85E46FBFF89C38B45DC890424E8D145FBFF8B55D48B3285F68975E0740D8B45E083C47C5B5E5F5DC366908D1C18895DD8C7042428000000E866B8EBFF8945E08D049BC1E002890424E855B8EBFF8B4DE0894108C704246C000000E8D371EBFFB91B00000089C389C789F0F3AB895C2404C70424E0F41908E8867EEBFF8B55E48914248945C4E808C3EBFF8B55E083C2248943248D4324E8F7ECFFFF85C08945D00F84140500008B4DD08B75E08B018B50148B481889534C894B508B500C8B4810895354894B588B501C8B48208B403489535C894B608946208B4324890424E8BFA5F7FF85C00F845F0400008B4038890424E8EC80F7FF85C074688B55D08B128955CC0FB6423A3C010F84590400003C0375558B75CCBF50D53008B9050000008B762C8975C8F3A675288B45C8C74424042B0000008955C083C005890424E8BC93EAFF8B55C085C0751E8B75D08B368975CCC74368010000008B55CCEB0A908D7426008B45D08B108B4A288B7DE48B52248B45D0895C2404893C24E8D3F0FFFF8B038943288B430489432C8B43088943308B430C8943348B43108943388B431489433C8B43188943408B431C8943448B432089434889D8E8C7EEFFFF8943288B45D08B48108B500C895C2404893C24E87FF0FFFF8B431883F8010F844303000083F8027436C744240805000000C74424040FD63008C7042400000000E8AE96EAFFC7442404E2030000C704240CD5300889442408E89A61EBFF66908B7DE48B53108B4B148B431C897C24088B7DE0C744241000000000C744240C000000008B7724897424048B7720893424E883FCFFFF89078B4DD831FF31F685C97E47895DD08B5DDC8B45E089FA83C714035008A18C673B08891C248955C089442404E811D7FAFF8B4DE48B55C08974240483C601891C24894C240C89542408FF103975D87FC28B5DD08B730485F68975E40F8EA600000031C031F6895DE489C3EB2E8DB6000000008B4DE08D04BF8B51088B44821085C00F84B30100008D76008B7DE483C60183C3148B470439F07E688B7DDC89742404893C24E8693DFBFF3945D889C77EDA85C078D68B55E48B0201D88B501085D274B08B55E08D3CBF897DD0C1E7028B4DD0897DCC8B388B5208893C8A8B4DCC8B7804897C11048B7808897C11088B780C897C110C8B401089441110EB8D908D74260089FB8945E48B4DD885C90F8EE300000031C031D28945A48955A0895DDCEB15908345A0018B75D88345A4143975A00F84BC0000008B45E08B5DA40358088B4B108D71F783FE0177D88B55DC8B7DDC8B75DC8B45E48B128B7F608B765C8945B08955C889C2C1FA1F39D78975D0897DCC8955B4774C720439C673468B55D08B7DC88D34928D34B78B7E1085FF743383FF05742E83F9090F84AC0100008B0E8B45E089480C8B4E048948108B4E088948148B4E0C8948188B4E1089481CE960FFFFFF83F9090F84D70000008B45E08B55D0C7401C0300000089500C8B4DCC8948108B5DDC8B5B04895DE4E933FFFFFF8D76008B5DDC8B75E48B435C89F7C1FF1F397B607716720439F073108B138D0480837C8210010F841F0100008B45C4890424E82C4EEBFF8B4DE08B55D4890AE99AFBFFFF8DB426000000008B55E48B4DDC8B4224890C2489442404E87363EBFF897C24048B7DDC893C248945C0E8D13AFBFFC744240805000000C7442404D0D43008C704240000000089C7E8DF93EAFF8B55C0897C2408C70424E0B839088954240C89442404E8481FEBFFE9EBFDFFFF8D76008B55D089138B4DCC894B048B5DE08B7DDC8B75A48B4B088B7F04C744311003000000897DE4E956FEFFFF8DB6000000008B43108B55E489442404891424E80EF9FFFF8B73688B4DE085F68901741A2B43088901E907FDFFFF8B7DD08B17E913FCFFFF8DB6000000008B75E00343088906E9EAFCFFFFC74364010000000FB6423A3C010F8594FBFFFFC74368010000000FB6423AE984FBFFFF8B7DE0C7470401000000E9D2FEFFFF8B0E890B8B4E04894B048B4E08894B088B4E0C894B0C8B4E10894B10E9B8FDFFFFC744240805000000C7442404AACA2A08C7042400000000E8D892EAFFC744241003D63008C744240CBAD73008C7442404B9030000C704240CD5300889442408E8B45DEBFF8D742600</bytes> -<bytes id="36"> -55B80100000089E583EC08C9E9BFFBFFFFEB0D90909090909090909090909090</bytes> -<bytes id="37"> -5589E583EC48A144DC3B08895DF48B5D10897DFC8B7D088975F88945E48B0385C07455E8B8FAFFFF85C089C674328B03890424E8D8A6F5FF8933893424C744240400000000E852E9F4FF85C089C6781889F08B5DF48B75F88B7DFC89EC5DC3908B33EBD68D7426008B03890424E89EA6F5FFC703000000008B750C85F6744E8B450CE859FAFFFF85C089C6741389442404C70424806E0508E843D4F5FF89750C8B1544DC3B08C7442404DBB12D088914248955E0E863F2F4FF8B55E085C089C6740B3B45E474798078FF3A7473803F2F0F84F20000008B45E4895C2410C744240C00000000897C2408C744240402000000890424E8D7FAFFFF85C089C60F894DFFFFFF893C24E8D5E2190039C70F843DFFFFFF894424088B45E4895C2410C744240C00000000C744240402000000890424E89AFAFFFF89C6E913FFFFFF8D76000FB6460584C074043C3A75818914248955E0E895EFF4FF89C18B450C894DDC890424E885EFF4FF8B4DDC8B55E029D68D44012083E0F029C48D44242383E0F089742408895424048945E4890424E8AAE9F4FF8B55E48B450C01F283C6058914248955E089442404E8F0EFF4FF8B55E0033544DC3B0889142489742404E83BF3F4FFE907FFFFFF669089F8E811F9FFFF85C089C60F84FDFEFFFF8944240489F7C70424806E0508E8F5D2F5FFE9E6FEFFFF</bytes> -<bytes id="38"> -5589E557565381EC5C040000E88F59040089C6890424E8155B0400C744240849372E08C7442404F6812D08893424E8AD590400C744240849372E08C7442404FF812D08893424E895590400C744240800000000C744240406822D08C7042402000000E8A92D1A00C745D406822D08C745D80C822D08C745DC000000008934248985C4FBFFFFE8C65704008D55E48954241CC744241800000000C744241400000000C744240806822D08C74424040A000000894424108D45D48944240C8B85C4FBFFFF890424E836211A0085C074598B85C4FBFFFF890424E8741B1A00893424E86C580400A170783A0885C0742F8B3031D231DB85F6741F908B449008890424E86CD4F5FFA170783A0885C0740F83C301391889DA77E2C7000000000081C45C0400005B5E5F5DC38B85C4FBFFFFC744240400000000890424E8431E1A0089B5BCFBFFFF8985C0FBFFFF8DB426000000008B85C0FBFFFF890424E88E1EF5FF85C00F855B0100008B85C0FBFFFFC744240400040000894424088D85D4FBFFFF890424E88618F5FF85C089C60F8431010000890424E8B41DF5FF83F80389C77EB1B80F822D0831DB669089442404893424E8C81FF5FF85C0759883C3018B049D14AF2D0885C075E28D47FE80BC05D4FBFFFF2F8D57FF0F848801000089D0C68405D4FBFFFF000FB695D4FBFFFF8D85D4FBFFFF80FA200F85830000008D9DD4FBFFFF83C3010FB61380FA2074F589D8EB119080FA2C740F83C3010FB61380FA20740484D275EC39D80F8424FFFFFFC603008895B8FBFFFF890424E833331A000FB695B8FBFFFF89C6A170783A0885C074498B78048B0839CF744039F90F83590100008D790184D28938897488080F84DFFEFFFF0FB653018D430180FA20740B89C3EB9F8DB4260000000083C0010FB61080FA2074F589C3EB89908895B8FBFFFFC744240401000000890424E8B2770C000FB695B8FBFFFFA370783A088B088B7804EB978D45E08BB5BCFBFFFF894424088B85C4FBFFFFC744240401000000890424E82C1B1A0085C00F84E2FDFFFF8B45E0A87F0F85D7FDFFFF0FB6C485C00F85CCFDFFFF8B85C4FBFFFF890424E840191A00893424E838560400A170783A0885C074258B48048B1039D1741C39D176478D4A018908C74490080000000081C45C0400005B5E5F5DC3C744240401000000890424E80A770C00A370783A088B108B4804EBC883EF0380BC3DD4FBFFFF2F0F44C7E967FEFFFFC744240805000000C7442404AACA2A08C7042400000000E85B19F5FFC74424104C082B08C744240CFCAE2D08C744240479030000C70424EC812D0889442408E837E4F5FFC744240805000000C7442404AACA2A08C7042400000000E81719F5FFC74424104C082B08C744240CFCAE2D08C74424045D030000C70424EC812D0889442408E8F3E3F5FF8D7600</bytes> -<bytes id="39"> -5589E5565383EC508B750CC7442404000000008B5D08893424E872F2FFFF8D45B8C744240C000000008B5610895424088B56048B1289042489542404E84FF5FFFF8B45B88945D88B45BC83EC048945DC8B45C08945E08B45C48945E48B45C88945E88B45CC8945EC8B45D08945F08B45D48945F48B46048B003945E873358B15B0D63B088945E88B4610C745DC00000000C745E400000000C745EC00000000C745F000000000C745F4000000008955D88945E08B4D1085C9740B8D45D8890424E89BFBFFFF8B45D889038B45DC8943048B45E08943088B45E489430C8B45E88943108B45EC8943148B45F08943188B45F489431C8D65F889D85B5E5DC2040090</bytes> -<bytes id="40"> -5589E557565381ECAC0000008B4508890424E859490D0085C08945BC74128B45BC81C4AC0000005B5E5F5DC38D742600A1B0D63B08E826FEFFFF8B308945B085F60F85890000008B75B08B460485C074348B7DB0C744241070EB0408C744240C040000008B5708894424048D450889042489542408E812BBFFFF85C074A08B008945BCEB998B4E0885C97492C744240805000000C7442404AACA2A08C7042400000000E804C0FFFFC7442410F0CD2A08C744240C27CF2A08C744240440050000C70424C5CA2A0889442408E8E08A0000A1B0D63B088945DCE883FDFFFF8B1885DB0F84FB0400008B55B08B4204890424E83B7800008B4DDC8B712085F6745BC745A80000000031DB8B86744000008BBE7840000039F873358B56208955E466908B108B4A2085C9740E3B4A1C74098B4DE4F6413508740F8B521481E20004000083FA0183D30083C00C39F872D38B3685F675B585DB895DA8751F8B5DB0C7430400000000C74308000000008B5DB0C70300000000E9CEFEFFFF8B45A8C1E002890424E8A99800008B75DC8B5E208945B88945A485DB745531F68DB426000000008B83744000003B837840000073388B7B208DB426000000008B108B4A2085C9740B3B4A1C7406F6473508740FF642150475098B55B88904B283C60183C00C3B837840000072D28B1B85DB75B48B7DA88B45B8C744240C20ED0408C744240804000000897C2404890424E85EB9FFFF83EF01897DD00F84BF0300008B55B831C0C745D4010000008955DCEB21908D7426008B5DDC8B55D4890B8B45E48345D4018345DC043945D00F8E9E0000008B5DB88B0C8383C0018B1C838945E48B79048B318B43048B975C400000897DD88945E08B805C4000008955848B56088B7D848945908B149703561C8B338B76088B04B08B3303461C39C275988B7DD88B877C4000003945E0740F8B55E03BBA7C4000000F857BFFFFFF8B75D88B7DE03BBE80400000740C3BB7804000000F855703000085C08B45DC0F45D98B4DE48B55D4891883C101894DE4E94EFFFFFF3945A88955C00F8F630200008B45A8D1F83B45C00F8FAA0300008B4DC0C745B400000000C745E40000000083E901894DAC908D7426008B7DAC397DE40F8DE60100008B75B88B5DE48B7DB48D1C9E8B03895DC48904BE8B45E483C0013945C08945DC0F8EB10100008B038B55DC8B0C968B308B40048B5E1C8945D0895DE08B985C4000008B46088B7DE08B148301D7897DD48B398B49048B47088B995C4000008B1C83035F1C395DD48B46240F87F90100000345E001D08B55B88945E08B45E4395DE08D4482088945D80F86490100008B55D0EB66908B4DC48B5DD88B118B0B8B328B52048B7E1C8B9A5C400000897DD08B7E088B3CBB897DE4037DD0897DD48B398B49048B5F088B815C4000008B1C988B4624035F1C395DD48945E00F87880100008B45D00345E00345E48345D80439C38945E00F83DE0000008B42248955A0894D9C8945E48B472401D8894424048B45E4890424E8CB8B0000895C24048B5DE4891C248945D0E8B98B00008B3F8B4D9C897D948B7DE08B49048945CC891C24897C2404894DC8E8998B00008B4DE4890C2489C38B45D489442404E8858B00008B55A08B368B5204C74424080500000089C7C744240470CD2A088955A0C7042400000000E8F8BBFFFF8B4DD08B55A0895C2414897C2410894C24248B4DCC8954240C8974240889442404894C24208B4DC8C70424E0B83908894C241C8B4D94894C2418E83D4700008345DC018B5DDC395DC00F8FBDFEFFFF8B75DC8345B4018975E4E90EFEFFFF8B45E43945C07E1D39F80F85480100008B4DB88B55E48B5DB48B049189049983C301895DB48B75B43975A87F3D0F85AD0100008B45B08B55A48B4DB4895004894808E912FCFFFF3945D00F85D40100008B7DB88B75D08B55C08B04B789049783C2018955C0E97AFDFFFF8B7DB889F0C1E00289442404893C24E8509400008945A4EBB0C744240805000000C7442404AACA2A08C7042400000000E8FBBAFFFFC74424103ECB2A08C744240C7ACF2A08C7442404B1040000C70424C5CA2A0889442408E8D7850000C745C000000000EB80C744240805000000C7442404AACA2A08C7042400000000E8AEBAFFFFC7442410B8CC2A08C744240C37CF2A08C7442404EB040000C70424C5CA2A0889442408E88A850000C744240805000000C7442404AACA2A08C7042400000000E86ABAFFFFC7442410F4CC2A08C744240C64CF2A08C744240454040000C70424C5CA2A0889442408E846850000C744240805000000C7442404AACA2A08C7042400000000E826BAFFFFC74424101ACB2A08C744240C7ACF2A08C7442404D8040000C70424C5CA2A0889442408E802850000C744240805000000C7442404AACA2A08C7042400000000E8E2B9FFFFC74424102CCB2A08C744240C4ACF2A08C744240495040000C70424C5CA2A0889442408E8BE840000C744240805000000C7442404AACA2A08C7042400000000E89EB9FFFFC744241057CB2A08C744240C37CF2A08C74424040E050000C70424C5CA2A0889442408E87A840000C744240805000000C7442404AACA2A08C7042400000000E85AB9FFFFC74424101ACB2A08C744240C4ACF2A08C744240490040000C70424C5CA2A0889442408E8368400008DB600000000</bytes> -<bytes id="41"> -5589E55689C65383EC108B56208D1C95FCFFFFFFEB04669089CB85D27E2A8B460483EA018956208D4BFC8B041885C074E7890424E863CCDBFF8B4604C7041800000000EBC58D760083C4105B5E5DC390</bytes> -<bytes id="42"> -5589E55383EC248B5D0885DB742A833DD07D3A08017E15A1A4CF3B08C74424043CEA2E08890424E8648FF0FF8B831402000083C4245B5DC3C744240805000000C7442404AACA2A08C7042400000000E898A4EFFFC7442410AF232F08C744240C442D2F08C7442404420E0000C704247D232F0889442408E8746FF0FF8D742600</bytes> -<bytes id="43"> -5589E583EC28895DF88B5D088975FC8B750C85DB743F8B835C01000085C07479833DD07D3A08017E1BA1A4CF3B08C7442404C0F62E08890424E8126AF0FF8B835C01000089750C8B75FC895D088B5DF889EC5DFFE0C744240805000000C7442404AACA2A08C7042400000000E83B7FEFFFC7442410AF232F08C744240C43382F08C7442404A10A0000C704247D232F0889442408E8174AF0FFC744240805000000C7442404AACA2A08C7042400000000E8F77EEFFFC74424109CF62E08C744240C43382F08C7442404A20A0000C704247D232F0889442408E8D349F0FF8D7600</bytes> -<bytes id="44"> -5589E55383EC148B1D28403A088B45088B550C83C30183FB0F891D28403A087E4FC70528403A080000000031DB8954240481C340403A08C744240808000000890424E899FDFFFF891C24C7442408B3572E08C7442404320000008944240CE8FDFCFFFF89D883C4145B5DC3908D7426006BDB32EBB88D7426008DBC2700000000</bytes> -<bytes id="45"> -5589E583EC18895DF88B5D088975FC8B750C893424FF138B551089742404891C248954240C89442408E862FDFFFF8B5DF88B75FC89EC5DC3908DB42600000000</bytes> -<bytes id="46"> -5589E557565383EC4C8B75088B461083461C018945C48B4638C1E0048D90E02038088B80E02038088B4A0C8955E08945DC8B4510F762048B4510894DD80FB64DD88955D429D0D1E88D1C108B4510D3EB8B560C0FAF5DDC8955D029D88B3C8289C385FF0F84B700000083FF0174398B4D0C893C24894C2404FF560485C00F859D0000008B4638C1E0048D90E02038088B80E02038088B4A0C8955E08945DC8B460C894DD88945D08B4DE08B45108B7D10F761080FB64DD88B451029D7D1EF01D783C001D3EF8B4DDC8955E48B55C483E9020FAFF98B4E2029F88945E08B45D090035DE083C101894E2089DF29D739DA0F46DF8B3C9885FF742783FF0174E28B450C8955CC893C2489442404FF56048B55CC85C0750B8B4E208B460CEBC38D760083C44C89F85B5E5F5DC38DB600000000</bytes> -<bytes id="47"> -5589E557565381ECEC0000008B1D84513A0885DB0F8506100000FF1508DF3B0885C00F85E80F00008B0D70793A0885C90F85A20F00008B45108B15404E3A08C745E4000000008945D08B451485D28945D48B45188945D80F855B0F0000A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8D4FC090085C00F857C0E0000B8E04E3A08E802A3FFFFA1BCDC3B088944240CA1C0DC3B0889442410A1C4DC3B08894424148B45D08904248B45D4894424048B45D889442408E84EFC090085C00F84EE0D0000C78540FFFFFFFFFFFFFFC78548FFFFFF0000000066908B45D0C745E400000000C744241000000000C744240C10A808088904248B45D4894424048B45D889442408E870B2FFFF85C00F84E011000083BD40FFFFFFFF0F845B0500008B45D08904248B45D4894424048B45D889442408E8B2FB090085C00F848A0B00008B1D84513A0885DB0F858C0A00008B45D08B55D48B4DD8E8AE8DFFFF85C089C30F84EC1600008B0D84513A0885C9740B8B501C85D20F85EF0C00008B45D0837B0C018904248B45D419D2F7D281E200000080899548FFFFFF894424048B45D889442408E842FB0900898540FFFFFF8B431C85C0750D83BBB40000000B0F84080B00008B731085F60F8514050000FF1508DF3B0885C00F847F0400008B8548FFFFFF8B752083C80183E6010F448548FFFFFF85DB89B53CFFFFFF898548FFFFFF0F85C90100008B8D48FFFFFF8D55E48B8540FFFFFFE84195FFFF85C089C70F8E27030000398540FFFFFF0F85A8140000A184513A0885C00F855E0300008D8570FFFFFF8B75E4890424897C2404E869FA09008B9574FFFFFF8B8570FFFFFF8B8D78FFFFFF83EC04E89F8CFFFF89F281E2FF00000083FA7F899544FFFFFF89C30F845E03000085C00F84A6030000893424FF15C8CE390885C00F852D03000089F083E07F740D83C001D0F884C00F8E900000008B038904248B4304894424048B430889442408E811FA0900E8BC75FFFF83F8017E6E8B038904248B4304894424048B430889442408E8EFF9090089C78B038904248B4304894424048B430889442408E8E5F9090039C70F84550900008B0D84513A0885C90F852F0700008B038904248B4304894424048B430889442408E8A7F90900E85275FFFF83F8010F8F910A00008B038904248B4304894424048B430889442408E881F90900E82C75FFFF83F8017E158B038B53048B4B08E8AA90FFFF85C00F84BA0E00008B431085C0740D83BD44FFFFFF7F0F84DE0400008B83B000000085C0740D83BD44FFFFFF7F0F84B705000089731C8B45D0C745E4000000008904248B45D4894424048B45D889442408E884F9090085C00F85FC030000FF1508DF3B0885C08D7426000F848A0200008B431C3C7F8945E4C7431C000000000F85E70600000FB6C4890424E89AF20D0089C68B038904248B4304894424048B430889442408E8C0F80900890424E83819FDFF85C00F84E41300008B532085D20F858D0600008B402C85C00F8582060000893424E8E2F5090085C00F8572060000893424E8F2F5090085C00F8562060000893424E802F6090083F8010F8551060000E8A4430600A1944F3A088B7B208B4030898544FFFFFF8B038904248B4304894424048B430889442408E84BF809008D55B889142489442404E80CF809008B45B883EC04894424048B45BC897C241089742414894424088B45C08944240CA1944F3A08890424FF9544FFFFFF8B3D84513A0885FF745885F6BFDBD92B080F85BF0500008B038904248B4304894424048B430889442408E8AF3C0D008B4B20BA14732B08897C2410C7442404188C2B0885C9B920732B080F45D18944240CA1A4CF3B0889542408890424E8AC64FCFFC7431400000000E990FBFFFF83BD40FFFFFFFF0F842B0500008B9D3CFFFFFF85DB0F84A0FCFFFF8B0D404E3A088B7D1C85C9C7070B0000000F849D0D0000A1A4CF3B08C74424046B762B08890424E85964FCFFE9830D00008D7426008B45E4E858A0FFFF897C2408C74424043C762B088944240CA1A4CF3B08890424E82B64FCFFE978FCFFFF8DB60000000089D8E84990FFFF89D8E8729FFFFFE9C0FCFFFF908D74260085C00F847C0F000089F10FB6C53D850000000F84330F000083F8050F8589FCFFFF89F0C1F81085C00F847CFCFFFF8B3D84513A0885FF0F852A0F000031C989F289D8E831E8FFFF85C00F845BFCFFFF9083BD40FFFFFFFFC745E4000000000F85BFFBFFFF818D48FFFFFF00000080E9B0FBFFFF908D742600E8EB3CFDFFE977FBFFFF8DB600000000E83B3CFDFFE96CFDFFFF8DB6000000008B45D0C744241000000000C744240C90A708088904248B45D4894424048B45D889442408E8D7ACFFFFC78548FFFFFF0100008085C089C30F84130600008B3D84513A0885FF740B8B701C85F60F85CE0900008B7310C78548FFFFFF0100008085F60F84ECFAFFFFE834410600A1944F3A088B73208B78308B038904248B4304894424048B430889442408E8E1F509008D4DAC890C2489442404E8A2F509008B45AC83EC04894424048B45B0C74424140000000089742410894424088B45B48944240CA1944F3A08890424FFD78B3D84513A0885FF0F85BE0400008B4B18C743140000000085C90F84301100008B431C8945E4C7431C00000000C744240400000000891C24E8E7F1FFFF8B731C85F674308B1584513A0885D20F85BA0800008B038904248B4304894424048B430889442408E83AF5090089F10FB6D5E8908AFFFF8B45E489431CE908FAFFFF908D7426008B038904248B4304894424048B430889442408E8F8F4090089C68B45D08904248B45D4894424048B45D889442408E8DDF4090039C60F84C9FBFFFF8B731885F60F84CA1000008B0D84513A0885C90F85D40500008B431C3C7F0F840C06000089C283E27F0F85B60400008B3D84513A0885FF0F85C3040000C7431401000000C743100000000081C3B400000089442404891C24E8083A0D00E99EF9FFFF8D760089F20FB6C683F8130F8514FBFFFF8B3D84513A0885FF0F85D20D0000C7431000000000E8883F0600A1944F3A088B7B208B70308B038904248B4304894424048B430889442408E835F409008D4D88890C2489442404E8F6F309008B458883EC04894424048B458CC744241400000000897C2410894424088B45908944240CA1944F3A08890424FFD68B3584513A0885F60F850C0D00008B5318C743140000000085D20F8520FDFFFFC744240805000000C7442404AACA2A08C7042400000000E81876FBFFC744241004762B08C744240C6A8F2B08C7442404770C0000C70424C75E2B0889442408E8F440FCFF8D74260089F20FB6C683F8020F853BFAFFFF8B3D84513A0885FF0F85600C0000C783B000000000000000E8953E0600A1944F3A088B7B208B70308B038904248B4304894424048B430889442408E842F309008D4D94890C2489442404E803F309008B459483EC04894424048B4598C744241400000000897C2410894424088B459C8944240CA1944F3A08890424FFD68B3584513A0885F60F85970B00008B7B18C743140000000085FF0F852DFCFFFFC744240805000000C7442404AACA2A08C7042400000000E82575FBFFC744241004762B08C744240C6A8F2B08C7442404950C0000C70424C75E2B0889442408E80140FCFF908B038904248B4304894424048B430889442408E858370D00C74424045A762B0889442408A1A4CF3B08890424E86F5FFCFFE99BF8FFFF669081AD48FFFFFF000000800F8973F7FFFF8BB53CFFFFFF85F60F851C0C0000C7042420523A08E8CA7EFBFFE954F7FFFF90893424E8EC75FBFF89C7E932FAFFFF908B3D70793A0885FF751083FE020F84B908000089D8E80E98FFFF8B3584513A08C743140100000085F60F85C90600008B0D70793A0885C90F84EB050000C74318000000008B45E4890424FF15C8CE390885C00F852802000083BBB40000000B0F84660200008B83B40000008B4D1C8B3D404E3A0889018B83B800000085FF8941048B83BC0000008941088B83C000000089410CC783B40000000B0000000F854D020000B8E04E3A08E8FB66FFFF8B7D1C8B0783F8020F8585060000C783C8000000FFFFFFFF8B7B088B73048B1BFF1508DF3B0885C00F8535010000FF1508DF3B0885C07415C744240400000000C7042420D31408FF1510DF3B088B5508897A0889D0897204891A8D65F45B5E5F5DC204008DB426000000008B45D08904248B45D4894424048B45D889442408E8C7350D00C7442404388A2B0889442408A1A4CF3B08890424E8DE5DFCFFE93DF5FFFF908B038904248B4304894424048B430889442408E890350D008B7320B920732B08BA14732B08C74424045C8A2B0885F60F45D18944240CA1A4CF3B0889542408890424E8915DFCFFE9F6FAFFFF8D7426008B038DBD7CFFFFFFC74314010000008904248B4304894424048B430889442408E853F00900893C2489442404E827F009008B857CFFFFFF83EC048904248B4580C744241000000000C744240C30360908894424048B458489442408E8B8A6FFFFE946F6FFFF8D760031DBE9FCF4FFFF908B451C83380B66900F845A060000E83567FFFFE9B3FEFFFF83C201D0FA84D20F8E0EF5FFFF8B3D84513A0885FF0F843DFBFFFF8B038904248B4304894424048B430889442408E8CDEF0900C7442404F08B2B0889442408A1483C3A08890424E89076FBFF8B431CE904FBFFFF8D742600A184513A0885C00F84CBFDFFFF8B038904248B4304894424048B430889442408E853340D00C74424049B762B0889442408A1A4CF3B08890424E86A5CFCFF83BBB40000000B0F859AFDFFFF8B45E48B751C89442404893424E8CB340D008B3D404E3A0885FF0F84B8FDFFFF908D742600A1A4CF3B08C7442404B2762B08890424E8235CFCFFE999FDFFFF8DB60000000089D8E8518CFFFF83BD40FFFFFFFFC745E4000000000F8518F4FFFFE954F8FFFF8B038B731C8904248B4304894424048B430889442408E8DDEE09008974240CC7442404708B2B0889442408A1483C3A08890424E89C75FBFF8B431C3C7F0F85F4F9FFFF0FB6D483FA130F843A0500008B1570793A0885D2740D83BBB40000000B0F8473060000C7431401000000E9A1F3FFFF8DB6000000008B008904248B4304894424048B430889442408E838330D0089C68B431CE86E97FFFF8974240CC74424040C8A2B0889442408A1A4CF3B08890424E8415BFCFFE9CDF2FFFF8D7426008B45D08904248B45D4894424048B45D889442408E87FEE090085C00F85F1F1FFFF8B45D08904248B45D4894424048B45D889442408E8FEED0900898540FFFFFFE9D7F1FFFF8D7600A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8C1ED090089C3A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8A0ED09008D55A0891424C744240C00000000895C240889442404E845ED09008B45A083EC048944240C8B45A4894424108B45A889442414A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E80E040B00A184DC3B088B1588DC3B088B0D8CDC3B08E8D890FFFFC7401801000000E9D0F0FFFF8D742600A1A4CF3B08C7442404DC752B08890424E8235AFCFFE98BF0FFFF8DB6000000008D451089442410A1BCDC3B08C744240C30E80808890424A1C0DC3B0889442404A1C4DC3B0889442408E87AA3FFFFE92BF0FFFF908D742600E8BB63FFFFE90EF0FFFF8DB6000000008B45108904248B4514894424048B451889442408E887310D00C7442404C6752B0889442408A1A4CF3B08890424E89E59FCFFE9C3EFFFFF9089F0E8A195FFFF89C68B038904248B4304894424048B430889442408E847310D008974240CC744240410762B0889442408A1A4CF3B08890424E85A59FCFF8B731CE900F7FFFF66908B008904248B4304894424048B430889442408E808310D0089C68B431CE83E95FFFF8974240CC74424040C8A2B0889442408A1A4CF3B08890424E81159FCFFC78548FFFFFF01000080E9DAF0FFFF6690A1BCDC3B08C744241000000000C744240C80C90808890424A1C0DC3B0889442404A1C4DC3B0889442408E861A2FFFFA1BCDC3B08C744241000000000C744240C20300908890424A1C0DC3B0889442404A1C4DC3B0889442408E832A2FFFF83BD40FFFFFFFF0F84E6020000A1BCDC3B08895C2410C744240CE0E70808890424A1C0DC3B0889442404A1C4DC3B0889442408E8FAA1FFFFA1BCDC3B08C744241000000000C744240CE0A60808890424A1C0DC3B0889442404A1C4DC3B0889442408E8CBA1FFFFE952F9FFFF8DB6000000008B038904248B4304894424048B430889442408E8E82F0D0089C68B45E4E81E94FFFF8974240CC74424043C8C2B0889442408A1A4CF3B08890424E8F157FCFFE9F3F8FFFF8D74260085C00F8473F9FFFF8B038904248B4304894424048B430889442408E828BCFFFF8983C8000000E95AF9FFFF908D7426008B038904248B4304894424048B430889442408E890EA0900894424048D8564FFFFFF890424E85EEA09008B1584513A0883EC0485D20F859801000089D8E8B687FFFF8B8564FFFFFFC744241000000000C744240CC0A708088904248B8568FFFFFF894424048B856CFFFFFF89442408E8D4A0FFFF85C00F8584F3FFFFC744240805000000C7442404AACA2A08C7042400000000E87C6CFBFFC7442410A88A2B08C744240C6A8F2B08C7442404580C0000C70424C75E2B0889442408E85837FCFF8B451CC7000B000000A1404E3A0885C07415A1A4CF3B08C7442404E8752B08890424E8D156FCFFB8E04E3A08E8475FFFFF8B3DC4DC3B088B35C0DC3B088B1DBCDC3B08E955F8FFFFA1BCDC3B088944240CA1C0DC3B0889442410A1C4DC3B08894424148B45108904248B4514894424048B451889442408E89CE9090085C00F8527F8FFFFE965F9FFFFC7431401000000C7431000000000E977EEFFFFC7042402000000E8D0E6090085C00F8533F7FFFF8B45D08904248B45D4894424048B45D889442408E81FE909008D55C489142489442404E8F0E809008B45C483EC048904248B45C8C744241000000000C744240C20A70808894424048B45CC89442408E8849FFFFFC783B000000000000000E9D7F6FFFF8B038904248B4304894424048B430889442408E89D2D0D00C74424045A762B0889442408A1A4CF3B08890424E8B455FCFFE932FEFFFF8B45D0C745E000000000898564FFFFFF8B45D4898568FFFFFF8B45D889856CFFFFFF8B45E489431C8B8564FFFFFFC744241000000000C744240CF0A708088904248B8568FFFFFF894424048B856CFFFFFF89442408E8E59EFFFF85C0898548FFFFFF0F84850200008B1584513A0885D20F85DD0100008B9548FFFFFF8B421C89D38945E4C7431C00000000E98AFCFFFF890424FF15C8CE390885C00F847CF9FFFF89D8E8579BFFFF85C00F846DF9FFFFA184513A08C7431C0000000085C00F8459F9FFFF89E789DEB903000000F3A5E8DBE70900C7442404A08B2B0889442408A1483C3A08890424E89E6EFBFFE92BF9FFFF31D289D8E83486FFFFBE7F05000085C00F8449EDFFFFE9EAF0FFFFA1A4CF3B0889742408C7442404808A2B08890424E88954FCFFE9B8F0FFFFC704240C000000E85843FCFF8B15CCD73B088938895008897004A3CCD73B08E9A8F0FFFF8B038904248B4304894424048B430889442408E8182C0D008B4B20BA14732B08C74424044C8B2B0885C9B920732B080F45D18944240CA1A4CF3B0889542408890424E81954FCFFE91DF4FFFF8B038904248B4304894424048B430889442408E8CC2B0D00C7442404288B2B0889442408A1A4CF3B08890424E8E353FCFFE96AF3FFFF8B038904248B4304894424048B430889442408E8962B0D008B4B20BA14732B08C7442404048B2B0885C9B920732B080F45D18944240CA1A4CF3B0889542408890424E89753FCFFE9A8F2FFFF8B038904248B4304894424048B430889442408E84A2B0D00C7442404DC8A2B0889442408A1A4CF3B08890424E86153FCFFE9F8F1FFFF89E789C6B903000000F3A5E81C2B0D00C74424047F762B0889442408A1A4CF3B08890424E83353FCFFE9F5FDFFFF8B751C833D404E3A0800C7060B0000000F8447FCFFFFE9A5EEFFFF83BD40FFFFFFFF0F844BEBFFFFC744240805000000C7442404AACA2A08C7042400000000E84668FBFFC744241022762B08C744240C598F2B08C7442404500D0000C70424C75E2B0889442408E82233FCFF8D45E0B903000000894424108D8564FFFFFF89E7C744240C30C5080889C6898534FFFFFFF3A5E8279CFFFFDB45E0DD9D48FFFFFFE8656FFBFF833D84513A0800898554FFFFFFDB8554FFFFFFDC8D48FFFFFFD9BD52FFFFFF0FB78552FFFFFFD80D14912B08B40C66898550FFFFFFD9AD50FFFFFFDB9D54FFFFFFD9AD52FFFFFF8B9554FFFFFF8955DC74258B45E083F8017E1D89442408A1A4CF3B088954240CC74424045C8C2B08890424E81252FCFF8D45DC8BB534FFFFFFB9030000008944241089E7C744240CA0C40808F3A5E87F9BFFFF85C0898548FFFFFF0F84B6FCFFFFE9A3FCFFFFC744240805000000C7442404AACA2A08C7042400000000E81C67FBFFC7442410F7722B08C744240C598F2B08C7442404F60D0000C70424C75E2B0889442408E8F831FCFFC744240805000000C7442404AACA2A08C7042400000000E8D866FBFFC74424108BB62A08C744240C598F2B08C7442404FA0C0000C70424C75E2B0889442408E8B431FCFFC744240805000000C7442404AACA2A08C7042400000000E89466FBFFC744241004762B08C744240C598F2B08C7442404260D0000C70424C75E2B0889442408E87031FCFFC744240805000000C7442404AACA2A08C7042400000000E85066FBFFC744241004762B08C744240C598F2B08C7442404620D0000C70424C75E2B0889442408E82C31FCFF8DB6000000008DBF00000000</bytes> -<bytes id="48"> -5589E557565381EC6C0100008B7D0C8B45248B55288B5D1C83FF0D8B75208985D0FEFFFF8995D4FEFFFF0F846001000083FF020F84A7000000E8B26F0A008985CCFEFFFFA184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E87D500A0085C00F85C50000008B85D0FEFFFF8B95D4FEFFFF8B4D14895C24148944241C8B4510895424208B5518894C240C89742418894424088B450889542410897C2404890424A1944F3A08FF90500100008B8DCCFEFFFF890C248985C8FEFFFF8995C4FEFFFFE8658CFCFF8B95C4FEFFFF8B85C8FEFFFF8D65F45B5E5F5DC390A1A8DC3B088944240CA1ACDC3B0889442410A1B0DC3B0889442414A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8E64F0A0031D289C131C085C90F8411FFFFFFEBAD8DB600000000A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8914F0A008D95D8FEFFFF89142489442404E84F4F0A008B85D8FEFFFFA384DC3B088B85DCFEFFFF83EC04A388DC3B088B85E0FEFFFFA38CDC3B08E9E1FEFFFF8DB6000000008B4D1885C90F84C3010000A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8264F0A0085C089C70F847401000083FE000F875B01000081FB800000000F874F010000E8CECAFBFF8D9568FFFFFFC700000000008985CCFEFFFF8954240CC744240800000000897C2404C7042402420000E840CDFBFF8B8DCCFEFFFF8B1185D20F850C01000031C98D95E8FEFFFF8D8568FFFFFFE8F1FCFFFF8B85D0FEFFFF8B95D4FEFFFF01D811F283FA0077073D800000007620C785D0FEFFFF80000000299DD0FEFFFFC785D4FEFFFF0000000019B5D4FEFFFF837D140074338B95D0FEFFFF8D85E8FEFFFF8B4D148D1C18895C240489542408890C24E8B9D2FBFF8B85D0FEFFFF8B95D4FEFFFFE933FEFFFF8B95D0FEFFFF8D85E8FEFFFF8B4D188D1C18891C2489542408894C2404E886D2FBFFB9010000008D95E8FEFFFF8D8568FFFFFFE844FCFFFF8B85CCFEFFFF8D9568FFFFFFC700000000008954240CC744240800000000897C2404C7042403420000E842CCFBFF8B8DCCFEFFFF8B85D0FEFFFF8B95D4FEFFFF8339000F84B2FDFFFF8D7600B8FFFFFFFFBAFFFFFFFFE9A0FDFFFF90A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E8794D0A0089C7E966FEFFFF837D14000F8533FEFFFFC744240805000000C7442404AACA2A08C7042400000000E8B8CFFBFFC7442410CB722B08C744240C468F2B08C74424045D0F0000C70424C75E2B0889442408E8949AFCFF8D742600</bytes> -<bytes id="49"> -5589E557565383EC6C83F9018945E419C083E0FC8955D483C00583F9018B4DD419D283E20483C2018945C885C98955CC0F84B70200008B45D431F68B400485C08945DC0F848F020000C745D8000000008B55DC8B828400000085C00F8E8F0100008B9A800000008B55E43953040F877D01000083E80131F68945E08D04808B4CC3048B45E0EB059089F989D0394DE473278D143089D7C1EF1F8D1417D1FA8D3C9239F28B7CFB0474DF3B7DE473DA394DE489D672DC8D76003945E07E3E8D50018D3492C1E603394C1E04752F8D04808D7433048D4CC354895DD0EB158D7426008B3E83C6288B1983C12839DF750A83C2013955E089D07FE88B5DD085C00F88ED00000089C28D7AFF8D04808D34C38D04BF8D0CC3895DD089D3C745E0FFFFFFFFEB258DB600000000837DE0FF756589FA895DE083EE2883EF0183EB0183E92885D20F888F000000807E1C0489FA74E48B461085C0741B8B55D4894DC489042489542404E898920C0089FA8B4DC485C074C285DB0F84B00000000FB6461C3945CC0F849A0000008B46148945B48B55B485D2749585DB0F849D0000008B45B485C00F84920000008B45B40346043945E40F82830000008B41140341043945E4737889FA83EE2883EF0183EB0183E92885D20F8971FFFFFF837DE0FF89D08B5DD075648DB4260000000085C00F89F20000008B75D88B45DC8B55D4894424048B4204890424E8F8CAFFFF85C08945DC0F84C50000008975D8E935FEFFFF908D7426000FB6411C3945C874668B56148955B4E958FFFFFF8D742600837DE0FF89DA89D08B5DD074A385C078778D04808D34C38B461485C0746A0346043945E472128B55E08D049283FAFF8D34C374848D7426008B7DD885FF0F8478FFFFFF8B55D88B42043B46040F8269FFFFFFE961FFFFFF8B46143B41148945B40F85EEFEFFFF8B56043B51040F85E2FEFFFF8B461089FA3B41100F85D4FEFFFFE976FEFFFF8D76008B55E08D04928D34C38B461485C074A0EB848DB60000000083C46C89F05B5E5F5DC36BC0288D34038B4614EBDFC744240805000000C7442404AACA2A08C7042400000000E8538FFFFFC74424107AD52A08C744240CC0D52A08C7442404E1010000C7042470D52A0889442408E82F5A0000EB0D90909090909090909090909090</bytes> -<bytes id="50"> -5531C989E531C057565383EC2C8B5D080FB61389DE84D2743A8DB426000000006BC9430FBED283C6018D4C118F0FB61684D275EC89C8BA6F452101F7E289C829D0D1E88D0402C1E80A69C0F707000029C189C88B15B0D63B08C745E0000000008B522085D28955E40F84A80000008B750C85F60F9445DB83C02031FF8945DCEB2D8DB42600000000807DDB0075288B450C398280400000741D85FF0F94C08B55E484C08B128955E4745E85D2745A8B55E439550C75D28B45E485FF8B55DC8B7490080F94C0741BEBD58DB426000000008975E0908D74260085FF8B76200F94C075BC85F674B88B06895C2404890424E8E89CFFFF85C075E00FB6461C3C0674D03C010F44FEEBD19085FF740A83C42C89F85B5E5F5DC38B7DE0EBF1908D742600</bytes> -<bytes id="51"> -5589E583EC188B450CC7042470433A08894424088B450889442404E8C0FEFFFFC9C38DB426000000008DBC2700000000</bytes> -<bytes id="52"> -5589E583EC38895DF48B5D088975F8897DFC803B5F741131F689F08B5DF48B75F88B7DFC89EC5DC30FB643013C6374043C6975E3807B025F75DD31C083C9FF89DFF2AEF7D9890C24E843F3E9FF807B016989C289C60F84CA000000C6002B8D4801C6015B8D79018D43038955E4894DE089442404893C24E8A01CE9FF8B4DE08B55E48079015F750883C701803F5F74F8C74424045F000000893C248955E4E8B915E9FF8B55E485C00F849B0000008078015F8D78017479C60028C74424045F000000893C248955E4E88F15E9FF8B55E485C074758D7802C60029C640012089F829D001C3895C2404893C24E82C1CE9FFEB098DB60000000083C7010FB6073C5F74F684C0741383C7010FB60784C074093C5F75F2C6073AEBEDC6075DC6470100E9F4FEFFFFC6002D8D4801E931FFFFFFC6002089F829D08D44030289442404893C24E8D51BE9FFEBB289142431F6E83DD1E9FFE9C1FEFFFF908DB42600000000</bytes> -<bytes id="53"> -5589E583EC28895DF48975F889C6897DFC8B780889F8C1E0048D501C83C03029C48D5C241B83E3F08954240889742404891C24E874DFEDFF89F989F289D8C7042400000000E886FEFFFF8B5DF48B75F88B7DFC89EC5DC389F68DBC2700000000</bytes> -<bytes id="54"> -5589E557565383EC4C85C08945D48955CC894DC80F846A020000890424E8CAF8F8FF8B5DD401C3395DD473310FB643FF8D53FF3C200F851C0300008B4DD489D339D973198D7426000FB643FF8D53FF3C090F85F900000089D339D972EB8B55D489D829D083F803895DC48945D00F84FD0100008B75C885F60F841A01000039D30F8482020000803A230F8479020000837DD0040F8447020000837DD00D0F8EF3010000BF10D92B08B90E00000089D6F3A60F8411020000BF66A92E08B90800000089D6F3A60F84FD010000BFA2B62A08B90200000089D6F3A60F84E9010000837DD0050F8E87030000BFEB2D2C08B90500000089D6F3A60F841D020000BF27873208B90200000089D6F3A60F85570200008D720239F37621E85FF6F8FF8B10EB0E8DB4260000000083C60139F3760A0FBE06F64442012075EF89F2B804000000E8CBFDFFFF8B55CC8902E99A000000903C200F84FFFEFFFF8B55D40FB6023C200F85610200008B55D4EB0C908D7426000FB6023C09751183C20139D377F2E9DDFEFFFF908D7426003C2074EB8D742600E9CBFEFFFF8D76008B4DC42B4DD4894DD0C7042414000000E863CEF9FF8B55D08B4DD489C38B45CC8918C7030000000089542404890C24E8F4D8F9FF8B55CC8943048B02C7400800000000C7400C00000000C74010000000008B4D0885C9746B8D45DC89442404A130FC3908C744240806000000890424E8349F0800C744240401000000890424E830FEF8FF8B5DCC8B75088B7D0C8D7600E8039F080085C0741FE8DA9E080085C074EE897C24048B038B4004890424FFD6EBE78DB6000000008B45DC85C00F8824020000C745D4000000008B45D483C44C5B5E5F5DC38D7600BF7E6A2D08B90300000089D6F3A60F85EFFDFFFFC745D4010000008B45D483C44C5B5E5F5DC3837DD0070F8F17FEFFFF837DD0010F8F21FEFFFF837DD00A0F8424010000837DD00D0F84660100008955D4E9DBFEFFFF6690B807000000E83EFCFFFF8B55CC8902E90DFFFFFF8D742600B904000000BFF5E0300889D6F3A6C745D4020000000F97C10F92C038C10F85C8FDFFFFE95AFFFFFFC745D4030000008B45D483C44C5B5E5F5DC38D720539F37620E856F4F8FF8B10EB0D8DB60000000083C60139F3760A0FBE06F64442012075EF89F2B803000000E8C3FBFFFF8B4DCC8901E992FEFFFF3C090F84DCFCFFFF90E9F3FDFFFF8D7600837DD0078D7426000F8E27010000BF774E2C08B90800000089D6F3A60F8520FFFFFF8D720839F37620E8E6F3F8FF8B10EB0D8DB60000000083C60139F3760A0FBE06F64442012075EF89F2B805000000E853FBFFFF8B4DCC8901E922FEFFFF3C090F8497FDFFFF90E988FCFFFF8D7600BFF82D2C08B90A00000089D6F3A60F85D2FEFFFFC7042414000000E818CCF9FF8B4DCCC74004000000008901C7400801000000C70000000000C7400C00000000C7401000000000E9C5FDFFFFBF032E2C08B90D00000089D6F3A60F8586FEFFFFC7042414000000E8CCCBF9FF8B55CCC74004000000008902C7400802000000C70000000000C7400C00000000C7401000000000E979FDFFFF837DD0020F8F83FCFFFFE92BFEFFFF8B4DCC8D75DC89E78B01890424E87FAAF9FFB903000000F3A5E8639A0800837DD0060F8503FEFFFFBFF12D2C08B90600000089D6F3A60F8503FEFFFFBA12C42B08B806000000E846FAFFFF8B55CC8902E915FDFFFF8DB6000000008DBF00000000</bytes> -<bytes id="55"> -5589E557565383EC4C8B45088B308B450C8B168B388B46048B5A088B885C4000008B1C998B4A1C8B570401CB895DE48B1F8B8A5C4000008B5B088B0C998B1F8B5B1C01D9394DE4723577453B907C400000744D3B827C400000744539D074498B0DB0D63B088B492085C9750EEB64669039CA741C8B0985C9745839C875F2B8FFFFFFFF83C44C5B5E5F5DC3908D74260083C44CB8010000005B5E5F5DC38D760031C0EBDF8D7426008B90744000008B807840000039D07713EB5C8DB60000000039D774CC83C20C39D0764B39D675F190EBACC744240805000000C7442404AACA2A08C7042400000000E8EEC7FFFFC7442410DBD92B08C744240C96CF2A08C74424043E040000C70424C5CA2A0889442408E8CA920000C744240805000000C7442404AACA2A08C7042400000000E8AAC7FFFFC7442410DBD92B08C744240C96CF2A08C74424042F040000C70424C5CA2A0889442408E8869200008DB600000000</bytes> -<bytes id="56"> -5589E5565383EC108B45088B750C8B581485DB74238D76008B430489342489442404E885B7F2FF85C075078B4B3885C9740E8B1B85DB75E083C4105B5E5DC39089D8E839FCFFFFEBE98DB42600000000</bytes> -<bytes id="57"> -5589E55383EC148B5D080FB6430C3C0372223C07771A891C24E882E7FFFF85C07412895D0883C4145B5DE971E7FFFF903C0B740C8B0383C4145B5DC38D742600891C24E858E7FFFF85C075D6895D0883C4145B5DE907F408008DB42600000000</bytes> -<bytes id="58"> -5589E583EC58895DF48B5D088975F88B750C897DFC8B7D10807B0C0374128973088B5DF48B75F88B7DFC89EC5DC366908B530885D2741189328B5DF48B75F88B7DFC89EC5DC3669085FF0F84880000008B573C8B47388955E029C283FA037E548B573483C00489473839D08955D474628B57448B4DE001D0F7D221D089C22B57308947388955E089CA2B57303955E07E1F894F38894F348B4DD489CAC70100000000894B088932EB908DB4260000000089C1EBE08D472C890424C744240404000000E895CCF2FF8B4F3C8B4738894DE0EB8E804F5402EB98C744240805000000C7442404AACA2A08C7042400000000E888CCF2FFC74424106B202E08C744240C49232E08C744240461010000C7042465232E0889442408E86497F3FF8D742600</bytes> -<bytes id="59"> -5589E5565383EC208B45088B5D10C744241400000000C744240800000000894424108B450C89DEC1FE1F895C24188944240CA1E0DD3B088974241CC744240402000000890424E875F8FFFF31D831F209C283FA0119C083C420F7D083E0055B5E5DC38DB426000000008DBC2700000000</bytes> -<bytes id="60"> -5589E55789CF5689D65389C381EC8C0000008B4D1C8B55148B4510894DDC8B8B500100008955D48B55188945D085C98955D8894DE00F842C0700008B4D0C85C9740E8B15E4F7390885D20F845B07000083FE040F94C10F844401000083FE020F843B0100008B55D883FE03B8020000008B4DDC0F45C6897C2408894424048954241C8B55D0894C24208B4DD4891C24895424148B5508894C24188B4D0C8954240C894C2410FF55E08945E08955E48B0DE47E3A0885C975188B45E08B55E481C48C0000005B5E5F5DC38DB426000000008B55E48B45E089542404890424E8FE06EFFF8B55D88B4DDC891424894C24048945CCE8E906EFFF8B4DD0890C248945D8E8CB01EFFF8945D08B450C890424E82D02EFFF8B55088914248945B0E81F02EFFF85FFBA62242E080F44FA8B55CC8B4DB0897C24108974240C895424248B55D8894C241889442414895424208B55D08954241C8B4304C7442404D0F32F0889442408A1A4CF3B08890424E8111EEFFF8B550C8B7D0C85D20F447D0885FF0F85ED000000A1A4CF3B08C704240A00000089442404E8E8EAEEFFE91BFFFFFF8D76008B45DC0B45D8C745E000000000C745E4000000000F84F4FEFFFF8B450885C00F84FB0100008B1520793A0885D20F854D0100008B45D08945CCA1E87E3A0885C00F84EB0300008B45CC884DB0891C2489442404E8C8E0FFFF0FB64DB085C00F84C20100008B4008F64014080F84B5010000891C24E837E0FFFF8B4DDCC7442420000000008B50048954241C8B55D88B00894C24148B4D08895424108B55D4894424188B45D0890C248954240C8B550C8944240889542404E8B45AEEFF89C2C1FA1F8945E08955E4E942FEFFFF8D742600837DE4000F8C09FFFFFF0F8EC0010000A1A4CF3B0831DBC70424CE08300889442404E80931EFFF908D341FF7C60F000000751985DB7F51A1A4CF3B08C7442404AC7A2E08890424E8C41CEFFF0FB60683C301C7442404FE2C370889442408A1A4CF3B08890424E8A51CEFFF89DAC1FA1F3955E47FB30F8C98FEFFFF395DE077A8E98EFEFFFF8D7600833DE47E3A08017FA6A1A4CF3B08C744240430463108890424E86A1CEFFFE968FEFFFF908D7426008B55D0884DB08955CC891424E8FFBAFBFF89C2894424048B45D08955AC890424E83BA2FBFF0FB64DB085C00F8488FEFFFF891C24E8F7DEFFFF8B55AC89C18B02894DB08B00895424048B55D08945E0891424E849A3FBFF8B4DB08B55E0895424208B51048954241C8B118B4DDC894424088B4508C744240C00000000895424188B55D8894C24148B4D0C89042489542410894C2404E99DFEFFFF8DB6000000008B45D08945CC8B55CC884DB0891424E8ECC0FFFF8B55DC0FB64DB08945C48B40048945C88B45D80345D01355D48945E083FA008955E477078B55C839D072388B45C885C074318B55C82B55CC8955C88B55C48B421083F80274350F87BC01000085C07534C745E0FFFFFFFFC745E4FFFFFFFFE977FCFFFF8B45D88945C8EBD090837DE0000F8639FDFFFFE931FEFFFF8B550C85D275CE6690A1A8DC3B08884DB08944240CA1ACDC3B0889442410A1B0DC3B0889442414A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E80BAEFCFF85C00F8493010000C645B7008B45C8895DE089C2C1FA1F8945B88955BC8DB6000000008B55B88B4DBC8B45D0C7442408000000008954241C8B55D4894C24208B4D0889442414C744240402000000895424188B550C894C240C891C2489542410FF935001000083FA008945C80F8E990000008955A48B45C88955E48B55088B5DE08945E085D2740DA1207F3A0885C00F844C010000837DA4000F8C7AFBFFFF0F8E1E020000807DB70066900F8468FBFFFF8B4D0C85C90F845DFBFFFF8B45C48B501C85D20F854FFBFFFF83FE040F8446FBFFFFA1D8F8390885C00F8439FBFFFF8B45CC8B55C88B4D0C89442404A1FC823A088954240C894C2408890424E8D902F4FFE912FBFFFF8D7426007C0983F8000F875CFFFFFF8955AC891C24FF930C0100008B55AC85C00F8545FFFFFF8B1B85DB0F85ECFEFFFFE936FFFFFF8B55D08955CCE9EAFDFFFF83F80390743E83F8040F856DFEFFFF8B550C85D20F8462FEFFFFC744240805000000C74424049CF32F08C7042400000000E8CA2EEEFF890424E816EBEEFF8DB6000000008B450885C00F85F9FDFFFFE928FEFFFFA184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E821ACFCFF890424E899CCEFFF85C00F843EFEFFFFE8DC08F4FF0FB64DB083F8FF7435C645B701E92BFEFFFF8B55BC8B4DD48B45B8895424108B55D0894C24088B4D088944240C89542404890C24E8D345F8FFE988FEFFFF8B45C48B401C85C0750D84C974BD833DD8F839080074B4837D08000F84440100008B45CC8B55C88B4D08C74424140000000089442408A1FC823A0889542410894C240C891C2489442404E88F02F4FF89C2C1FA1F8945E08955E4837DE4000F8C1EFDFFFF0F8EEC000000837D08000F8498F9FFFF833D207F3A08000F858BF9FFFF8B45C88B4DD489C2C1FA1F895424108B55D0894C24088B4D088944240C89542404890C24E82445F8FFE95DF9FFFF8DB42600000000837DC8000F864CF9FFFFE9D3FDFFFFC744240805000000C7442404AACA2A08C7042400000000E8592DEEFFC7442410D8083008C744240C500B3008C7442404BA050000C70424806A310889442408E835F8EEFF8B55DC8B45D889542404890424E82300EFFF8B55D089142489C6E806FBEEFFC744240805000000C744240468F32F08C704240000000089C3E8F42CEEFF89742408895C2404890424E838E9EEFF837DE0000F8622FCFFFFE905FFFFFF8B450C8B4DC88B55CCC7442414010000008944240CA1FC823A08894C241089542408891C2489442404E84B01F4FF89C1C1F91F8945E0894DE4E9B7FEFFFF8D7426008DBC2700000000</bytes> -<bytes id="61"> -5589E583EC58895DF489D38975F889C6897DFC837A040B76278B0289342489442404E819FFFFFF85C00F84F9000000908B5DF48B75F88B7DFC89EC5DC38D76008B4204FF2485607831088DB600000000893424E8A815F7FF8B8098000000EBD0893424E89815F7FF8B8094000000EBC0893424E88815F7FF8B4064EBB38D7600893424E87815F7FF8B406CEBA38D7600893424E86815F7FF8B4074EB938D7600893424E85815F7FF8B407CEB838D7600893424E84815F7FF8B8084000000E96DFFFFFF908D742600893424E83015F7FF8B4068E958FFFFFF893424E82015F7FF8B4070E948FFFFFF893424E81015F7FF8B4078E938FFFFFF893424E80015F7FF8B8080000000E925FFFFFF908D742600893424E8E814F7FF8B8088000000E90DFFFFFF908D7426008B53048D42F483F8077626895424108B03C744240898753108C7442404D3020000C704247B7731088944240CE8C7E5E6FFFF248590783108C744240804000000C744240400000000893424E8481FF7FF8B78148945E08B03890424E818330B008947088B430885C0740E8B0831D231FF85C90F85EE0200008B45E0E988FEFFFFC744240C20F73908C7442408E0773108C7442404FFFFFFFF893424E8D81FF7FFE963FEFFFFC744240C00F73908C7442408C7773108C7442404FFFFFFFF893424E8B31FF7FFE93EFEFFFFC744240CF8F63908C7442408AE773108C7442404FFFFFFFF893424E88E1FF7FFE919FEFFFF8B038B7B0C890424E87C320B00897C240889342489442404E82C22F7FF8B530885D20F84F1FDFFFF8B3285F60F84E7FDFFFF895DE431FF31F689C38B4CFA08B8000000008039000F44C8894C24088B44FA0C891C2489442404E85B18F7FF8B45E48B500885D2740983C601393289F777CA89D8E9A1FDFFFF8B530889F0E867FDFFFF8B530C89542404890424E83861F7FF8B781489C68B03890424E8E9310B0089470889F0E96FFDFFFFC744240C10F73908C7442408F5773108C7442404FFFFFFFF893424E8BF1EF7FFE94AFDFFFFC744240803000000C744240400000000893424E8C21DF7FF8B78148945E48B03890424E892310B008B55E48947088B42148B500889500C8B4B0885C974638B0131D231FF85C074598975E08DB4260000000089D6C1E6048D34318B460C85C0746189C28B45E0E8AFFCFFFF89C28B46088955D8890424E83F310B008B55D8895424088B55E489442404891424E8B913F7FF8B4B0885C9740983C701393989FA77B18B530C8B5B108B45E409D30F8498FCFFFF8B75E489561089F0E98BFCFFFF8D76008B730C8975DC8B431009C60F843F01000083F8000F8CA30000000F8E930000008B45E08955D8894DD4890424E82712F7FF8B55D88B4DD48B80800000008945DCC1E2048D34118B4608890424E8A7300B008B55DC89542408894424048B45E4890424E81112F7FF8B4E1483C1012B4E1089C28B430C8955D8894DD48945DC8B45E0890424E84FD3F6FF8B55D88B4DD485C0744C8B45DCC1E0032B461029C889028B4204C1E10383E00709C8894204E91CFFFFFF837DDC040F8763FFFFFF8B75E08955D8894DD4893424E88A11F7FF8B4DD48B55D88B40788945DCE961FFFFFF8B46108902EBBA8975DC89DEC1E2048D1C108B45DC8B530CE85CFBFFFF8945E48B4308890424E8EE2F0B008B55E489542408894424048B45E0890424E86812F7FF8B55E48B4214F6400201740A8B55E08B4214804802018B460885C00F84B7FCFFFF83C701393889FA0F86AAFCFFFFEB9BC744240805000000C7442404AACA2A08C7042400000000E80817E6FFC74424100B783108C744240C3C7A3108C744240481020000C704247B77310889442408E8E4E1E6FF8D742600</bytes> -<bytes id="62"> -5589E557565383EC4C8B4508C74424047E000000890424E88068E2FF85C00F84F10200008B5508891424E87D6EE2FF83C0108945CC890424E89345E3FF8945C8C745DC00000000908B7D088B15B82A3A08893C248955D4E8506EE2FF8945C00FB6073C7E0F840E02000084C00F84060200008B55D48B45C085D28945D089C3746A85C07E668B55D4C745D8000000008B128955C48B7DC485FF0F84210200008B45080345D88B75D48B5DC48945E4EB0E8B5E0483C60485DB0F8402020000891C24E8E66DE2FF895C24048944240889C78B45E4890424E85173E2FF85C075D18B55D88D7C3AFF897DD089FB8B55D00355DC3955CC8955D80F8E960100008B55088B45C80345DC895C240889542404890424E8E667E2FF8B3DBC2A3A08035D08891C24895DE0897DDCE87F6DE2FF85C08945D40F8EC6010000C745E40000000089DF803B2F0F84B40100008B75DC85F60F84CB0000008B45DC8B1885DB0F84BE00000089C6EB1066908B5E0483C60485DB0F84AA000000891C24E82E6DE2FF895C2404893C2489442408E89E72E2FF85C075D68B5DE485DB0F84B40000008B45E483C001890424E82544E3FF8B7DE4897C240889C68B45E089342489442404E83967E2FFC6043E00893424E851FCFFFF89342489C3E8036AE2FF891C24E8CB6CE2FF8B55D801C23955CC8955DC0F8EE60000008B55E08B45C80355E40345D8895C2404895508890424E84F6DE2FF891C24E8C769E2FFE92EFEFFFF8DB6000000008345E4018B55E43955D40F8E62FFFFFF8B55E08B45E48B7DE0037DE4803C022F0F8504FFFFFF8B5DE485DB0F854CFFFFFF8B4DD085C90F8541FFFFFF8B45C88B7DD8C60438008B45C883C44C5B5E5F5DC38DB42600000000C745D0000000008B55D031DB0355DC3955CC8955D80F8F6AFEFFFF8B45D08B7DCC8D7C381489F883C001894424048B45C8897DCC890424E8CC42E3FF8945C8E941FEFFFF8D7426008345D8018B7DD8397DC00F8FC4FDFFFF8B5DC0E913FEFFFF8B7DCC8D7C071489F883C001894424048B45C8897DCC890424E88A42E3FF8945C8E9F4FEFFFF8B4DD0C745E40000000085C90F858DFEFFFFE947FFFFFF8B7D0831C083C9FFF2AE894DCCF755CC8B45CC890424E8A042E3FF8945C8E908FDFFFF9090909090909090</bytes> -<bytes id="63"> -5589E557565383EC6C8B1508783A088945B4A104783A08C70508783A0800000000C70504783A08000000008955C48945D089442404C70424806E0508E8DFB7F6FF8B0D2CDC3B0885C98945C00F848F0600008B1508783A088B411485C0740A908B0083C20185C075F78B0985C975E9891508783A08C1E202891424E8D0AAF6FF8B0D2CDC3B0885C9A304783A08741F908B511485D2740C9089108B1283C00485D275F58B0985C975E7A104783A088B1508783A08890424C744240C902D0E08C74424080400000089542404E8BCCBF5FF8B0D04783A088B1508783A08C7050C783A0800000000C70510783A0800000000894DC889CB8D049139C18945D40F839900000089C88B0985C90F848D0000008B710431FF895DBC31DBC745CC000000008955B885F675549080791200744D8B514C85D28955CC74438B71388B511C39D60F87FC05000089D129F139CB0F42D90375CC39D60F86C306000029D639F7731B83C0043B45D4731D8B0885C90F847F04000089F78B710485F674AD83C00489FE3B45D472E3895DCC8B45CC8B5DBC8B55B8893510783A08A30C783A088B4DD08B45C48D048139C18945CC0F83CE020000C1E2028B4DD0031504783A0839D38B3173288B0B8B7E1C3B791C7717E9B70100008DB426000000008B0B39791C0F83A501000083C30439D372EEC745D400000000807E12000F84250100008B4DD485C90F85220200008B46088B400483F8140F95C183F8050F95C00FB6C085C80F84B801000039D30F83B00100008B3B8B471C3B461C0F85A2010000895DC8EB296690A108783A0883C304C1E002030504783A0839C30F837F0100008B3B8B471C3B461C0F857101000089F289F8E82070FFFF85C074CC8B4608C64713008B400483E80683F80277188B47088B400483E80683F8020F87FD0400008B462489472439FE749E8B470885C0749783780801759183780C01748B807F11007485F74710FF0000FF0F8578FFFFFF8B57188B521885D20F856AFFFFFF8B400483E81583F8020F865BFFFFFF8B46348B5DC8C64712018947348B46388947388B463C89473C8B46408947408B46448947448B46488947488B464C89474C8B46508947508D74260031D28B4DD485C9753E85D274338B1570793A0885D274298B46088B400483F8140F95C231C983F8050F95C185D1741183E80683F8020F875B020000908D74260089F0E829A2FFFF8345D0048B45CC3945D00F83F80000008B1508783A08E92EFEFFFF8DB6000000008B411C895DC839F88945D40F8551FEFFFF39CE742B8B45C88B7DD4EB128D76008B083B791C0F8537FEFFFF39CE741183C00439D072EA6690E925FEFFFF8D7600C745D401000000E91DFEFFFF8D7426008B5DC889F0E81EF8FFFFBA0100000085C00F8433FFFFFF8B46088B7810C744240805000000C744240498582D08C7042400000000E8BBCDF5FF897C2404890424E803C1F6FFBA01000000E9FBFEFFFF908B460885C074068378080174088B4004E9CFFDFFFF83780C0174F2807E110074ECF74610FF0000FF75E38B4E188379180075DA8B40048D48EB83F9020F87B6FEFFFFE99DFDFFFF8B1504783A088955C88B1508783A088B5DC8C745E400000000C745E000000000C745DC000000008D049339C3C745D8000000000F83E00000008B3385F60F84D60000008B7E088B470883F8020F84AF00000085C00F84A700000083F8030F849E000000807E11000F8494000000807E10000F858A0000008B4F0483F9140F9545D483F905894DD00F95C10FB6C9894DCC0FB64DD4854DCC74688B4DD083E91583F902765D83F8040F840E010000837DD0060F84B0010000837DD0070F84BC010000837DD0080F84BD0100008B55E48D4DE485D27419A120793A0885C00F84560100008B46283B42280F844A0100008931C64613008B1508783A088DB426000000008D04950000000083C304030504783A0839C30F8220FFFFFFA154E039083DD9702D080F84DD0000003DD4702D080F84C50000008B45C0890424E81286F6FF83C46C5B5E5F5DC3E845460500C74608000000008D444003894674A1D4773A0885C0743C8B48048B1039D1743339CA0F83F60100008D4A01890889749008E976FDFFFF895DCC8B4DCC8B5DBC8B55B8893510783A08890D0C783A08E98EFBFFFFC744240401000000890424E822290D00A3D4773A088B108B4804EBB1807E12000F85E8FEFFFFC744240805000000C7442404C0582D08C7042400000000E87CCBF5FFC7442404F9240000C7042465612D0889442408E86896F6FF833D70793A08000F842EFFFFFF837DB4000F8424FFFFFFE89C65F7FF85C07515A1D0F63908890424E84B26060085C00F8406FFFFFFE8CEF6FFFFE9FCFEFFFF89F0894DB0E8DF6BFFFF8B4DB085C00F84A1FEFFFFC64613018B018B40088378080474378B1508783A08E99AFEFFFF8B55E08D4DE0E95FFEFFFF8B1508783A08E989F9FFFF8B55D88D4DD8E949FEFFFF8B55DC8D4DDCE93EFEFFFF807E120074C3837F080474BDC744240805000000C7442404F8582D08C7042400000000E8A2CAF5FFC744240413250000C7042465612D0889442408E88E95F6FF895DCC891D0C783A08893D10783A08C744240805000000C7442404AACA2A08C7042400000000E85FCAF5FFC74424105B6A2D08C744240C00722D08C7442404DE230000C7042465612D0889442408E83B95F6FFC744240805000000C7442404AACA2A08C7042400000000E81BCAF5FFC744241070582D08C744240CDC712D08C74424047A240000C7042465612D0889442408E8F794F6FFC744240805000000C7442404AACA2A08C7042400000000E8D7C9F5FFC74424104C082B08C744240C4B722D08C7442404D3240000C7042465612D0889442408E8B394F6FF895DCC891D0C783A08893D10783A08C744240805000000C7442404AACA2A08C7042400000000E884C9F5FFC7442410706A2D08C744240C00722D08C7442404E5230000C7042465612D0889442408E86094F6FF</bytes> -<bytes id="64"> -5589E557565383EC5C8945D4A190443A0889442404A1D0F63908890424E84EC00E008B008945C0FF50148945E4E8EE20100085C00F8542020000A1B0D63B088B782C83C02C8945C485FF0F84810000008B5DE485DB0F84200100008D47088D75E4897DD089F78B75C08945C8EB2066908B55D0895C2404891424FFD085C0752B8B0385C00F84EE00000089DF89C38B462C85C075DB8D4308894424048B45C8890424E88588FEFF85C075D585DB89FE8B7DD00F84C30000008B038906891C24E8BCFEFFFF897DC48B3F85FF0F857FFFFFFF8B45E485C00F84440100008B55C489028B45E485C08945CC0F8431010000C745BC00000000C745B8000000008D7600A1B0D63B088B55CC8982080400008D45D889442404A130FC3908C744240802000000890424E816290E00C744240401000000890424E81288FEFF8B5DCC83C308E8EB280E0085C07477E8C2280E0085C074EE8B45CCE846FBFFFF85C075EB8B75BC8B55BC85F60F44D38955BC8345B801EBD78DB6000000008B7DD0893C24E88DDCFEFF8B078B55C489028B871404000085C0740AF64008080F84D10000008B870C040000890424E894AAFEFF893C24E8CCFDFFFF8B45C48B38E98AFEFFFF66908B45D885C078618B45CC890424E87EDCFEFF8B55CC8B1285D28955CC0F851EFFFFFF837DB8010F841A0100007E32C744240805000000C744240434182B08C7042400000000E8827DFEFF8B55BC895424088B55B889042489542404E89078FFFF83C45C5B5E5F5DC3C744240805000000C7442404A0172B08C7042400000000E8487DFEFF894424108B45D8894424048B45DC894424088B45E08944240CA1A0CF3B08890424E866220E00E958FFFFFF890424E849CAFEFFE922FFFFFFA1A8DC3B088944240CA1ACDC3B0889442410A1B0DC3B0889442414A184DC3B08890424A188DC3B0889442404A18CDC3B0889442408E89AFA0C0085C00F857CFDFFFFE85D150000837830000F846DFDFFFFA1B0D63B0883781C000F8563FDFFFF8B55C08D45D4C744240C06000000C744240870172B08894424048B4218890424E84F280E00E934FDFFFFC744240805000000C7442404D0172B08C7042400000000E86A7CFEFF8B55BC89542404890424E87F77FFFFE9EAFEFFFF8D76008DBC2700000000</bytes> -<bytes id="65"> -55B80100000089E55383EC148B5D0885DB0F44D8891C24E8802BFFFF85C0740683C4145B5DC3891C24E862FEFFFF6690</bytes> -</bytestable> -</profile> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_sessions.xml b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_sessions.xml deleted file mode 100644 index 6640df745..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/resources/test_sessions.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<sessions> - <!-- <event name="BR_INST_EXEC"> - <session name="current"> - </session> - </event> - <event name="CPU_CLK_UNHALTED"> - <session name="saved"> - </session> - </event> - <event name="UOPS_RETIRED"> - <session name="current"> - </session> - <session name=""<>&'"> - </session> - </event> --> - <session name="current"> - <event name="BR_INST_EXEC"/> - <event name="UOPS_RETIRED"/> - </session> - - <session name="saved"> - <event name="CPU_CLK_UNHALTED"/> - </session> - - <session name=""<>&'"> - <event name="UOPS_RETIRED"/> - </session> -</sessions> - \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/AllCoreTests.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/AllCoreTests.java deleted file mode 100644 index 81cb51cf3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/AllCoreTests.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -@RunWith(Suite.class) -@Suite.SuiteClasses({ TestModelDataParse.class, TestModelDataPreParse.class, TestSessionsParse.class, - TestCheckEventsParse.class, TestCheckEventsPreParse.class, TestInfoParse.class, TestDataModel.class }) -public class AllCoreTests { -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsParse.java deleted file mode 100644 index 632363031..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsParse.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; - -import java.io.FileReader; - -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent.CheckEventsProcessor; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; - -public class TestCheckEventsParse { - private static final String REL_PATH_TO_TEST_XML_OK = "resources/test_check-event_ok.xml"; //$NON-NLS-1$ - private static final String REL_PATH_TO_TEST_XML_INVALID_UMASK = "resources/test_check-event_invalid_umask.xml"; //$NON-NLS-1$ - private static final String REL_PATH_TO_TEST_XML_INVALID_COUNTER = "resources/test_check-event_invalid_counter.xml"; //$NON-NLS-1$ - private int[] test_ok, test_invalid_umask, test_invalid_counter; - - @Before - public void setUp() throws Exception { - test_ok = new int[1]; - setUpHelper(REL_PATH_TO_TEST_XML_OK, test_ok); - test_invalid_umask = new int[1]; - setUpHelper(REL_PATH_TO_TEST_XML_INVALID_UMASK, test_invalid_umask); - test_invalid_counter = new int[1]; - setUpHelper(REL_PATH_TO_TEST_XML_INVALID_COUNTER, test_invalid_counter); - } - - //helper - private void setUpHelper(String fileToParse, final int[] resultArray) throws Exception { - /* this code mostly taken from OpxmlRunner */ - XMLReader reader = null; - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(resultArray); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(fileToParse), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } - - @Test - public void testParse() { - assertEquals(CheckEventsProcessor.EVENT_OK, test_ok[0]); - assertEquals(CheckEventsProcessor.INVALID_UMASK, test_invalid_umask[0]); - assertEquals(CheckEventsProcessor.INVALID_COUNTER, test_invalid_counter[0]); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsPreParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsPreParse.java deleted file mode 100644 index b930e8a90..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestCheckEventsPreParse.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent.CheckEventAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.InfoAdapter; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.SAXException; - -/** - * Test cases for checking the validity of the info parsed from oprofile - * that is modified to mimic the format expected by the SAX parser. - * The oprofile module must be loaded and the driver interface must be - * available. ie. run opcontrol --init - */ -public class TestCheckEventsPreParse { - - private static final String REL_PATH_TO_CHECKEVENT_BAD_UMASK = "resources/test_check-event_invalid_umask.xml"; - private static final String REL_PATH_TO_INFO_PRE_PARSE_RAW = "resources/test_info_pre_parse_raw.xml"; - - // the values are checked for validity in the order they - // appear here (ctr, event, umask) - private String ctr; - private String umask; - private CheckEventAdapter cea; - - /** - * Set the counter, existing event and its default unit mask. - */ - @Before - public void setUp (){ - String devOprofileAbsFilePath = null; - Path devOprofilePath = new Path("resources/dev/oprofile/"); - URL devOprofileURL = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), devOprofilePath , null); - try { - devOprofileAbsFilePath = FileLocator.toFileURL(devOprofileURL).getFile(); - } catch (IOException e) { - fail("Failed to convert the resource file's path."); - } - InfoAdapter.setOprofileDir(devOprofileAbsFilePath); - - File devFile = new File(InfoAdapter.DEV_OPROFILE + "0"); - if (devFile.exists()){ - ctr = "0"; - } - File cpuFile = new File(InfoAdapter.CPUTYPE); - - try (BufferedReader bi = new BufferedReader(new FileReader(cpuFile))) { - String cpuType = bi.readLine(); - File opArchEvents = new File(InfoAdapter.OP_SHARE + cpuType + "/" - + InfoAdapter.EVENTS); - File opArchUnitMasks = new File(InfoAdapter.OP_SHARE + cpuType - + "/" + InfoAdapter.UNIT_MASKS); - - try (BufferedReader eventReader = new BufferedReader( - new FileReader(opArchEvents))) { - String line; - while ((line = eventReader.readLine()) != null) { - // find the first event and use it - if (line.contains("name:")) { - int start = line.indexOf("name:") + 5; - int end = line.indexOf(" ", start); - - // get the string that references the unit mask type - start = line.indexOf("um:") + 3; - end = line.indexOf(" ", start); - String um = line.substring(start, end); - - try (BufferedReader unitMaskReader = new BufferedReader( - new FileReader(opArchUnitMasks))) { - while ((line = unitMaskReader.readLine()) != null) { - if (line.contains("name:" + um + " ")) { - start = line.indexOf("default:") + 8; - String unitMaskDef = line.substring(start); - // convert from hex. to dec. - unitMaskDef = unitMaskDef.replaceFirst( - "0x", ""); - umask = String.valueOf(Integer.parseInt( - unitMaskDef, 16)); - break; - } - } - } - break; - } - } - } - } catch (IOException e) { - } - } - - @Test - public void testBadUnitMask (){ - umask = "999"; - assertValidity(REL_PATH_TO_CHECKEVENT_BAD_UMASK); - } - - public void assertValidity (String path){ - IFileStore fileStore = null; - String infoAbsFilePath = null; - - Path infoFilePath = new Path(REL_PATH_TO_INFO_PRE_PARSE_RAW); - URL infoFileURL = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), infoFilePath, null); - try { - infoAbsFilePath = FileLocator.toFileURL(infoFileURL).getFile(); - fileStore = EFS.getLocalFileSystem().getStore(new Path(infoAbsFilePath)); - } catch (IOException e) { - fail("Failed to convert the resource file's path."); - } - - InfoAdapter ia = new InfoAdapter(fileStore); - ia.process(); - - cea = new CheckEventAdapter(ctr, "CPU_CLK_UNHALTED", umask); - cea.process(); - Document actualDocument = cea.getDocument(); - Element actualRoot = (Element) actualDocument.getElementsByTagName(CheckEventAdapter.CHECK_EVENTS).item(0); - - Path filePath = new Path(path); - URL fileURL = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), filePath, null); - Element expectedRoot = null; - try { - String absFilePath = FileLocator.toFileURL(fileURL).getFile(); - File file = new File (absFilePath); - FileInputStream inp = new FileInputStream(file); - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - builder = factory.newDocumentBuilder(); - Document expectedDocument = builder.parse(inp); - expectedRoot = (Element) expectedDocument.getElementsByTagName(CheckEventAdapter.CHECK_EVENTS).item(0); - - } catch (FileNotFoundException e) { - fail("File was not found."); - } catch (IOException e) { - fail("Failed to convert the resource file's path."); - } catch (SAXException e) { - fail("Failed to parse the XML."); - } catch (ParserConfigurationException e) { - fail("Failed to create a document builder."); - } - - Element expectedResultTag = (Element) expectedRoot.getElementsByTagName(CheckEventAdapter.RESULT).item(0); - Element actualResultTag = (Element) actualRoot.getElementsByTagName(CheckEventAdapter.RESULT).item(0); - assertEquals(expectedResultTag.getTextContent(), actualResultTag.getTextContent()); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestDataModel.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestDataModel.java deleted file mode 100644 index f5f906cca..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestDataModel.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.oprofile.tests.TestingOpModelRoot; -import org.junit.Before; -import org.junit.Test; - -public class TestDataModel { - private TestingOpModelRoot _testRoot; - - @Before - public void setUp() { - _testRoot = new TestingOpModelRoot(); - _testRoot.refreshModel(); - } - - @Test - public void testParse() { - OpModelSession[] sessions = _testRoot.getSessions(); - assertEquals(3, sessions.length); - assertEquals(TestingOpModelRoot.NAME_E1, sessions[0].getName()); - assertEquals(TestingOpModelRoot.NAME_E2, sessions[1].getName()); - - OpModelEvent[] e1_sessions = sessions[0].getEvents(), e2_sessions = sessions[1].getEvents(); - assertEquals(1, e1_sessions.length); - assertEquals(4, e2_sessions.length); - - assertEquals(205000, e1_sessions[0].getCount()); - assertEquals(205000, e2_sessions[0].getCount()); - assertEquals(200000, e2_sessions[1].getCount()); - assertEquals(OpModelImage.IMAGE_PARSE_ERROR, e2_sessions[2].getCount()); - assertEquals(0, e2_sessions[3].getCount()); - - assertEquals(TestingOpModelRoot.NAME_E1_S1, e1_sessions[0].getName()); - assertEquals(TestingOpModelRoot.NAME_E2_S1, e2_sessions[0].getName()); - assertEquals(TestingOpModelRoot.NAME_E2_S2, e2_sessions[1].getName()); - assertEquals(TestingOpModelRoot.NAME_E2_S3, e2_sessions[2].getName()); - assertEquals(TestingOpModelRoot.NAME_E2_S4, e2_sessions[3].getName()); - - //further image parsing is tested in the TestModelDataParse testParse - } - - @Test - public void testStringOutput() { - assertEquals(TestingOpModelRoot.ROOT_OUTPUT, _testRoot.toString()); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestInfoParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestInfoParse.java deleted file mode 100644 index 4910a3659..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestInfoParse.java +++ /dev/null @@ -1,417 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.io.FileReader; - -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; - -public class TestInfoParse { - private static final String REL_PATH_TO_TEST_XML = "resources/test_info.xml"; //$NON-NLS-1$ - private static final String REL_PATH_TO_TEST_XML_0CTR = "resources/test_info_0ctrs.xml"; //$NON-NLS-1$ - - private OpInfo info; - private OpInfo info_0ctr; - - @Before - public void setUp() throws Exception { - /* this code mostly taken from OpxmlRunner */ - XMLReader reader = null; - info = new OpInfo(); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(info); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - - info_0ctr = new OpInfo(); - handler = OprofileSAXHandler.getInstance(info_0ctr); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(REL_PATH_TO_TEST_XML_0CTR), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } - - @Test - public void testParse() { - assertEquals("/var/lib/oprofile/samples/", info.getDefault(OpInfo.DEFAULT_SAMPLE_DIR)); //$NON-NLS-1$ - assertEquals("/var/lib/oprofile/lock", info.getDefault(OpInfo.DEFAULT_LOCK_FILE)); //$NON-NLS-1$ - assertEquals("/var/lib/oprofile/samples/oprofiled.log", info.getDefault(OpInfo.DEFAULT_LOG_FILE)); //$NON-NLS-1$ - assertEquals("/var/lib/oprofile/complete_dump", info.getDefault(OpInfo.DEFAULT_DUMP_STATUS)); //$NON-NLS-1$ - assertTrue(info.getTimerMode()); - - assertEquals(800, info.getCPUSpeed(),0); - assertEquals(2, info.getNrCounters()); - - OpEvent[] ctr0_events = info.getEvents(0), ctr1_events = info.getEvents(1); - assertEquals(3, ctr0_events.length); - assertEquals(3, ctr1_events.length); - - OpEvent ctr0_e1 = ctr0_events[0], ctr0_e2 = ctr0_events[1], ctr0_e3 = ctr0_events[2], - ctr1_e1 = ctr1_events[0], ctr1_e2 = ctr1_events[1], ctr1_e3 = ctr1_events[2]; - //events must be ordered alphabetically - assertEquals(6000, ctr0_e1.getMinCount()); - assertEquals("CPU_CLK_UNHALTED", ctr0_e1.getText()); //$NON-NLS-1$ - assertEquals("Clock cycles when not halted", ctr0_e1.getTextDescription()); //$NON-NLS-1$ - assertEquals(500, ctr0_e2.getMinCount()); - assertEquals("DTLB_MISSES", ctr0_e2.getText()); //$NON-NLS-1$ - assertEquals("DTLB miss events", ctr0_e2.getTextDescription()); //$NON-NLS-1$ - assertEquals(6000, ctr0_e3.getMinCount()); - assertEquals("INST_RETIRED_ANY_P", ctr0_e3.getText()); //$NON-NLS-1$ - assertEquals("number of instructions retired", ctr0_e3.getTextDescription()); //$NON-NLS-1$ - assertEquals(500, ctr1_e1.getMinCount()); - assertEquals("EIST_TRANS_ALL", ctr1_e1.getText()); //$NON-NLS-1$ - assertEquals("Intel(tm) Enhanced SpeedStep(r) Technology transitions", ctr1_e1.getTextDescription()); //$NON-NLS-1$ - assertEquals(500, ctr1_e2.getMinCount()); - assertEquals("L2_LINES_OUT", ctr1_e2.getText()); //$NON-NLS-1$ - assertEquals("number of recovered lines from L2", ctr1_e2.getTextDescription()); //$NON-NLS-1$ - assertEquals(500, ctr1_e3.getMinCount()); - assertEquals("L2_M_LINES_IN", ctr1_e3.getText()); //$NON-NLS-1$ - assertEquals("number of modified lines allocated in L2", ctr1_e3.getTextDescription()); //$NON-NLS-1$ - - OpUnitMask ctr0_e1_mask = ctr0_e1.getUnitMask(), ctr0_e2_mask = ctr0_e2.getUnitMask(), - ctr0_e3_mask = ctr0_e3.getUnitMask(), ctr1_e1_mask = ctr1_e1.getUnitMask(), - ctr1_e2_mask = ctr1_e2.getUnitMask(), ctr1_e3_mask = ctr1_e3.getUnitMask(); - - assertEquals(0, ctr0_e1_mask.getMaskValue()); - assertEquals(OpUnitMask.EXCLUSIVE, ctr0_e1_mask.getType()); - assertEquals(3, ctr0_e1_mask.getNumMasks()); - assertEquals(0, ctr0_e1_mask.getMaskFromIndex(0)); - assertEquals("Unhalted core cycles", ctr0_e1_mask.getText(0)); //$NON-NLS-1$ - assertEquals(1, ctr0_e1_mask.getMaskFromIndex(1)); - assertEquals("Unhalted bus cycles", ctr0_e1_mask.getText(1)); //$NON-NLS-1$ - assertEquals(2, ctr0_e1_mask.getMaskFromIndex(2)); - assertEquals("Unhalted bus cycles of this core while the other core is halted", ctr0_e1_mask.getText(2)); //$NON-NLS-1$ - - assertEquals(15, ctr0_e2_mask.getMaskValue()); - assertEquals(OpUnitMask.BITMASK, ctr0_e2_mask.getType()); - assertEquals(4, ctr0_e2_mask.getNumMasks()); - assertEquals(1, ctr0_e2_mask.getMaskFromIndex(0)); - assertEquals("ANY\tMemory accesses that missed the DTLB.", ctr0_e2_mask.getText(0)); //$NON-NLS-1$ - assertEquals(2, ctr0_e2_mask.getMaskFromIndex(1)); - assertEquals("MISS_LD\tDTLB misses due to load operations.", ctr0_e2_mask.getText(1)); //$NON-NLS-1$ - assertEquals(4, ctr0_e2_mask.getMaskFromIndex(2)); - assertEquals("L0_MISS_LD L0 DTLB misses due to load operations.", ctr0_e2_mask.getText(2)); //$NON-NLS-1$ - assertEquals(8, ctr0_e2_mask.getMaskFromIndex(3)); - assertEquals("MISS_ST\tTLB misses due to store operations.", ctr0_e2_mask.getText(3)); //$NON-NLS-1$ - - assertEquals(0, ctr0_e3_mask.getMaskValue()); - assertEquals(OpUnitMask.MANDATORY, ctr0_e3_mask.getType()); - assertEquals(1, ctr0_e3_mask.getNumMasks()); - assertEquals(0, ctr0_e3_mask.getMaskFromIndex(0)); - assertEquals("No unit mask", ctr0_e3_mask.getText(0)); //$NON-NLS-1$ - - assertEquals(1, ctr1_e1_mask.getMaskValue()); - assertEquals(OpUnitMask.INVALID, ctr1_e1_mask.getType()); - assertEquals(1, ctr1_e1_mask.getNumMasks()); - assertEquals(-1, ctr1_e1_mask.getMaskFromIndex(0)); //-1 because of invalid mask type - assertEquals("No unit mask", ctr1_e1_mask.getText(0)); //$NON-NLS-1$ - - assertEquals(112, ctr1_e2_mask.getMaskValue()); - assertEquals(OpUnitMask.BITMASK, ctr1_e2_mask.getType()); - assertEquals(5, ctr1_e2_mask.getNumMasks()); - assertEquals(192, ctr1_e2_mask.getMaskFromIndex(0)); - assertEquals("core: all cores", ctr1_e2_mask.getText(0)); //$NON-NLS-1$ - assertEquals(64, ctr1_e2_mask.getMaskFromIndex(1)); - assertEquals("core: this core", ctr1_e2_mask.getText(1)); //$NON-NLS-1$ - assertEquals(48, ctr1_e2_mask.getMaskFromIndex(2)); - assertEquals("prefetch: all inclusive", ctr1_e2_mask.getText(2)); //$NON-NLS-1$ - assertEquals(16, ctr1_e2_mask.getMaskFromIndex(3)); - assertEquals("prefetch: Hardware prefetch only", ctr1_e2_mask.getText(3)); //$NON-NLS-1$ - assertEquals(0, ctr1_e2_mask.getMaskFromIndex(4)); - assertEquals("prefetch: exclude hardware prefetch", ctr1_e2_mask.getText(4)); //$NON-NLS-1$ - - assertEquals(64, ctr1_e3_mask.getMaskValue()); - assertEquals(OpUnitMask.EXCLUSIVE, ctr1_e3_mask.getType()); - assertEquals(2, ctr1_e3_mask.getNumMasks()); - assertEquals(192, ctr1_e3_mask.getMaskFromIndex(0)); - assertEquals("All cores", ctr1_e3_mask.getText(0)); //$NON-NLS-1$ - assertEquals(64, ctr1_e3_mask.getMaskFromIndex(1)); - assertEquals("This core", ctr1_e3_mask.getText(1)); //$NON-NLS-1$ - - assertNull(ctr0_e1_mask.getText(-1)); - - assertEquals(0, info_0ctr.getNrCounters()); - } - - @Test - public void testUnitMask() { - //test types of masks setting/unsetting - OpUnitMask mask_bit1 = info.getEvents(0)[1].getUnitMask(), -// mask_bit2 = info.getEvents(1)[1].getUnitMask(), - mask_exl = info.getEvents(0)[0].getUnitMask(), - mask_mand = info.getEvents(0)[2].getUnitMask(), - mask_invalid = info.getEvents(1)[0].getUnitMask(); - - //bitmask 1 test -- bitmasks all mutually exclusive - assertEquals(15, mask_bit1.getMaskValue()); - mask_bit1.setMaskValue(0); - mask_bit1.setMaskFromIndex(0); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(1, mask_bit1.getMaskValue()); - - mask_bit1.setMaskFromIndex(1); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(3, mask_bit1.getMaskValue()); - - mask_bit1.setMaskFromIndex(2); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(7, mask_bit1.getMaskValue()); - - mask_bit1.setMaskFromIndex(3); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(15, mask_bit1.getMaskValue()); - - mask_bit1.unSetMaskFromIndex(1); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(3)); - - mask_bit1.unSetMaskFromIndex(2); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(3)); - - mask_bit1.unSetMaskFromIndex(3); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - - mask_bit1.setMaskFromIndex(2); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(5, mask_bit1.getMaskValue()); - - mask_bit1.unSetMaskFromIndex(1); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - - mask_bit1.unSetMaskFromIndex(3); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(5, mask_bit1.getMaskValue()); - - mask_bit1.setMaskFromIndex(2); - assertEquals(true, mask_bit1.isMaskSetFromIndex(0)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(1)); - assertEquals(true, mask_bit1.isMaskSetFromIndex(2)); - assertEquals(false, mask_bit1.isMaskSetFromIndex(3)); - assertEquals(5, mask_bit1.getMaskValue()); - - mask_bit1.setMaskValue(OpUnitMask.SET_DEFAULT_MASK); - assertEquals(15, mask_bit1.getMaskValue()); - - //bitmask 2 test -- bitmasks overlap - /* bug related to overlapping bitmasks eclipse bz 261917 */ -// assertEquals(112, mask_bit2.getMaskValue()); -// mask_bit2.setMaskValue(0); -// mask_bit2.setMaskFromIndex(0); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(192, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskFromIndex(1); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(3, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskFromIndex(2); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(7, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskFromIndex(3); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(15, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskFromIndex(4); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(15, mask_bit2.getMaskValue()); -// -// mask_bit2.unSetMaskFromIndex(1); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(4)); -// -// mask_bit2.unSetMaskFromIndex(2); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(4)); -// -// mask_bit2.unSetMaskFromIndex(3); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(4)); -// -// mask_bit2.unSetMaskFromIndex(4); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -// -// mask_bit2.setMaskFromIndex(2); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(5, mask_bit2.getMaskValue()); -// -// mask_bit2.unSetMaskFromIndex(1); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -// -// mask_bit2.unSetMaskFromIndex(3); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(5, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskFromIndex(2); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(0)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(1)); -// assertEquals(true, mask_bit2.isMaskSetFromIndex(2)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(3)); -// assertEquals(false, mask_bit2.isMaskSetFromIndex(4)); -//// assertEquals(5, mask_bit2.getMaskValue()); -// -// mask_bit2.setMaskValue(OpUnitMask.SET_DEFAULT_MASK); -// assertEquals(112, mask_bit2.getMaskValue()); - - - //exclusive test - assertEquals(0, mask_exl.getMaskValue()); - assertEquals(true, mask_exl.isMaskSetFromIndex(0)); - assertEquals(false, mask_exl.isMaskSetFromIndex(1)); - assertEquals(false, mask_exl.isMaskSetFromIndex(2)); - mask_exl.setMaskFromIndex(1); - assertEquals(false, mask_exl.isMaskSetFromIndex(0)); - assertEquals(1, mask_exl.getMaskValue()); - mask_exl.unSetMaskFromIndex(1); - assertEquals(1, mask_exl.getMaskValue()); - mask_exl.setMaskFromIndex(2); - assertEquals(2, mask_exl.getMaskValue()); - mask_exl.setDefaultMaskValue(); - assertEquals(0, mask_exl.getMaskValue()); - - - //mandatory test - assertEquals(0, mask_mand.getMaskValue()); - assertEquals(false, mask_mand.isMaskSetFromIndex(0)); - mask_mand.setMaskFromIndex(0); - assertEquals(0, mask_mand.getMaskValue()); - mask_mand.unSetMaskFromIndex(0); - assertEquals(0, mask_mand.getMaskValue()); - mask_mand.setMaskValue(10); - mask_mand.setDefaultMaskValue(); - assertEquals(0, mask_mand.getMaskValue()); - - //invalid test - assertEquals(1, mask_invalid.getMaskValue()); - assertEquals(false, mask_invalid.isMaskSetFromIndex(0)); - mask_invalid.setMaskFromIndex(0); - assertEquals(1, mask_invalid.getMaskValue()); - mask_invalid.unSetMaskFromIndex(0); - assertEquals(1, mask_invalid.getMaskValue()); - mask_invalid.setMaskValue(0); - mask_invalid.setDefaultMaskValue(); - assertEquals(1, mask_invalid.getMaskValue()); - } - - @Test - public void testInfo() { - OpEvent[] result = info.getEvents(-1); - assertEquals(0, result.length); - - assertNull(info.findEvent("doesnt exist")); //$NON-NLS-1$ - - OpEvent event = info.findEvent("CPU_CLK_UNHALTED"); //$NON-NLS-1$ - assertEquals("CPU_CLK_UNHALTED", event.getText()); //$NON-NLS-1$ - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataParse.java deleted file mode 100644 index 8352d8199..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataParse.java +++ /dev/null @@ -1,184 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.io.FileReader; - -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSample; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSymbol; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; - -public class TestModelDataParse { - private static final String REL_PATH_TO_TEST_XML = "resources/test_model-data.xml"; //$NON-NLS-1$ - private static final String REL_PATH_TO_TEST_XML_MULTI_IMAGE = "resources/test_model-data_multiple_image.xml"; //$NON-NLS-1$ - private static final String IMAGE_OUTPUT = "/test/path/for/image, Count: 205000, Dependent Count: 5000\nSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\tSample: Line #: 42, Count: 130000\n\tSample: Line #: 36, Count: 40000\n\tSample: Line #: 31, Count: 9999\n\tSample: Line #: 39, Count: 1\nSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\tSample: Line #: 94, Count: 19998\n\tSample: Line #: 12, Count: 1\n\tSample: Line #: 55, Count: 1\nDependent Image: /no-vmlinux, Count: 4400\nDependent Image: /lib64/ld-2.9.so, Count: 300\n\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\tSample: Line #: 0, Count: 299\n\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\tSample: Line #: 0, Count: 1\nDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\nDependent Image: /lib64/libc-2.9.so, Count: 140\n\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\tSample: Line #: 0, Count: 100\n\tSymbols: bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*), File: , Count: 40\n\t\tSample: Line #: 0, Count: 40\n"; //$NON-NLS-1$ - private static final String IMAGE_OUTPUT_WITHTAB = "/test/path/for/image, Count: 205000, Dependent Count: 5000\n\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\tSample: Line #: 42, Count: 130000\n\t\tSample: Line #: 36, Count: 40000\n\t\tSample: Line #: 31, Count: 9999\n\t\tSample: Line #: 39, Count: 1\n\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\tSample: Line #: 94, Count: 19998\n\t\tSample: Line #: 12, Count: 1\n\t\tSample: Line #: 55, Count: 1\n\tDependent Image: /no-vmlinux, Count: 4400\n\tDependent Image: /lib64/ld-2.9.so, Count: 300\n\t\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\t\tSample: Line #: 0, Count: 299\n\t\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\t\tSample: Line #: 0, Count: 1\n\tDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\n\tDependent Image: /lib64/libc-2.9.so, Count: 140\n\t\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\t\tSample: Line #: 0, Count: 100\n\t\tSymbols: bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*), File: , Count: 40\n\t\t\tSample: Line #: 0, Count: 40\n"; //$NON-NLS-1$ - - private OpModelImage parsedImage; - private OpModelImage parsedErrorImage; - - @Before - public void setUp() throws Exception { - /* this code mostly taken from OpxmlRunner */ - XMLReader reader = null; - parsedImage = new OpModelImage(); - ModelDataProcessor.CallData image = new ModelDataProcessor.CallData(parsedImage); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(image); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - - //2nd test image - parsedErrorImage = new OpModelImage(); - ModelDataProcessor.CallData errorImage = new ModelDataProcessor.CallData(parsedErrorImage); - handler = OprofileSAXHandler.getInstance(errorImage); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(REL_PATH_TO_TEST_XML_MULTI_IMAGE), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } - - @Test - public void testParse() { - //test attributes - assertEquals("/test/path/for/image", parsedImage.getName()); //$NON-NLS-1$ - assertEquals(205000, parsedImage.getCount()); - - //test symbols - OpModelSymbol[] symbols = parsedImage.getSymbols(); - assertEquals(2, symbols.length); - OpModelSymbol sym1 = symbols[0], sym2 = symbols[1]; - assertEquals("TestFunction1(int)", sym1.getName()); //$NON-NLS-1$ - assertEquals("/test/path/for/src/image.cpp", sym1.getFilePath()); //$NON-NLS-1$ - assertEquals(180000, sym1.getCount()); - assertEquals("TestFunction2(int, int)", sym2.getName()); //$NON-NLS-1$ - assertEquals("/test/path/for/src/image2.cpp", sym2.getFilePath()); //$NON-NLS-1$ - assertEquals(20000, sym2.getCount()); - - //test samples - OpModelSample[] sym1_spls = sym1.getSamples(), sym2_spls = sym2.getSamples(); - assertEquals(4, sym1_spls.length); - assertEquals(3, sym2_spls.length); - OpModelSample sym1_spl1 = sym1_spls[0], sym1_spl2 = sym1_spls[1], sym1_spl3 = sym1_spls[2], sym1_spl4 = sym1_spls[3]; - OpModelSample sym2_spl1 = sym2_spls[0], sym2_spl2 = sym2_spls[1], sym2_spl3 = sym2_spls[2]; - assertEquals(130000, sym1_spl1.getCount()); - assertEquals(42, sym1_spl1.getLine()); - assertEquals(40000, sym1_spl2.getCount()); - assertEquals(36, sym1_spl2.getLine()); - assertEquals(9999, sym1_spl3.getCount()); - assertEquals(31, sym1_spl3.getLine()); - assertEquals(1, sym1_spl4.getCount()); - assertEquals(39, sym1_spl4.getLine()); - assertEquals(19998, sym2_spl1.getCount()); - assertEquals(94, sym2_spl1.getLine()); - assertEquals(1, sym2_spl2.getCount()); - assertEquals(12, sym2_spl2.getLine()); - assertEquals(1, sym2_spl3.getCount()); - assertEquals(55, sym2_spl3.getLine()); - - //test dependent images - assertEquals(true, parsedImage.hasDependents()); - assertEquals(5000, parsedImage.getDepCount()); - OpModelImage[] deps = parsedImage.getDependents(); - assertEquals(4, deps.length); - OpModelImage dep1 = deps[0], dep2 = deps[1], dep3 = deps[2], dep4 = deps[3]; - - assertEquals(false, dep1.hasDependents()); - assertEquals("/no-vmlinux", dep1.getName()); //$NON-NLS-1$ - assertEquals(4400, dep1.getCount()); - - assertEquals(false, dep2.hasDependents()); - OpModelSymbol[] dep2_syms = dep2.getSymbols(); - assertEquals(2, dep2_syms.length); - OpModelSymbol dep2_sym1 = dep2_syms[0], dep2_sym2 = dep2_syms[1]; - OpModelSample[] dep2_sym1_spls = dep2_sym1.getSamples(), dep2_sym2_spls = dep2_sym2.getSamples(); - assertEquals(1, dep2_sym1_spls.length); - assertEquals(1, dep2_sym2_spls.length); - OpModelSample dep2_sym1_spl1 = dep2_sym1_spls[0], dep2_sym2_spl1 = dep2_sym2_spls[0]; - assertEquals("/lib64/ld-2.9.so", dep2.getName()); //$NON-NLS-1$ - assertEquals(300, dep2.getCount()); - assertEquals("do_lookup_x", dep2_sym1.getName()); //$NON-NLS-1$ - assertEquals("dl-lookup.c", dep2_sym1.getFilePath()); //$NON-NLS-1$ - assertEquals(299, dep2_sym1.getCount()); - assertEquals(299, dep2_sym1_spl1.getCount()); - assertEquals(0, dep2_sym1_spl1.getLine()); - assertEquals("_dl_unload_cache", dep2_sym2.getName()); //$NON-NLS-1$ - assertEquals("rawmemchr.c", dep2_sym2.getFilePath()); //$NON-NLS-1$ - assertEquals(1, dep2_sym2.getCount()); - assertEquals(1, dep2_sym2_spl1.getCount()); - assertEquals(0, dep2_sym2_spl1.getLine()); - - assertEquals(false, dep3.hasDependents()); - assertEquals("/usr/lib64/libstdc++.so.6.0.10", dep3.getName()); //$NON-NLS-1$ - assertEquals(160, dep3.getCount()); - - assertEquals(false, dep4.hasDependents()); - OpModelSymbol[] dep4_syms = dep4.getSymbols(); - assertEquals(2, dep4_syms.length); - OpModelSymbol dep4_sym1 = dep4_syms[0], dep4_sym2 = dep4_syms[1]; - OpModelSample[] dep4_sym1_spls = dep4_sym1.getSamples(), dep4_sym2_spls = dep4_sym2.getSamples(); - assertEquals(1, dep4_sym1_spls.length); - assertEquals(1, dep4_sym2_spls.length); - OpModelSample dep4_sym1_spl1 = dep4_sym1_spls[0], dep4_sym2_spl1 = dep4_sym2_spls[0]; - assertEquals("/lib64/libc-2.9.so", dep4.getName()); //$NON-NLS-1$ - assertEquals(140, dep4.getCount()); - assertEquals("_IO_new_file_seekoff", dep4_sym1.getName()); //$NON-NLS-1$ - assertEquals("", dep4_sym1.getFilePath()); //$NON-NLS-1$ - assertEquals(100, dep4_sym1.getCount()); - assertEquals(100, dep4_sym1_spl1.getCount()); - assertEquals(0, dep4_sym1_spl1.getLine()); - assertEquals("bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)", dep4_sym2.getName()); //$NON-NLS-1$ - assertEquals("", dep4_sym2.getFilePath()); //$NON-NLS-1$ - assertEquals(40, dep4_sym2.getCount()); - assertEquals(40, dep4_sym2_spl1.getCount()); - assertEquals(0, dep4_sym2_spl1.getLine()); - - - assertEquals(OpModelImage.IMAGE_PARSE_ERROR, parsedErrorImage.getCount()); - assertEquals(0, parsedErrorImage.getDepCount()); - assertNull(parsedErrorImage.getDependents()); - assertNull(parsedErrorImage.getSymbols()); - assertEquals("", parsedErrorImage.getName()); //$NON-NLS-1$ - } - - @Test - public void testStringOutput() { - assertEquals(IMAGE_OUTPUT, parsedImage.toString()); - assertEquals(IMAGE_OUTPUT_WITHTAB, parsedImage.toString("\t")); //$NON-NLS-1$ - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataPreParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataPreParse.java deleted file mode 100644 index ddcac7034..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestModelDataPreParse.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataAdapter; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * Test cases for checking validity of the model data parsed from oprofile that - * is modified to mimic the XML format expected by the SAX parser. - * The oprofile module must be loaded and the driver interface must be - * available. ie. run opcontrol --init - */ -public class TestModelDataPreParse { - - private static final String REL_PATH_TO_MODEL_DATA_RAW = "resources/test_model-data_raw.xml"; - private static final String REL_PATH_TO_MODEL_DATA_EXPECTED = "resources/test_model-data_expected.xml"; - - ModelDataAdapter mda; - Element [] rootList; - ArrayList<ArrayList<String>> valueList; - - @Before - public void setUp (){ - String absFilePath; - Path filePath = new Path(REL_PATH_TO_MODEL_DATA_RAW); - URL fileURL = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), filePath, null); - - try { - absFilePath = FileLocator.toFileURL(fileURL).getFile(); - File file = new File (absFilePath); - FileInputStream inp = new FileInputStream(file); - mda = new ModelDataAdapter(inp); - mda.process(); - } catch (IOException e) { - e.printStackTrace(); - } - - mda.process(); - Document actualDocument = mda.getDocument(); - Element actualRoot = (Element) actualDocument.getElementsByTagName(ModelDataAdapter.MODEL_DATA).item(0); - - filePath = new Path(REL_PATH_TO_MODEL_DATA_EXPECTED); - fileURL = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), filePath, null); - Element expectedRoot = null; - - try { - absFilePath = FileLocator.toFileURL(fileURL).getFile(); - File file = new File (absFilePath); - FileInputStream inp = new FileInputStream(file); - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - builder = factory.newDocumentBuilder(); - Document expectedDocument = builder.parse(inp); - expectedRoot = (Element) expectedDocument.getElementsByTagName(ModelDataAdapter.MODEL_DATA).item(0); - } catch (FileNotFoundException e) { - fail("File was not found."); - } catch (IOException e) { - fail("Failed to convert the resource file's path."); - } catch (SAXException e) { - fail("Failed to parse the XML."); - } catch (ParserConfigurationException e) { - fail("Failed to create a document builder."); - } - - rootList = new Element [] {expectedRoot, actualRoot}; - valueList = new ArrayList<> (); - - for (int i = 0; i < rootList.length; i++){ - valueList.add(new ArrayList<String>()); - } - } - - @Test - public void testBasic (){ - final String [] imageAttrs = new String [] {ModelDataAdapter.NAME, ModelDataAdapter.COUNT}; - final String [] symbolAttrs = new String [] {ModelDataAdapter.NAME, ModelDataAdapter.FILE, ModelDataAdapter.COUNT}; - final String [] sampleTags = new String [] {ModelDataAdapter.COUNT, ModelDataAdapter.LINE}; - - for (int i = 0; i < rootList.length; i++){ - Element imageTag = (Element) rootList[i].getElementsByTagName(ModelDataAdapter.IMAGE).item(0); - // image name, count - for (int j = 0; j < imageAttrs.length; j++){ - String attr = imageTag.getAttribute(imageAttrs[j]); - valueList.get(i).add(attr); - } - - Element symbolsTag = (Element) rootList[i].getElementsByTagName(ModelDataAdapter.SYMBOLS).item(0); - NodeList symbolList = symbolsTag.getElementsByTagName(ModelDataAdapter.SYMBOL); - // go through each symbol - for (int j = 0; j < symbolList.getLength(); j++){ - Element symbolTag = (Element) symbolList.item(j); - // symbol name, file, count - for (int k = 0; k < symbolAttrs.length; k++){ - String attr = symbolTag.getAttribute(symbolAttrs[k]); - valueList.get(i).add(attr); - } - - NodeList sampleList = symbolsTag.getElementsByTagName(ModelDataAdapter.SAMPLE); - // go through each sample - for (int k = 0; k < sampleList.getLength(); k++){ - Element sampleTag = (Element) sampleList.item(k); - - for (int n = 0; n < sampleTags.length; n++){ - Element elem = (Element) sampleTag.getElementsByTagName(sampleTags[n]).item(0); - valueList.get(i).add(elem.getTextContent()); - } - } - } - } - assertSameValues(valueList); - } - - private void assertSameValues(ArrayList<ArrayList<String>> valueList) { - for (int i = 0; i < valueList.get(0).size(); i++){ - assertEquals(valueList.get(0).get(i), valueList.get(1).get(i)); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestSessionsParse.java b/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestSessionsParse.java deleted file mode 100644 index 134b761aa..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core.tests/src/org/eclipse/linuxtools/oprofile/core/tests/TestSessionsParse.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.core.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.io.FileReader; -import java.util.ArrayList; - -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionsProcessor; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; - -public class TestSessionsParse { - private static final String REL_PATH_TO_TEST_XML = "resources/test_sessions.xml"; //$NON-NLS-1$ - private static final String EVENT1_OUTPUT = "current\nEvent: BR_INST_EXEC\nEvent: UOPS_RETIRED\n"; //$NON-NLS-1$ - private static final String EVENT1_OUTPUT_WITHTAB = "current\n\tEvent: BR_INST_EXEC\n\tEvent: UOPS_RETIRED\n"; //$NON-NLS-1$ - private static final String EVENT2_OUTPUT = "saved\nEvent: CPU_CLK_UNHALTED\n"; //$NON-NLS-1$ - private static final String EVENT2_OUTPUT_WITHTAB = "saved\n\tEvent: CPU_CLK_UNHALTED\n"; //$NON-NLS-1$ - private static final String EVENT3_OUTPUT = "\"<>&'\nEvent: UOPS_RETIRED\n"; //$NON-NLS-1$ - private static final String EVENT3_OUTPUT_WITHTAB = "\"<>&'\n\tEvent: UOPS_RETIRED\n"; //$NON-NLS-1$ - - private ArrayList<OpModelSession> eventList; - - @Before - public void setUp() throws Exception { - /* this code mostly taken from OpxmlRunner */ - XMLReader reader = null; - eventList = new ArrayList<>(); - SessionsProcessor.SessionInfo sessioninfo = new SessionsProcessor.SessionInfo(eventList); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(sessioninfo); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } - - @Test - public void testParse() { - assertEquals(3, eventList.size()); - OpModelEvent evt1 = eventList.get(0).getEvents()[0], evt2 = eventList.get(1).getEvents()[0], evt3 = eventList.get(2).getEvents()[0]; - - assertEquals("BR_INST_EXEC", evt1.getName()); //$NON-NLS-1$ - assertEquals("CPU_CLK_UNHALTED", evt2.getName()); //$NON-NLS-1$ - assertEquals("UOPS_RETIRED", evt3.getName()); //$NON-NLS-1$ - - - OpModelSession evt1_ss_s1 = evt1.getSession(); - OpModelSession evt2_ss_s1 = evt2.getSession(); - OpModelSession evt3_ss_s1 = evt3.getSession(); - - - assertEquals("current", evt1_ss_s1.getName()); //$NON-NLS-1$ - assertEquals(true, evt1_ss_s1.isDefaultSession()); - assertNull(evt1.getImage()); - assertEquals(0, evt1.getCount()); - assertEquals(evt1, evt1_ss_s1.getEvents()[0]); - - assertEquals("saved", evt2_ss_s1.getName()); //$NON-NLS-1$ - assertEquals(false, evt2_ss_s1.isDefaultSession()); - assertNull(evt2.getImage()); - assertEquals(0, evt2.getCount()); - assertEquals(evt2, evt2_ss_s1.getEvents()[0]); - - assertEquals("\"<>&'", evt3_ss_s1.getName()); //$NON-NLS-1$ - assertEquals(false, evt3_ss_s1.isDefaultSession()); - assertNull(evt3.getImage()); - assertEquals(0, evt3.getCount()); - assertEquals(evt3, evt3_ss_s1.getEvents()[0]); - } - - @Test - public void testStringOutput() { - assertEquals(EVENT1_OUTPUT, eventList.get(0).toString()); - assertEquals(EVENT1_OUTPUT_WITHTAB, eventList.get(0).toString("\t")); //$NON-NLS-1$ - assertEquals(EVENT2_OUTPUT, eventList.get(1).toString()); - assertEquals(EVENT2_OUTPUT_WITHTAB, eventList.get(1).toString("\t")); //$NON-NLS-1$ - assertEquals(EVENT3_OUTPUT, eventList.get(2).toString()); - assertEquals(EVENT3_OUTPUT_WITHTAB, eventList.get(2).toString("\t")); //$NON-NLS-1$ - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.core/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.core/.gitignore deleted file mode 100644 index a9b1a8cae..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -oprofile-core.jar -target -natives/linux/scripts/opcontrol \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/.project b/oprofile/org.eclipse.linuxtools.oprofile.core/.project deleted file mode 100644 index 84a2053c2..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/.project +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.core</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 4523f478b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,109 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled -org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/MANIFEST.MF deleted file mode 100644 index b108676b0..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/MANIFEST.MF +++ /dev/null @@ -1,26 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.core;singleton:=true -Bundle-Version: 3.0.0.qualifier -Bundle-Activator: org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin -Bundle-Vendor: %bundleProvider -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0", - org.eclipse.ui;bundle-version="3.4.0", - org.eclipse.linuxtools.tools.launch.core, - org.eclipse.linuxtools.profiling.launch;bundle-version="0.9.0", - org.eclipse.core.filesystem;bundle-version="1.3.100" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ClassPath: . -Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.linuxtools.internal.oprofile.core,org.ecli - pse.linuxtools.internal.oprofile.core.daemon,org.eclipse.linuxtools.i - nternal.oprofile.core.linux,org.eclipse.linuxtools.internal.oprofile. - core.model,org.eclipse.linuxtools.internal.oprofile.core.opxml,org.ec - lipse.linuxtools.internal.oprofile.core.opxml.checkevent,org.eclipse. - linuxtools.internal.oprofile.core.opxml.info,org.eclipse.linuxtools.i - nternal.oprofile.core.opxml.modeldata,org.eclipse.linuxtools.internal - .oprofile.core.opxml.sessions -Bundle-Localization: plugin -Import-Package: org.eclipse.core.resources -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.core diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/p2.inf b/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/p2.inf deleted file mode 100644 index 8313fe485..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/META-INF/p2.inf +++ /dev/null @@ -1,2 +0,0 @@ -instructions.install=\ - org.eclipse.equinox.p2.touchpoint.natives.checkAndPromptNativePackage(distro:fedora,package:oprofile); diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/about.html b/oprofile/org.eclipse.linuxtools.oprofile.core/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.core/build.properties deleted file mode 100644 index 6a2d9f256..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/build.properties +++ /dev/null @@ -1,7 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.properties,\ - about.html -src.includes = about.html -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.core/plugin.properties deleted file mode 100644 index 960861cbc..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/plugin.properties +++ /dev/null @@ -1,14 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2008, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Kent Sebastian <ksebasti@redhat.com> - initial API and implementation -#******************************************************************************* -bundleName=OProfile Core Plug-in -bundleProvider=Eclipse Linux Tools diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.core/pom.xml deleted file mode 100644 index 95ffa1265..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.core</artifactId> - <version>3.0.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile Core Plug-in</name> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/IOpxmlProvider.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/IOpxmlProvider.java deleted file mode 100644 index 014bbfaec..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/IOpxmlProvider.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core; - -import java.util.ArrayList; - -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; - -/** - * Interface for the core to utilize opxml. Platform plugins should - * define/register an OpxmlProvider for the core to use. - */ -public interface IOpxmlProvider { - - /** - * Returns an <code>IRunnableWithProgress</code> that fetches generic - * information from opxml - * - * @param info <code>OpInfo</code> object for results - * @return <code>IRunnableWithProgress</code> that may be run by the caller - */ - IRunnableWithProgress info(OpInfo info); - - /** - * Returns an <code>IRunnableWithProgress</code> that fetches samples for the - * given <code>OpModelSession</code> - * - * @param eventName the event for which to fetch samples - * @param sessionName the session for which to fetch samples - * @param image the image being profiled to be returned to the caller - * @return <code>IRunnableWithProgress</code> that may be run by the caller - */ - IRunnableWithProgress modelData(String eventName, String sessionName, OpModelImage image); - - /** - * Returns an <code>IRunnableWithProgress</code> that checks the validity of the - * given event, unit mask, and counter combination - * - * @param ctr the counter - * @param event the String event name - * @param um the integer unit mask - * @param eventValid a size one array to hold the return result (see - * <code>CheckEventsProcessor</code>) - * @return <code>IRunnableWithProgress</code> that may be run by the caller - */ - IRunnableWithProgress checkEvents(int ctr, String event, int um, int[] eventValid); - - /** - * Returns an <code>IRunnableWithProgress</code> that fetches the list of - * sessions - * - * @param info the <code>OpInfo</code> for oprofile - * @param sessionList an <code>ArrayList</code> in which to return the list of - * sessions - * @return <code>IRunnableWithProgress</code> that may be run by the caller - */ - IRunnableWithProgress sessions(ArrayList<OpModelSession> sessionList); -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/Oprofile.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/Oprofile.java deleted file mode 100644 index 8d64f2812..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/Oprofile.java +++ /dev/null @@ -1,302 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent.CheckEventsProcessor; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; - -/** - * Common class wrapper for all things Oprofile. - */ -public class Oprofile { - // Ugh. Need to know whether the module is loaded without running oprofile - // commands... - private static final String[] OPROFILE_CPU_TYPE_FILES = { "/dev/oprofile/cpu_type", //$NON-NLS-1$ - "/proc/sys/dev/oprofile/cpu_type" //$NON-NLS-1$ - }; - - /** - * Oprofile information - */ - private static OpInfo info; - - /** - * Make sure that oprofile is ready to go - */ - static { - initializeOprofileModule(); - } - - /** - * Initialize the oprofile module - * - * This function will check if the kernel module is loaded. If it is not, it - * will attempt to load it (which will cause the system to prompt the user for - * root access). - */ - static private void initializeOprofileModule() { - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY) || isKernelModuleLoaded()) { - initializeOprofileCore(); - } - } - - // This requires more inside knowledge about Oprofile than one would like, - // but it is the only way of knowing whether the module is loaded (and we can - // succesfully call into the oprofile wrapper library without causing it to - // print out - // a lot of warnings). - /** - * Check whether oprofile kernel module is loaded - * - * @return true if the module is loaded, otherwise false - */ - private static boolean isKernelModuleLoaded() { - IRemoteFileProxy proxy = null; - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - - for (int i = 0; i < OPROFILE_CPU_TYPE_FILES.length; ++i) { - IFileStore f = proxy.getResource(OPROFILE_CPU_TYPE_FILES[i]); - if (f.fetchInfo().exists()) { - return true; - } - } - return false; - } - - /** - * Initializes static data for oprofile. - */ - private static void initializeOprofileCore() { - info = OpInfo.getInfo(); - - if (info == null) { - throw new ExceptionInInitializerError(OprofileProperties.getString("fatal.opinfoNotParsed")); //$NON-NLS-1$ - } - } - - /** - * Queries oprofile for the number of counters on the current CPU. Used only in - * launch config tabs. - * - * @return the number of counters - */ - public static int getNumberOfCounters() { - // If operf is not found, set no counters - try { - Process p = RuntimeProcessFactory.getFactory().exec(new String[] { "operf", "--version" }, //$NON-NLS-1$ //$NON-NLS-2$ - OprofileProject.getProject()); - if (p == null) { - return 0; - } - } catch (IOException e) { - return 0; - } - return info.getNrCounters(); - } - - /** - * Returns the CPU speed of the current configuration. - * - * @return the cpu speed in MHz - */ - public static double getCpuFrequency() { - return info.getCPUSpeed(); - } - - /** - * Get all the events that may be collected on the given counter. - * - * @param num the counter number - * @return an array of all valid events -- NEVER RETURNS NULL! - */ - public static OpEvent[] getEvents(int num) { - return info.getEvents(num); - } - - /** - * Returns the default location of the opcontrol samples directory or the - * project directory if the profiler is operf. - * - * @return the default samples directory - */ - public static String getDefaultSamplesDirectory() { - return info.getDefault(OpInfo.DEFAULT_SAMPLE_DIR); - } - - /** - * Returns the oprofile daemon log file. - * - * @return the log file (absolute pathname) - */ - public static String getLogFile() { - return info.getDefault(OpInfo.DEFAULT_LOG_FILE); - } - - /** - * Returns whether or not oprofile is in timer mode. - * - * @return true if oprofile is in timer mode, false otherwise - */ - public static boolean getTimerMode() { - return info.getTimerMode(); - } - - /** - * Checks the requested counter, event, and unit mask for validity. - * - * @param ctr the counter - * @param event the event name - * @param um the unit mask - * @return whether the requested event is valid - */ - public static Boolean checkEvent(int ctr, String event, int um) { - int[] validResult = new int[1]; - try { - IRunnableWithProgress opxml = OprofileCorePlugin.getDefault().getOpxmlProvider().checkEvents(ctr, event, um, - validResult); - opxml.run(null); - } catch (InvocationTargetException | InterruptedException e) { - } - - return (validResult[0] == CheckEventsProcessor.EVENT_OK); - } - - /** - * Returns a list of all the session collected on the system, as well as the - * event under each of them. - * - * @since 3.0 - * @returns a list of all collected events - */ - public static OpModelSession[] getSessions() { - OpModelSession[] events = null; - - ArrayList<OpModelSession> sessionList = new ArrayList<>(); - try { - IRunnableWithProgress opxml = OprofileCorePlugin.getDefault().getOpxmlProvider().sessions(sessionList); - opxml.run(null); - events = new OpModelSession[sessionList.size()]; - sessionList.toArray(events); - } catch (InvocationTargetException | InterruptedException e) { - } - return events; - } - - /** - * Return a list of all the Samples in the given session. - * - * @param session the session for which to get samples - * @param shell the composite shell to use for the progress dialog - */ - public static OpModelImage getModelData(String eventName, String sessionName) { - OpModelImage image = new OpModelImage(); - - final IRunnableWithProgress opxml; - try { - opxml = OprofileCorePlugin.getDefault().getOpxmlProvider().modelData(eventName, sessionName, image); - opxml.run(null); - } catch (InvocationTargetException | InterruptedException e) { - } - - return image; - } - - /** - * Check if oprofile kernel module is loaded and update Oprofile's information. - * - * @since 1.1 - */ - public static void updateInfo() { - info = OpInfo.getInfo(); - } - - // Oprofile class has a static initializer and the code inside it needs to know - // which project - // is being profiled in order to get the path for the Linux Tools' binaries set - // for that project. - // For this reason the project property has to be set outside the Oprofile class - /** - * OProfileProject class to set/get which project is being profiled - * - * @since 1.1 - */ - public static class OprofileProject { - private static IProject project; - public final static String OPERF_BINARY = "operf"; //$NON-NLS-1$ - public final static String OCOUNT_BINARY = "ocount"; //$NON-NLS-1$ - private static String binary = OPERF_BINARY; - public final static String OPERF_DATA = "oprofile_data"; //$NON-NLS-1$ - - /** - * Set the project to be profiled - * - * @param project - */ - public static void setProject(IProject project) { - OprofileProject.project = project; - - } - - /** - * Get the project to be profiled - * - * @return project - */ - public static IProject getProject() { - return project; - } - - /** - * Set the profiling binary to be used (operf or opcontrol) - * - * @param binary - * @since 2.1 - */ - public static void setProfilingBinary(String binary) { - OprofileProject.binary = binary; - - } - - /** - * Get the profiling binary (operf or opcontrol) - * - * @return binary - * @since 2.1 - */ - public static String getProfilingBinary() { - return binary; - } - - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileCorePlugin.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileCorePlugin.java deleted file mode 100644 index bdea2d6f9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileCorePlugin.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core; - -import java.io.IOException; -import java.net.URL; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.linuxtools.internal.oprofile.core.linux.LinuxOpxmlProvider; -import org.eclipse.swt.widgets.Display; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; - -/** - * The main plugin class to be used in the desktop. - */ -public class OprofileCorePlugin extends Plugin { - private static final String PLUGIN_ID = "org.eclipse.linuxtools.oprofile.core"; //$NON-NLS-1$ - - // The shared instance. - private static OprofileCorePlugin plugin; - - public static final String DEBUG_PRINT_PREFIX = "DEBUG: "; //$NON-NLS-1$ - - /** - * The constructor. - */ - public OprofileCorePlugin() { - plugin = this; - } - - /** - * This method is called when the plug-in is stopped - */ - @Override - public void stop(BundleContext context) throws Exception { - super.stop(context); - plugin = null; - } - - /** - * Returns the shared instance. - */ - public static OprofileCorePlugin getDefault() { - return plugin; - } - - /** - * Returns the unique id of this plugin. Should match plugin.xml! - */ - public static String getId() { - return PLUGIN_ID; - } - - /** - * Returns the OpxmlProvider registered with the plugin or throws an exception - * - * @return the OpxmlProvider - */ - public IOpxmlProvider getOpxmlProvider() { - return new LinuxOpxmlProvider(); - } - - /** - * Creates an error status object - * - * @param errorClassString A string of the error class - * @param e The type of exception - * @return the status object of the error - */ - public static IStatus createErrorStatus(String errorClassString, Exception e) { - String statusMessage = OprofileProperties.getString(errorClassString + ".error.statusMessage"); //$NON-NLS-1$ - - if (e == null) { - return new Status(IStatus.ERROR, getId(), IStatus.OK, statusMessage, null); - } else { - return new Status(IStatus.ERROR, getId(), IStatus.OK, statusMessage, e); - } - } - - /** - * Shows an error Dialog - * - * @param errorClassString A string of the error class - * @param ex The type of exception - */ - public static void showErrorDialog(String errorClassString, CoreException ex) { - final IStatus status; - final String dialogTitle = OprofileProperties.getString(errorClassString + ".error.dialog.title"); //$NON-NLS-1$ - final String errorMessage = OprofileProperties.getString(errorClassString + ".error.dialog.message"); //$NON-NLS-1$ - - if (ex == null) { - status = createErrorStatus(errorClassString, null); - } else { - status = ex.getStatus(); - } - - // needs to be run in the ui thread otherwise swt throws invalid thread access - Display.getDefault().syncExec(() -> ErrorDialog.openError(null, dialogTitle, errorMessage, status)); - - } - - /** - * - * @return {@code true} when platform was started in debug mode ({@code -debug} - * switch) and - * {@code org.eclipse.linuxtools.internal.oprofile.core/debug} is set in - * some .options file either in $HOME/.options or $(pwd)/.options. - */ - public static boolean isDebugMode() { - return Platform.inDebugMode() && Platform.getDebugOption(OprofileCorePlugin.getId() + "/debug") != null; //$NON-NLS-1$ - } - - /** - * Log a string message with the given severity in the error log. - * - * @param severity the severity of this exception - * @param msg the string message to be logged - */ - public static void log(int severity, String msg) { - plugin.getLog().log(new Status(severity, PLUGIN_ID, IStatus.OK, msg, null)); - } - - /** - * Returns the location of the plugin by checking the path of the bundle's - * locationURL. - * - * @return An absolute path representing the location of this plugin - */ - public String getPluginLocation() { - Bundle bundle = getBundle(); - - URL locationUrl = FileLocator.find(bundle, new Path("/"), null); //$NON-NLS-1$ - URL fileUrl = null; - try { - fileUrl = FileLocator.toFileURL(locationUrl); - } catch (IOException e) { - e.printStackTrace(); - } - return fileUrl.getFile(); - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileProperties.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileProperties.java deleted file mode 100644 index 0dc7800dc..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/OprofileProperties.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class OprofileProperties { - private static final String BUNDLE_NAME = "org.eclipse.linuxtools.internal.oprofile.core.oprofile"; //$NON-NLS-1$ - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); - - private OprofileProperties() { - } - - public static String getString(String key) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (MissingResourceException e) { - return '!' + key + '!'; - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpEvent.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpEvent.java deleted file mode 100644 index b0b5c31da..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpEvent.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.daemon; - -/** - * A class which represents an Oprofile event - */ -public class OpEvent { - /** - * The Oprofile event name, i.e., "CPU_CLK_UNHALTED" - */ - private String name; - - /** - * A description of the event - */ - private String description; - - /** - * Unit masks for this event type - */ - private OpUnitMask unitMask; - - /** - * Minimum count - */ - private int minCount; - - /** - * Sets the unit mask for this event. Only called from XML parsers. - * - * @param mask the new unit mask - */ - public void setUnitMask(OpUnitMask mask) { - unitMask = mask; - } - - /** - * Sets the name of this event. Only called from XML parsers. - * - * @param text the name - */ - public void setText(String text) { - name = text; - } - - /** - * Sets the description of this oprofile event. Only called from XML parsers. - * - * @param text the description - */ - public void setTextDescription(String text) { - description = text; - } - - /** - * Sets the minimum count for this event. Only called from XML parsers. - * - * @param min the minimum count - */ - public void setMinCount(int min) { - minCount = min; - } - - /** - * Returns the unit mask corresponding to this event. - * - * @return the unit mask - */ - public OpUnitMask getUnitMask() { - return unitMask; - } - - /** - * Returns the name of this oprofile event. - * - * @return the name - */ - public String getText() { - return name; - } - - /** - * Returns the description of this oprofile event. - * - * @return the description - */ - public String getTextDescription() { - return description; - } - - /** - * Returns the minimum count allowed for this event. - * - * @return the minimum count - */ - public int getMinCount() { - return minCount; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpInfo.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpInfo.java deleted file mode 100644 index de1e7a86a..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpInfo.java +++ /dev/null @@ -1,233 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.daemon; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; - -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.linux.LinuxOpxmlProvider.OpInfoRunner; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.DefaultsProcessor; - -/** - * A class to hold generic information about Oprofile. - */ -public class OpInfo { - // Oprofile defaults - public static final String DEFAULT_SAMPLE_DIR = DefaultsProcessor.SAMPLE_DIR; - public static final String DEFAULT_LOCK_FILE = DefaultsProcessor.LOCK_FILE; - public static final String DEFAULT_LOG_FILE = DefaultsProcessor.LOG_FILE; - public static final String DEFAULT_DUMP_STATUS = DefaultsProcessor.DUMP_STATUS; - - /** - * A comparator class used when sorting events (sorting by event name) - */ - private static class SortEventComparator implements Comparator<OpEvent> { - @Override - public int compare(OpEvent o1, OpEvent o2) { - return o1.getText().compareTo(o2.getText()); - } - } - - /** - * A comparator class used when searching events (searching by event name) - */ - private static class SearchEventComparator implements Comparator<Object> { - @Override - public int compare(Object a, Object b) { - String astr, bstr; - if (a instanceof String) { - astr = (String) a; - bstr = ((OpEvent) b).getText(); - } else { - astr = ((OpEvent) a).getText(); - bstr = (String) b; - } - return astr.compareTo(bstr); - } - } - - /** - * The number of counters supported by this configuration - */ - private int nrCounters; - - /** - * A HashMap of Oprofile defaults - */ - private HashMap<String, String> defaults; - - /** - * The permanent list of events indexed by counter - */ - private OpEvent[][] eventList; - - /** - * The CPU frequency of this CPU in MHz - */ - private double cpuSpeed; - - /** - * Whether or not oprofile is running in timer mode - */ - private boolean timerMode; - - /** - * Return all of Oprofile's generic information. - * - * @return a class containing the information - */ - public static OpInfo getInfo() { - // Run opmxl and get the static information - OpInfo info = new OpInfo(); - - OpInfoRunner opxml = (OpInfoRunner) OprofileCorePlugin.getDefault().getOpxmlProvider().info(info); - boolean ret = opxml.run0(null); - if (!ret) { - info = null; - } - - return info; - } - - /** - * Sets the number of counters allowed by Oprofile. This method is called after - * this object is contstructed, while opxml is run (the first tag output is - * num-counters). Only called from XML parsers. - * - * @param ctrs the number of counters - */ - public void setNrCounters(int ctrs) { - nrCounters = ctrs; - - // Allocate room for event lists for the counters - eventList = new OpEvent[nrCounters][]; - } - - /** - * Set the CPU frequency (in MHz). Only called from the XML parsers. - * - * @param freq the frequency - */ - public void setCPUSpeed(double freq) { - cpuSpeed = freq; - } - - /** - * Sets the defaults associated with this configuration of Oprofile. Only called - * from XML parsers. - * - * @param map the <code>HashMap</code> containing the defaults - */ - public void setDefaults(HashMap<String, String> map) { - defaults = map; - } - - /** - * Adds the events of the counter counterNum into the list of all events. Note - * they are sorted here. Only called from XML parsers. - * - * @param counterNum the counter with the events - * @param events an array of OpEvent events belonging to this counter - */ - public void setEvents(int counterNum, OpEvent[] events) { - if (counterNum < eventList.length) { - eventList[counterNum] = events; - Arrays.sort(eventList[counterNum], new SortEventComparator()); - } - } - - /** - * Sets whether or not oprofile is operating in timer mode. Only called from XML - * parsers. - * - * @param timerMode true if oprofile is in timer mode, false if not - */ - public void setTimerMode(boolean timerMode) { - this.timerMode = timerMode; - } - - /** - * Returns the number of counters allowed by Oprofile - * - * @return the number of counters - */ - public int getNrCounters() { - return nrCounters; - } - - /** - * Returns the CPU's speed in MHz - * - * @return the speed - */ - public double getCPUSpeed() { - return cpuSpeed; - } - - /** - * Returns the requested default. Valid defaults are - * <code>DEFAULT_DUMP_STATUS</code>, <code>DEFAULT_LOCK_FILE</code>, - * <code>DEFAULT_LOG_FILE</code>, and <code>DEFAULT_SAMPLE_DIR</code>. - * - * @param what which default to return - * @return the requested default or <code>null</code> if not known - */ - public String getDefault(String what) { - return defaults.get(what); - } - - /** - * Returns an array of events valid for the given counter number. - * - * @param num the counter number - * @return an array of valid events - */ - public OpEvent[] getEvents(int num) { - if (num >= 0 && num < eventList.length) { - return eventList[num]; - } - - return new OpEvent[0]; - } - - /** - * Returns whether or not oprofile is operating in timer mode. - * - * @return a boolean, true if in timer mode, false if not - */ - public boolean getTimerMode() { - return timerMode; - } - - /** - * Searches the for the event with the given name - * - * @param name the name of the event (e.g., CPU_CLK_UNHALTED) - * @return the event or <code>null</code> if not found - */ - public OpEvent findEvent(String name) { - // Search through all counters - for (int counter = 0; counter < getNrCounters(); ++counter) { - int idx = Arrays.binarySearch(getEvents(counter), name, new SearchEventComparator()); - if (idx >= 0) { - return eventList[counter][idx]; - } - } - - return null; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpUnitMask.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpUnitMask.java deleted file mode 100644 index 94909072e..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OpUnitMask.java +++ /dev/null @@ -1,321 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2019 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.daemon; - -import java.util.HashSet; -import java.util.Set; - -/** - * A class representing the unit mask that may be associated with oprofile - * events. Note that since this class was originally written, oprofile unit - * masks have changed -- a single unit mask may affect several bits at once. - * Hence, instead of a certain bit being flipped, the specific bits to be - * changed are determined by the particular mask's index - */ -public class OpUnitMask { - /** - * A class which describes an individual unit mask value. Used in XML parsing. - */ - public static class MaskInfo { - /** - * The integer value of the mask. - */ - public int value; - - /** - * The name of the mask. - */ - public String name; - - /** - * A description of the mask. - */ - public String description; - } - - public static final int SET_DEFAULT_MASK = -1; - - /** - * Invalid mask type. - */ - public static final int INVALID = -1; - - /** - * The mask is mandatory. It must be used. - */ - public static final int MANDATORY = 1; - - /** - * The mask is exclusive. Only one of its mask values may be used. - */ - public static final int EXCLUSIVE = 2; - - /** - * The mask is a bitmask. Any combination of its values may be used. - */ - public static final int BITMASK = 3; - - /** - * The current value of this unitmask - */ - private int mask; - - /** - * The current name of this unitmask (EXCLUSIVE-only) - */ - private String maskName = ""; //$NON-NLS-1$ - - /** - * The default mask provided by the oprofile library - */ - private int defaultMask; - - /** - * The type of this unitmask - */ - private int maskType; - - /** - * Descriptions of the bits of this mask - */ - private String[] maskOptionDescriptions = new String[0]; - - /** - * mask values -- now bit masks have distinct values (eg: an all of the above) - */ - - private int[] maskOptionValues; - - /** - * Name of the bit mask - */ - - private String[] maskOptionNames = new String[0]; - - /** - * Set of non-unique mask values (EXCLUSIVE type only) Some platforms allow - * multiple masks of same value and these need to be identified additionally by - * their name - */ - Set<Integer> nonUniqueValues = new HashSet<>(); - - /** - * Set the descriptions and values for this unitmask's mask options. Only used - * from the XML parsers. - * - * @param masks a list of all the mask options - */ - public void setMaskDescriptions(MaskInfo[] masks) { - maskOptionDescriptions = new String[masks.length]; - maskOptionValues = new int[masks.length]; - maskOptionNames = new String[masks.length]; - - Set<Integer> values = new HashSet<>(); - - for (int i = 0; i < masks.length; ++i) { - Integer val = Integer.valueOf(masks[i].value); - if (values.contains(Integer.valueOf(val))) { - nonUniqueValues.add(Integer.valueOf(val)); - } - values.add(Integer.valueOf(val)); - maskOptionDescriptions[i] = masks[i].description; - maskOptionValues[i] = masks[i].value; - maskOptionNames[i] = masks[i].name; - } - } - - /** - * Sets the default value for this unitmask, and initializes the current - * unitmask value to this default. Only used from the XML parsers. - * - * @param theDefault the default value - */ - public void setDefault(int theDefault) { - defaultMask = theDefault; - setDefaultMaskValue(); - } - - /** - * Sets the unitmask type. Only used from the XML parsers. - * - * @param type the type - */ - public void setType(int type) { - maskType = type; - } - - /** - * Returns the integer value of this unitmask, suitable for passing to oprofile. - * - * @return the integer value - */ - public int getMaskValue() { - return mask; - } - - /** - * Returns the unitmask name if this is a non-unique bitmask (EXCLUSIVE-only), - * otherwise returns null. - */ - public String getMaskName() { - if (nonUniqueValues.contains(Integer.valueOf(mask))) { - return maskName; - } - return null; - } - - /** - * Tests whether a particular mask is set in the unitmask value, based on the - * value of the mask option at the given index. - * - * @param index the index of the mask option to check - * @return whether the given mask option's value is set - */ - public boolean isMaskSetFromIndex(int index) { - boolean result = false; - - if (index >= 0 && index < maskOptionValues.length) { - switch (maskType) { - case EXCLUSIVE: - result = (mask == maskOptionValues[index] - && (maskName.isEmpty() || maskName.equals(maskOptionNames[index]))); - break; - - case BITMASK: - result = ((mask & maskOptionValues[index]) != 0); - break; - - default: - result = false; - } - } - - return result; - } - - /** - * Sets the absolute unitmask value. - * - * @param newValue the new value of this unitmask - */ - public void setMaskValue(int newValue) { - if (newValue == SET_DEFAULT_MASK) { - mask = defaultMask; - } else { - mask = newValue; - } - } - - /** - * Sets the unitmask name. - * - * @param newName the name of this unitmask - */ - public void setMaskName(String newName) { - maskName = newName; - } - - /** - * Sets the bits of the given mask option's value in the unitmask value. - * - * @param index the index of the mask option to set - */ - public void setMaskFromIndex(int index) { - // mandatory masks only use the default value - if (index >= 0 && index < maskOptionValues.length) { - if (maskType == BITMASK) - mask |= maskOptionValues[index]; - else if (maskType == EXCLUSIVE) { - mask = maskOptionValues[index]; - maskName = maskOptionNames[index]; - } - } - } - - /** - * Returns the value of the mask based on the unitmask index. - * - * @param index the index of the mask option - * @return the mask option's value - */ - public int getMaskFromIndex(int index) { - // mandatory masks only use the default value - if (maskType == BITMASK) { - if (index >= 0 && index < maskOptionValues.length) { - return maskOptionValues[index]; - } - } else if (maskType == EXCLUSIVE) { - if (index >= 0 && index < maskOptionValues.length) { - return maskOptionValues[index]; - } - } else if (maskType == MANDATORY) { - return defaultMask; - } - - // type invalid or unknown, or out of bounds - return -1; - } - - /** - * Unset the bits of the given mask option's value in the unitmask value. - * - * @param index the index of the mask option to set - */ - public void unSetMaskFromIndex(int index) { - if (index >= 0 && index < maskOptionValues.length && maskType == BITMASK) { - mask = mask & ~maskOptionValues[index]; - } - } - - /** - * Sets the current unitmask value to the default mask value. - */ - public void setDefaultMaskValue() { - mask = defaultMask; - } - - /** - * Returns a description of the requested mask option. - * - * @param num the mask option index - * @return the description - */ - public String getText(int num) { - if (num >= 0 && num < maskOptionDescriptions.length) { - return maskOptionDescriptions[num]; - } - - return null; - } - - /** - * Returns the number of mask options in this unitmask. - * - * @return the number of mask options - */ - public int getNumMasks() { - return maskOptionDescriptions.length; - } - - /** - * Returns the mask type for this unit mask. - * - * @return <code>BITMASK</code>, <code>EXCLUSIVE</code>, or - * <code>MANDATORY</code> - */ - public int getType() { - return maskType; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonEvent.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonEvent.java deleted file mode 100644 index 316ad0646..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonEvent.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.daemon; - -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; - -/** - * This class represents an event used to configure the OProfile daemon. - */ -public class OprofileDaemonEvent { - public static final int COUNT_UNINITIALIZED = 0; - public static final int COUNT_INVALID = -1; - - /** - * The event to collect on this counter - */ - private OpEvent event; - - /** - * Boolean variable to enable/disable Profile kernel - */ - private boolean profileKernel; - - /** - * Boolean variable to enable/disable Profile userspace - */ - private boolean profileUser; - - /** - * Reset counter value - */ - private int count; - - public OprofileDaemonEvent() { - profileKernel = true; - profileUser = true; - count = COUNT_UNINITIALIZED; - event = null; - } - - /** - * Set the event to collect - * - * @param event the OProfile event - */ - public void setEvent(OpEvent event) { - this.event = event; - } - - /** - * Get the event to collect - * - * @returns the OProfile event - */ - public OpEvent getEvent() { - return event; - } - - /** - * Set whether to profile the kernel - * - * @param profileKernel whether to enable kernel profiling - */ - public void setProfileKernel(boolean profileKernel) { - this.profileKernel = profileKernel; - } - - /** - * Get whether to profile the kernel - * - * @return whether to profile the kernel - */ - public boolean getProfileKernel() { - return profileKernel; - } - - /** - * Set whether to profile userspace - * - * @param profileUser whether to profile userspace - */ - public void setProfileUser(boolean profileUser) { - this.profileUser = profileUser; - } - - /** - * Get whether to profile userspace - * - * @return whether to profile userspace - */ - public boolean getProfileUser() { - return profileUser; - } - - /** - * Set the reset count - * - * @param count the new count - */ - public void setResetCount(int count) { - this.count = count; - } - - /** - * Get the reset count - * - * @return the reset count - */ - public int getResetCount() { - // FIXME: This isn't quite in the right place... - if (count == COUNT_UNINITIALIZED) { - // This is what Oprofile does in oprof_start.cpp: - double speed = Oprofile.getCpuFrequency(); - if (speed == 0.0) { - count = event.getMinCount() * 30; - } else { - count = (int) speed * 20; - } - } - - return count; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonOptions.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonOptions.java deleted file mode 100644 index ca624e41b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/daemon/OprofileDaemonOptions.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.daemon; - -/** - * This class represents the global launch options for the OProfile daemon. - */ -public class OprofileDaemonOptions { - /** - * Kernel image file - */ - private String kernelImageFile; - - /** - * How to separate profiles (mask) - */ - private int separateProfiles; - - /** - * The image to profile - */ - private String binaryImage; - - /** - * How many calls down to profile - */ - private int callgraphDepth; - - /** - * Sample separation options. Determines how oprofiled will group samples for - * binaries which isn't the main binary being profiled. - * - * Currently only properly support: -none: ignore all other binaries -library: - * include shared library samples -kernel: include kernel module samples (which - * implicitly includes library) - * - * the others probably wouldn't show nicely in the view - */ - public static final int SEPARATE_NONE = 0; - public static final int SEPARATE_LIBRARY = 1; - public static final int SEPARATE_KERNEL = 2; - public static final int SEPARATE_THREAD = 4; - public static final int SEPARATE_CPU = 8; - - /** - * Constructor - */ - public OprofileDaemonOptions() { - // defaults - kernelImageFile = ""; //$NON-NLS-1$ - separateProfiles = SEPARATE_NONE; - binaryImage = ""; //$NON-NLS-1$ - callgraphDepth = 0; - } - - /** - * Get the kernel image file - * - * @return the kernel image file - */ - public String getKernelImageFile() { - return kernelImageFile; - } - - /** - * Set the kernel image file - * - * @param image the kernel image - */ - public void setKernelImageFile(String image) { - kernelImageFile = image; - } - - /** - * Get daemon profile separation mask - * - * @return mask of options - */ - public int getSeparateProfilesMask() { - return separateProfiles; - } - - /** - * Set daemon profile separation mask - * - * @param mask the new separation mask - */ - public void setSeparateProfilesMask(int mask) { - separateProfiles = mask; - } - - /** - * Get the path to the binary image being profiled. - * - * @return full path to the binary - */ - public String getBinaryImage() { - return binaryImage; - } - - /** - * Sets the path of the binary image to profile. - * - * @param image full path to the binary - */ - public void setBinaryImage(String image) { - this.binaryImage = image; - } - - /** - * Get the call depth value. - * - * @return integer amount of calls down to profile - */ - public int getCallgraphDepth() { - return callgraphDepth; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/LinuxOpxmlProvider.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/LinuxOpxmlProvider.java deleted file mode 100644 index ca0daa3f6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/LinuxOpxmlProvider.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.linux; - -import java.util.ArrayList; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.linuxtools.internal.oprofile.core.IOpxmlProvider; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlConstants; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionsProcessor; - -/** - * A class which implements the IOpxmlProvider interface for running opxml. - */ -public class LinuxOpxmlProvider implements IOpxmlProvider { - - @Override - public IRunnableWithProgress info(final OpInfo info) { - return new OpInfoRunner(info); - } - - // public because it is used in OpInfo.java:getInfo() - public class OpInfoRunner implements IRunnableWithProgress { - private boolean b; - private final OpInfo info; - - public OpInfoRunner(OpInfo info) { - this.info = info; - } - - public boolean run0(IProgressMonitor monitor) { - run(monitor); - return b; - } - - @Override - public void run(IProgressMonitor monitor) { - OpxmlRunner runner = new OpxmlRunner(); - String[] args = new String[] { OpxmlConstants.OPXML_INFO }; - b = runner.run(args, info); - } - } - - @Override - public IRunnableWithProgress modelData(final String eventName, final String sessionName, final OpModelImage image) { - return monitor -> { - OpxmlRunner runner = new OpxmlRunner(); - - String[] args = new String[] { OpxmlConstants.OPXML_MODELDATA, eventName, sessionName }; - - ModelDataProcessor.CallData data = new ModelDataProcessor.CallData(image); - runner.run(args, data); - }; - } - - @Override - public IRunnableWithProgress checkEvents(final int ctr, final String event, final int um, final int[] eventValid) { - return monitor -> { - OpxmlRunner runner = new OpxmlRunner(); - String[] args = new String[] { OpxmlConstants.CHECKEVENTS_TAG, Integer.toString(ctr), event, - Integer.toString(um) }; - - runner.run(args, eventValid); - }; - } - - /** - * return list of session collected on this system as well as events under each - * of them. - * - * @since 3.0 - */ - @Override - public IRunnableWithProgress sessions(final ArrayList<OpModelSession> sessionList) { - return monitor -> { - OpxmlRunner runner = new OpxmlRunner(); - String[] args = new String[] { OpxmlConstants.OPXML_SESSIONS, }; - - SessionsProcessor.SessionInfo sinfo = new SessionsProcessor.SessionInfo(sessionList); - runner.run(args, sinfo); - }; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/OpxmlRunner.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/OpxmlRunner.java deleted file mode 100644 index bc05cf922..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/linux/OpxmlRunner.java +++ /dev/null @@ -1,348 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.linux; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileProperties; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.AbstractDataAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent.CheckEventAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.InfoAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionManager; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; -import org.eclipse.osgi.util.NLS; -import org.eclipse.swt.widgets.Display; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; - -/** - * This class will run opxml. - * - * opxml is a small program which acts as a textual interface between Oprofile - * and BFD and the oprofile plugins. - */ -public class OpxmlRunner { - - /** - * Runs opxml with the given arguments. - * - * @param args the arguments to pass to opxml - * @param callData any callData to pass to the processor - * @return boolean indicating the success/failure of opxml - */ - public boolean run(String[] args, Object callData) { - XMLReader reader = null; - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(callData); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - try { - reader = factory.newSAXParser().getXMLReader(); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - // Check for timer support - InfoAdapter.checkTimerSupport(); - - // Run opxml - try { - File file = constructFile(args); - - // handle the opxml_session file - if (args[0].equals(SessionManager.SESSIONS)) { - SessionManager sessManNew = new SessionManager(SessionManager.SESSION_LOCATION); - populateWithCurrentSession(sessManNew); - sessManNew.write(); - FileReader fr = new FileReader(file); - reader.parse(new InputSource(fr)); - // file has not been saved - } else if (!file.exists()) { - AbstractDataAdapter aea; - if (args[0].equals(CheckEventAdapter.CHECK_EVENTS)) { - aea = new CheckEventAdapter(args[1], args[2], args[3]); - aea.process(); - BufferedReader bi = new BufferedReader(new InputStreamReader(aea.getInputStream())); - reader.parse(new InputSource(bi)); - } else if (args[0].equals(InfoAdapter.INFO)) { - aea = new InfoAdapter(); - aea.process(); - BufferedReader bi = new BufferedReader(new InputStreamReader(aea.getInputStream())); - reader.parse(new InputSource(bi)); - } else if (args[0].equals(ModelDataAdapter.MODEL_DATA)) { - // this should only happen initially when the current - // session - // has not been generated - if (!handleModelData(args)) { - return false; - } - FileReader fr = new FileReader(file); - reader.parse(new InputSource(fr)); - } else { - throw new RuntimeException("Unrecognized argument encountered"); //$NON-NLS-1$ - } - } else { - // always regenerate the 'current' session file - if (args.length == 3 && args[0].equals(SessionManager.MODEL_DATA) - && args[2].equals(SessionManager.CURRENT)) { - if (!handleModelData(args)) { - return false; - } - } - FileReader fr = new FileReader(file); - reader.parse(new InputSource(fr)); - } - - return true; - } catch (SAXException e) { - e.printStackTrace(); - OprofileCorePlugin.showErrorDialog("opxmlSAXParseException", null); //$NON-NLS-1$ - } catch (IOException e) { - e.printStackTrace(); - OprofileCorePlugin.showErrorDialog("opxmlParse", null); //$NON-NLS-1$ - } - return false; - } - - private File saveOpxmlToFile(BufferedReader bi, String[] args) { - String fileName = ""; //$NON-NLS-1$ - for (String arg : args) { - fileName += arg; - } - File file = new File(SessionManager.OPXML_PREFIX + fileName); - String line; - try { - file.createNewFile(); - try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { - while ((line = bi.readLine()) != null) { - bw.write(line + "\n"); //$NON-NLS-1$ - } - bi.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - return file; - } - - private File constructFile(String[] args) { - String fileName = ""; //$NON-NLS-1$ - for (int i = 0; i < args.length; i++) { - fileName += args[i]; - } - return new File(SessionManager.OPXML_PREFIX + fileName); - } - - private boolean handleModelData(String[] args) { - ArrayList<String> cmd = new ArrayList<>(); - cmd.add("-Xdg"); //$NON-NLS-1$ - if (!InfoAdapter.hasTimerSupport()) { - cmd.add("event:" + args[1]); //$NON-NLS-1$ - } - String[] a = {}; - InputStream is = runOpReport(cmd.toArray(a)); - - if (is == null) { - return false; - } - ModelDataAdapter mda = new ModelDataAdapter(is); - if (!mda.isParseable()) { - return false; - } - mda.process(); - BufferedReader bi = new BufferedReader(new InputStreamReader(mda.getInputStream())); - saveOpxmlToFile(bi, args); - return true; - } - - /** - * Add the current session to the session manager for each event that it was - * profiled under. - * - * @param session the session manager to populate - */ - private void populateWithCurrentSession(SessionManager session) { - session.removeAllCurrentSessions(); - String[] eventName = getEventNames(); - if (eventName != null) { - for (int i = 0; i < eventName.length; i++) { - session.addSession(SessionManager.CURRENT, eventName[i]); - } - } - } - - private String[] getEventNames() { - String[] ret = null; - try { - String cmd[] = { "-X", "-d" }; //$NON-NLS-1$ //$NON-NLS-2$ - InputStream is = runOpReport(cmd); - - if (is != null) { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - builder = factory.newDocumentBuilder(); - Document doc = builder.parse(is); - Element root = (Element) doc.getElementsByTagName(ModelDataAdapter.PROFILE).item(0); - - String eventOrTimerSetup; - String eventOrTimerName; - - // Determine if we are in timer-mode or not as the XML will vary - if (!InfoAdapter.hasTimerSupport()) { - eventOrTimerSetup = ModelDataAdapter.EVENT_SETUP; - eventOrTimerName = ModelDataAdapter.EVENT_NAME; - } else { - eventOrTimerSetup = ModelDataAdapter.TIMER_SETUP; - eventOrTimerName = ModelDataAdapter.RTC_INTERRUPTS; - } - - Element setupTag = (Element) root.getElementsByTagName(ModelDataAdapter.SETUP).item(0); - NodeList eventSetupList = setupTag.getElementsByTagName(eventOrTimerSetup); - - // get the event names for the current session - ret = new String[eventSetupList.getLength()]; - for (int i = 0; i < eventSetupList.getLength(); i++) { - Element elm = (Element) eventSetupList.item(i); - ret[i] = elm.getAttribute(eventOrTimerName); - } - } - } catch (IOException e) { - e.printStackTrace(); - OprofileCorePlugin.showErrorDialog("opxmlParse", null); //$NON-NLS-1$ - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } catch (SAXException e) { - e.printStackTrace(); - OprofileCorePlugin.showErrorDialog("opxmlSAXParseException", null); //$NON-NLS-1$ - } - return ret; - } - - /** - * Run opreport with specified arguments <code>args</code> and return - * InputStream to output of report for parsing. - * - * @param args arguments to run with opreport - * @return InputStream to output of report - */ - private InputStream runOpReport(String[] args) { - - ArrayList<String> cmd = new ArrayList<>(); - cmd.add("opreport"); //$NON-NLS-1$ - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY)) { - /* - * The session-dir parameter is relative to project's working dir, which might - * be local or remote. So it should use the proxy manager to determine working - * dir. - */ - String workingDir = ""; //$NON-NLS-1$ - RemoteProxyManager proxy = RemoteProxyManager.getInstance(); - try { - IRemoteFileProxy rfile = proxy.getFileProxy(Oprofile.OprofileProject.getProject()); - workingDir = rfile.getWorkingDir().getPath(); - } catch (CoreException e) { - e.printStackTrace(); - return null; - } - cmd.add(1, "--session-dir=" + workingDir + IPath.SEPARATOR + "oprofile_data"); //$NON-NLS-1$ //$NON-NLS-2$ - } - Collections.addAll(cmd, args); - Process p = null; - try { - p = RuntimeProcessFactory.getFactory().exec(cmd.toArray(new String[0]), - Oprofile.OprofileProject.getProject()); - - StringBuilder output = new StringBuilder(); - StringBuilder errorOutput = new StringBuilder(); - String s = null; - try (BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); - BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()))) { - // Read output of opreport. We need to do this, since this might - // cause the plug-in to hang. See Eclipse bug 341621 for more - // info. - // FIXME: Both of those while loops should really be done in two - // separate - // threads, so that we avoid this very problem when the error - // input - // stream buffer fills up. - while ((s = stdInput.readLine()) != null) { - output.append(s + System.getProperty("line.separator")); //$NON-NLS-1$ - } - while ((s = stdError.readLine()) != null) { - errorOutput.append(s + System.getProperty("line.separator")); //$NON-NLS-1$ - } - if (!errorOutput.toString().trim().equals("")) { //$NON-NLS-1$ - // needs to be run in the ui thread otherwise swt throws invalid thread access - final String dialogTitle = NLS.bind(OprofileProperties.getString("process.log.stderr.dialog.title"), //$NON-NLS-1$ - "opreport"); //$NON-NLS-1$ - final String errorMessage = NLS.bind(OprofileProperties.getString("process.log.stderr"), //$NON-NLS-1$ - "opreport", errorOutput.toString().trim()); //$NON-NLS-1$ - Display.getDefault().asyncExec(() -> ErrorDialog.openError(null, dialogTitle, errorMessage, - new Status(IStatus.ERROR, OprofileCorePlugin.getId(), IStatus.OK, errorMessage, null))); - } - } catch (IOException e) { - e.printStackTrace(); - } - - if (p.waitFor() == 0) { - // convert the string to inputstream to pass to builder.parse - return new ByteArrayInputStream(output.toString().getBytes(StandardCharsets.UTF_8)); - } - } catch (IOException e1) { - e1.printStackTrace(); - OprofileCorePlugin.showErrorDialog("opxmlParse", null); //$NON-NLS-1$ - } catch (InterruptedException e) { - e.printStackTrace(); - } - - return null; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelEvent.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelEvent.java deleted file mode 100644 index cf5bb275b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.model; - -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; - -/** - * A class which represents the event collected in a given session. - */ -public class OpModelEvent { - private String eventName; - private String printTabs = ""; // for nice output //$NON-NLS-1$ - private OpModelImage image; - private OpModelSession parentSession; - - public OpModelEvent(OpModelSession parentSession, String name) { - this.parentSession = parentSession; - this.eventName = name; - } - - public String getName() { - return eventName; - } - - public OpModelSession getSession() { - return parentSession; - } - - // populate all images & dependent images - public void refreshModel() { - image = getNewImage(); - } - - public OpModelImage getImage() { - return image; - } - - protected OpModelImage getNewImage() { - return Oprofile.getModelData(this.eventName, parentSession.getName()); - } - - public int getCount() { - if (image == null) { - return 0; - } else { - return image.getCount(); - } - } - - public String toString(String tabs) { - printTabs = tabs; - String s = toString(); - printTabs = ""; //$NON-NLS-1$ - return s; - } - - @Override - public String toString() { - String s = eventName + "\n"; //$NON-NLS-1$ - if (image != null) { - s += printTabs + "Image: "; //$NON-NLS-1$ - s += image.toString(printTabs + "\t"); //$NON-NLS-1$ - } - return s; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelImage.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelImage.java deleted file mode 100644 index 8dc53a807..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelImage.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.model; - -/** - * A class which represents an image (executables, libraries, modules) profile - * by OProfile. - */ -public class OpModelImage { - public static final int IMAGE_PARSE_ERROR = -1; - - // The count of all samples from this image - private int count; - - // the count for all dependent images -- needed? - private int depcount; - - // The name of this image (the full path, where applicable) - private String name; - - // The symbols profiled in this image - private OpModelSymbol[] symbols; - - // Any dependent images on this image (usually shared libs, kernel modules) - private OpModelImage[] dependents; - - private String printTabs = ""; // for nice output //$NON-NLS-1$ - - public OpModelImage() { - name = ""; //$NON-NLS-1$ - count = 0; - depcount = 0; - symbols = null; - dependents = null; - } - - public int getCount() { - return count; - } - - public int getDepCount() { - return depcount; - } - - public String getName() { - return name; - } - - public OpModelSymbol[] getSymbols() { - return symbols; - } - - public OpModelImage[] getDependents() { - return dependents; - } - - public boolean hasDependents() { - return (dependents == null || dependents.length == 0 ? false : true); - } - - /** - * This method is not meant to be called publicly, used only from the XML - * processors - * - * @param count - */ - public void setCount(int count) { - this.count = count; - } - - /** - * This method is not meant to be called publicly, used only from the XML - * processors - * - * @param depcount - */ - public void setDepCount(int depcount) { - this.depcount = depcount; - } - - /** - * This method is not meant to be called publicly, used only from the XML - * processors - * - * @param name - */ - public void setName(String name) { - this.name = name; - } - - /** - * This method is not meant to be called publicly, used only from the XML - * processors - * - * @param symbols - */ - public void setSymbols(OpModelSymbol[] symbols) { - this.symbols = symbols; - } - - /** - * This method is not meant to be called publicly, used only from the XML - * processors - * - * @param dependents - */ - public void setDependents(OpModelImage[] dependents) { - this.dependents = dependents; - } - - public String toString(String tabs) { - printTabs = tabs; - String s = toString(); - printTabs = ""; //$NON-NLS-1$ - return s; - } - - @Override - public String toString() { - String s = name + ", Count: " + count + (depcount != 0 ? ", Dependent Count: " + depcount + "\n" : "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - if (symbols != null) { - for (int i = 0; i < symbols.length; i++) { - s += printTabs + "Symbols: "; //$NON-NLS-1$ - s += symbols[i].toString(printTabs + "\t"); //$NON-NLS-1$ - } - } - if (dependents != null) { - for (int i = 0; i < dependents.length; i++) { - s += printTabs + "Dependent Image: "; //$NON-NLS-1$ - s += dependents[i].toString(printTabs + "\t"); //$NON-NLS-1$ - } - } - return s; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelRoot.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelRoot.java deleted file mode 100644 index 9332112ce..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelRoot.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.model; - -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; - -/** - * A root node for the data model. Only one instance exists at any time, - * although the contents will change. On instantiation the events and sessions - * are gathered. - * - * Note that this data model does not map 1:1 to the oprofile data model. This - * model is for use in profiling one application compiled with debug info, from - * within eclipse. - */ - -public class OpModelRoot { - // single instance - private static OpModelRoot modelRoot = new OpModelRoot(); - - private OpModelSession[] session; - - protected OpModelRoot() { - session = null; - } - - public static OpModelRoot getDefault() { - return modelRoot; - } - - public void refreshModel() { - // TODO-performance/interactivity: some persistence for events/sessions - // that dont change from run to run (non default sessions) - - session = getNewSessions(); - if (session != null) { - for (int i = 0; i < session.length; i++) { - if (session[i] != null) - session[i].refreshModel(); - } - } - } - - /** - * return list of session collected on this system as well as events under each - * of them. - * - * @return collected sessions list - * @since 3.0 - */ - protected OpModelSession[] getNewSessions() { - // launch `opxml sessions`, gather up events & the sessions under them - return Oprofile.getSessions(); - } - - public OpModelSession[] getSessions() { - return session; - } - - @Override - public String toString() { - String s = ""; //$NON-NLS-1$ - if (session != null) { - for (int i = 0; i < session.length; i++) { - if (session[i] != null) { - s += "Session: "; //$NON-NLS-1$ - s += session[i].toString("\t"); //$NON-NLS-1$ - } - } - } - return s; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSample.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSample.java deleted file mode 100644 index 993672bdd..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSample.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.model; - -/** - * Represents an OProfile sample. - */ -public class OpModelSample { - private int count; - private int line; - private String file; - - public OpModelSample() { - count = 0; - line = 0; - } - - public void setCount(int count) { - this.count = count; - } - - public void setLine(int line) { - this.line = line; - } - - public void setFilePath(String file) { - this.file = file; - } - - public int getCount() { - return count; - } - - public int getLine() { - return line; - } - - public String getFilePath() { - return file; - } - - @Override - public String toString() { - return "Line #: " + line + ", Count: " + count + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSession.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSession.java deleted file mode 100644 index f968db199..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSession.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.model; - -/** - * This class represents oprofile sessions. Sessions contain an image of the - * profiled binary. - */ -public class OpModelSession { - private static final String DEFAULT_SESSION_STRING = "current"; //$NON-NLS-1$ - - private String name; - private String printTabs = ""; // for nice output //$NON-NLS-1$ - private OpModelEvent[] events; - - public OpModelSession(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public OpModelEvent[] getEvents() { - return events; - } - - public void setEvents(OpModelEvent[] events) { - this.events = events; - } - - public boolean isDefaultSession() { - return name.equals(DEFAULT_SESSION_STRING); - } - - public void refreshModel() { - if (events != null) { - for (int i = 0; i < events.length; i++) { - events[i].refreshModel(); - } - } - } - - public String toString(String tabs) { - printTabs = tabs; - String s = toString(); - printTabs = ""; //$NON-NLS-1$ - return s; - } - - @Override - public String toString() { - String s = name + "\n"; //$NON-NLS-1$ - if (events != null) { - for (int i = 0; i < events.length; i++) { - s += printTabs + "Event: "; //$NON-NLS-1$ - s += events[i].toString(printTabs + "\t"); //$NON-NLS-1$ - } - } - return s; - - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSymbol.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSymbol.java deleted file mode 100644 index b7b35c2fd..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/model/OpModelSymbol.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.model; - -/** - * This class represents a debugging symbol, the symbol output from opxml. If a - * symbol exists, it must have samples (which are OpModelSamples), although - * those samples may or may not have complete debug info. - */ -public class OpModelSymbol { - private String name; - private String file; - private int line; - private int count; - private OpModelSample[] samples; - private String printTabs = ""; // for nice output //$NON-NLS-1$ - - public OpModelSymbol() { - name = ""; //$NON-NLS-1$ - file = ""; //$NON-NLS-1$ - count = 0; - samples = null; - } - - public void setName(String name) { - this.name = name; - } - - public void setFilePath(String file) { - this.file = file; - } - - public void setLine(int line) { - this.line = line; - } - - public void setCount(int count) { - this.count = count; - } - - public void setSamples(OpModelSample[] samples) { - this.samples = samples; - } - - public String getName() { - return name; - } - - public String getFilePath() { - return file; - } - - public int getLine() { - return line; - } - - public int getCount() { - return count; - } - - public OpModelSample[] getSamples() { - return samples; - } - - public String toString(String tabs) { - printTabs = tabs; - String s = toString(); - printTabs = ""; //$NON-NLS-1$ - return s; - } - - @Override - public String toString() { - String s = name + ", File: " + file + ", Count: " + count + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (samples != null) { - for (int i = 0; i < samples.length; i++) { - s += printTabs + "Sample: "; //$NON-NLS-1$ - s += samples[i].toString(); - } - } - return s; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/oprofile.properties b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/oprofile.properties deleted file mode 100644 index 454e54dc5..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/oprofile.properties +++ /dev/null @@ -1,42 +0,0 @@ -###################################################################### -# Copyright (c) 2004, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Keith Seitz <keiths@redhat.com> - Initial implementation -# Kent Sebastian <ksebasti@redhat.com> -###################################################################### -getSamples.caption=Reading samples for session \"{0}\"... -getSamples.caption.default-session=Reading samples for session \"Default\"... - -process.log.stderr.dialog.title=Unexpected {0} error output -process.log.stderr={0} process error output: {1} -process.log.stdout={0} process output: {1} - -ophelpRun.error.statusMessage=Error during run of ophelp - -opxmlParse.error.statusMessage=An unexpected error occurred with parsing the output. Please file a bug at http://bugs.eclipse.org/bugs. -opxmlParse.error.dialog.title=Error with XML parsing -opxmlParse.error.dialog.message=An error occurred with parsing the XML output from OProfile. - -opxmlSAXParseException.error.statusMessage=The XML output could not be read, most likely a fatal error. -opxmlSAXParseException.error.dialog.title=Error with XML parsing -opxmlSAXParseException.error.dialog.message=An error occurred with parsing the XML output from OProfile. - -ophelpInputStream.error.dialog.title=Error with ophelp run -ophelpInputStream.error.dialog.message=An error occurred when collecting the output from ophelp. Check if Oprofile is properly installed and try again. - -fatal.opinfoNotParsed=Fatal error: core OProfile information failed to parse. Please fix the issue and restart Eclipse. - -ui.annotate.no.sessions.error.statusMessage=There are no sessions to annotate. Please profile a binary. -ui.annotate.no.sessions.error.dialog.title=Annotation Error -ui.annotate.no.sessions.error.dialog.message=Error annotating - -countersNotFound.error.dialog.message=Could not get Oprofile counters information. Check if Oprofile is properly installed and try again. -countersNotFound.error.dialog.title=Oprofile counters -countersNotFound.error.statusMessage=Error getting counters. \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/AbstractDataAdapter.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/AbstractDataAdapter.java deleted file mode 100644 index e7c4d3be0..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/AbstractDataAdapter.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.w3c.dom.Document; - -public abstract class AbstractDataAdapter { - - /** - * @return a Document representing the newly created XML data. - */ - public abstract Document getDocument(); - - /** - * parse the XML data modifying it as necessary to produce the necessary XML - * output. - */ - public abstract void process(); - - /** - * @return an InputStream to the newly created XML data. - */ - public InputStream getInputStream() { - InputStream inp = null; - Source source = new DOMSource(getDocument()); - StringWriter stw = new StringWriter(); - Result result = new StreamResult(stw); - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer xformer; - try { - xformer = factory.newTransformer(); - xformer.setOutputProperty("indent", "yes"); //$NON-NLS-1$ //$NON-NLS-2$ - xformer.transform(source, result); - inp = new ByteArrayInputStream(stw.toString().getBytes(StandardCharsets.UTF_8)); - } catch (TransformerException e) { - e.printStackTrace(); - } - return inp; - } - - @Override - public String toString() { - String ret = null; - Source source = new DOMSource(getDocument()); - StringWriter stw = new StringWriter(); - Result result = new StreamResult(stw); - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer xformer; - try { - xformer = factory.newTransformer(); - xformer.setOutputProperty("indent", "yes"); //$NON-NLS-1$ //$NON-NLS-2$ - xformer.transform(source, result); - ret = stw.toString(); - } catch (TransformerException e) { - e.printStackTrace(); - } - return ret; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/EventIdCache.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/EventIdCache.java deleted file mode 100644 index 924548262..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/EventIdCache.java +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.InfoAdapter; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * Caches the event data used by the CheckEventAdapter. The performance - * improvement is targeted at the first time a call with the given arguments is - * made. The first given call to check-event will take roughly O(n), and all - * other calls whether they be new or recurring take O(1). Note that recurring - * calls are handled by an entirely different cache. This particular class - * simply parses the XML from ophelp -X and stores it. - */ -public class EventIdCache { - - private static final String HELP_EVENTS = "help_events"; //$NON-NLS-1$ - private static final String HEADER = "header"; //$NON-NLS-1$ - private static final String SCHEMA = "schemaversion"; //$NON-NLS-1$ - private static final String CATEGORY = "category"; //$NON-NLS-1$ - private static final String OPHELP = "ophelp"; //$NON-NLS-1$ - private static final String EVENT = "event"; //$NON-NLS-1$ - private static final String EVENT_NAME = "event_name"; //$NON-NLS-1$ - - private static final String LOCAL = "local"; //$NON-NLS-1$ - - private Document eventDoc; // the document to hold the xml from ophelp - private Element eventRoot; // the root corresponding to the xml from ophelp - // name - the name of the event - // Element - the DOM node - private HashMap<String, Element> nameMap; - - // Map containing the caches for remote machines - private static HashMap<String, EventIdCache> cacheMap; - - public static EventIdCache getInstance() { - - if (cacheMap == null) { - cacheMap = new HashMap<>(); - } - - IProject project = Oprofile.OprofileProject.getProject(); - EventIdCache newCache = new EventIdCache(); - if (project != null) { - EventIdCache eventIdCache = cacheMap.get(project.getLocationURI().getHost()); - if (eventIdCache == null) { - cacheMap.put(project.getLocationURI().getHost(), newCache); - } else { - return eventIdCache; - } - } else { - // If no project associated we should launch locally - EventIdCache eventIdCache = cacheMap.get(LOCAL); - if (eventIdCache == null) { - cacheMap.put(LOCAL, newCache); - } else { - return eventIdCache; - } - } - - return newCache; - } - - /** - * @param id the id corresponding to an event - * @return the DOM Element corresponding to the event tag - */ - public Element getElementWithName(String name) { - IProject project = Oprofile.OprofileProject.getProject(); - EventIdCache eventIdCache; - if (project != null) { - eventIdCache = cacheMap.get(project.getLocationURI().getHost()); - } else { - eventIdCache = cacheMap.get(LOCAL); - } - - if (eventIdCache.nameMap == null) { - readXML(eventIdCache); - buildCache(eventIdCache); - } - return eventIdCache.nameMap.get(name) != null ? (Element) eventIdCache.nameMap.get(name) : null; - - } - - /** - * Build the cache - */ - private void buildCache(EventIdCache eventId) { - eventId.nameMap = new HashMap<>(); - NodeList eventList = eventId.eventRoot.getElementsByTagName(EVENT); - for (int i = 0; i < eventList.getLength(); i++) { - Element elem = (Element) eventList.item(i); - String eventName = elem.getAttribute(EVENT_NAME); - eventId.nameMap.put(eventName, elem); - } - } - - /** - * Read the XML from ophelp - */ - private void readXML(EventIdCache eventId) { - if (eventId.eventRoot != null) { - return; - } - - try { - Process p = RuntimeProcessFactory.getFactory().exec(OPHELP + ' ' + "-X", //$NON-NLS-1$ - Oprofile.OprofileProject.getProject()); - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - try { - eventId.eventDoc = builder.parse(p.getInputStream()); - Element elem = (Element) eventId.eventDoc.getElementsByTagName(HELP_EVENTS).item(0); - eventId.eventRoot = elem; - } catch (IOException | SAXException e) { - } - } catch (ParserConfigurationException e1) { - e1.printStackTrace(); - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Get the unit mask type. Schema Version 1.1 and newer of ophelp XML will list - * the unit mask type as an attribute. Older version will not so we default to - * file lookups. - * - * @param name the name of the event - * @return the type of unit mask. This can be either mandatory, exclusive, - * bitmask, or null if none could be found. - */ - public String getUnitMaskType(String name) { - IProject project = Oprofile.OprofileProject.getProject(); - EventIdCache eventIdCache; - if (project != null) { - eventIdCache = cacheMap.get(project.getLocationURI().getHost()); - } else { - eventIdCache = cacheMap.get(LOCAL); - } - - if (eventIdCache.eventRoot == null) { - readXML(eventIdCache); - buildCache(eventIdCache); - } - - Element header = (Element) eventIdCache.eventRoot.getElementsByTagName(HEADER).item(0); - - double schemaVersion = 0; - - if (!eventIdCache.eventRoot.getAttribute(SCHEMA).isEmpty()) { - schemaVersion = Double.parseDouble(eventIdCache.eventRoot.getAttribute(SCHEMA)); - } else { - schemaVersion = Double.parseDouble(header.getAttribute(SCHEMA)); - } - - String unitMaskType = null; - IRemoteFileProxy proxy = null; - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - - // Schema Version > 1.0 has the unit mask type within the XML - if (schemaVersion > 1.0) { - Element event = getElementWithName(name); - Element unitMaskTag = (Element) event.getElementsByTagName(InfoAdapter.UNIT_MASKS).item(0); - return unitMaskTag.getAttribute(CATEGORY); - } else { - IFileStore fileStore = proxy.getResource(InfoAdapter.CPUTYPE); - try (InputStream fileInputStream = fileStore.openInputStream(EFS.NONE, new NullProgressMonitor()); - BufferedReader bi = new BufferedReader(new InputStreamReader(fileInputStream))) { - - String cpuType = bi.readLine(); - IFileStore opArchEvents = proxy.getResource(InfoAdapter.OP_SHARE + cpuType + "/" + InfoAdapter.EVENTS); //$NON-NLS-1$ - IFileStore opArchUnitMasks = proxy - .getResource(InfoAdapter.OP_SHARE + cpuType + "/" + InfoAdapter.UNIT_MASKS); //$NON-NLS-1$ - - try (InputStream inputStreamEvents = opArchEvents.openInputStream(EFS.NONE, new NullProgressMonitor()); - BufferedReader eventReader = new BufferedReader(new InputStreamReader(inputStreamEvents))) { - String line; - while ((line = eventReader.readLine()) != null) { - // find the line with the event name - if (line.contains("name:" + name + ' ')) { //$NON-NLS-1$ - int start = line.indexOf("um:") + 3; //$NON-NLS-1$ - int end = line.indexOf(' ', start); - // grab the string that references the unit mask type - String um = line.substring(start, end); - try (InputStream inputStreamMasks = opArchUnitMasks.openInputStream(EFS.NONE, - new NullProgressMonitor()); - BufferedReader unitMaskReader = new BufferedReader( - new InputStreamReader(inputStreamMasks))) { - while ((line = unitMaskReader.readLine()) != null) { - if (line.contains("name:" + um + ' ')) { //$NON-NLS-1$ - start = line.indexOf("type:") + 5; //$NON-NLS-1$ - end = line.indexOf(' ', start); - unitMaskType = line.substring(start, end); - return unitMaskType; - } - } - } - } - } - } - } catch (IOException | CoreException e) { - } - } - return unitMaskType; - } - - /** - * @since 3.0 - */ - public void setCacheDoc(Element oldRoot) { - eventRoot = oldRoot; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OprofileSAXHandler.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OprofileSAXHandler.java deleted file mode 100644 index 6f7b97730..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OprofileSAXHandler.java +++ /dev/null @@ -1,192 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml; - -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Stack; - -import org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent.CheckEventsProcessor; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.OpInfoProcessor; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionsProcessor; -import org.xml.sax.Attributes; -import org.xml.sax.helpers.DefaultHandler; - -/** - * The SAX handler class that is used to parse the output of opxml. - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class OprofileSAXHandler extends DefaultHandler { - // The only allowed instance of this class - private static OprofileSAXHandler instance = null; - - // A Map of all the XML processors for opxml - private static HashMap<String, Class<?>> processors = new HashMap<>(); - - // The current processor being used to parse the document - private XMLProcessor processor = null; - private Object callData; - - /* - * A stack of XML processors. This allows processors to invoke sub-processors - * for handling nested tags more efficiently. - */ - private Stack<XMLProcessor> processorStack = new Stack<>(); - - // Introduced for fix of Eclipse BZ#343025 - // As per SAX spec, SAX parsers are allowed to split character data into as many - // chunks as - // they please, and they can split the text at whichever boundaries they want. - // In order to - // handle this properly, it is needed to accumulate the text returned in each - // call - // until it recieves a callback that isn't characters. - private StringBuilder charactersBuffer; - - // A convenience class for specifying XMLProcessors - private static class ProcessorItem { - public String tagName; - public Class<?> handlerClass; - - public ProcessorItem(String name, Class<?> cls) { - tagName = name; - handlerClass = cls; - } - } - - // The list of all "root" XML tags and their handler classes - private static final ProcessorItem[] handlerList = { - new ProcessorItem(OpxmlConstants.INFO_TAG, OpInfoProcessor.class), - new ProcessorItem(OpxmlConstants.CHECKEVENTS_TAG, CheckEventsProcessor.class), - new ProcessorItem(OpxmlConstants.MODELDATA_TAG, ModelDataProcessor.class), - new ProcessorItem(OpxmlConstants.SESSIONS_TAG, SessionsProcessor.class) }; - - /** - * Returns an instance of the handler. This must be used to access the parser! - * - * @return a handler instance - */ - public static OprofileSAXHandler getInstance(Object callData) { - if (instance == null) { - instance = new OprofileSAXHandler(); - - // Initialize processor map - for (int i = 0; i < handlerList.length; ++i) { - processors.put(handlerList[i].tagName, handlerList[i].handlerClass); - } - } - - // Set calldata into handler - instance.setCallData(callData); - return instance; - } - - /** - * Sets the calldata for the processor. - * - * @param callData the calldata to pass to the processor - */ - private void setCallData(Object callData) { - this.callData = callData; - } - - /** - * Returns the processor for a given request type. - * - * @param type the name of the processor - * @return the requested processor or null - */ - private static XMLProcessor getProcessor(String type) { - XMLProcessor processor = null; - - Class<?> handlerClass = processors.get(type); - if (handlerClass != null) { - try { - processor = (XMLProcessor) handlerClass.getDeclaredConstructor().newInstance(); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException | NoSuchMethodException | SecurityException e) { - } - } - - return processor; - } - - @Override - public void startDocument() { - // Reset processor - processor = null; - } - - @Override - public void endDocument() { - } - - @Override - public void startElement(String uri, String lName, String qName, Attributes attrs) { - if (processor == null) { - // Get processor for this event type - processor = getProcessor(qName); - processor.reset(callData); - } - - // If we already have a processor, so let it deal with this new element. - // Allow the processor to deal with it's own tag as well: this way it can - // grab attributes from it. - processor.startElement(qName, attrs, callData); - - // Clean up the characters buffer - charactersBuffer = new StringBuilder(); - } - - @Override - public void endElement(String uri, String name, String qName) { - // Set the accumulated characters - processor.characters(charactersBuffer.toString(), callData); - processor.endElement(qName, callData); - } - - @Override - public void characters(char ch[], int start, int length) { - // Ignore characters which are only whitespace - String str = new String(ch, start, length).trim(); - if (str.length() > 0 && processor != null) - // Append the character to the buffer. - charactersBuffer.append(str); - } - - /** - * Pushes the current XMLProcessor onto the stack and installs the given - * processor as the document's parser/handler. - * - * @param proc the processor to continue parsing the document - */ - public void push(XMLProcessor proc) { - processorStack.add(processor); - processor = proc; - processor.reset(callData); - } - - /** - * Removes the current XMLProcessor and installs the previous processor. NOTE: - * This assumes that endElement caused the pop, so it calls endElement in the - * parent processor. - * - * @param tag the XML tag to pass to the parent processor - */ - public void pop(String tag) { - processor = processorStack.pop(); - processor.endElement(tag, callData); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OpxmlConstants.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OpxmlConstants.java deleted file mode 100644 index 98a4adf50..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/OpxmlConstants.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - change samples to model-data - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml; - -/** - * A class of constants for communications with the opxml wrapper program. - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler - */ -public class OpxmlConstants { - /** - * Request static oprofile information (num counters, defaults, event lists) - */ - public static final String OPXML_INFO = "info"; //$NON-NLS-1$ - public static final String INFO_TAG = OPXML_INFO; - - /** - * Request model data for a session - */ - public static final String OPXML_MODELDATA = "model-data"; //$NON-NLS-1$ - public static final String MODELDATA_TAG = OPXML_MODELDATA; - - /** - * Request event validity check - */ - public static final String OPXML_CHECKEVENTS = "check-events"; //$NON-NLS-1$ - public static final String CHECKEVENTS_TAG = OPXML_CHECKEVENTS; - - /** - * Request session list - */ - public static final String OPXML_SESSIONS = "sessions"; //$NON-NLS-1$ - public static final String SESSIONS_TAG = OPXML_SESSIONS; -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/XMLProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/XMLProcessor.java deleted file mode 100644 index a75a6cb38..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/XMLProcessor.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml; - -import org.xml.sax.Attributes; - -/** - * A class which (minimally) parses XML documents. This class provides only - * basic support for collecting information from XML documents. It is intended - * to be subclassed, providing only common functionality for all parser classes. - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class XMLProcessor { - // The characters in the current tag - protected String characters; - - /** - * This method is called whenever the SAXHandler is about to invoke the - * processor for the first time on a given document. - * - * @param callData call data for the processor (usually the result is stored - * here) - */ - public void reset(Object callData) { - } - - /** - * This method is called whenever a new tag is seen in the document. By default, - * this process will clear the characters collected for the tag. Processors will - * typically call this baseclass method to setup for collecting new character - * information for a tag. - * - * @param name the name of the tag - * @param attrs the tag's attributes - * @param callData call data for the processor (usually the result is stored - * here) - */ - public void startElement(String name, Attributes attrs, Object callData) { - characters = ""; //$NON-NLS-1$ - } - - /** - * This method is called whenever the closing tag for an element is seen in the - * document. - * - * @param name the element which is ending - * @param callData call data for the processor (usually the result is stored - * here) - */ - public void endElement(String name, Object callData) { - } - - /** - * This method is called whenever characters are seen in the document that are - * not in a markup tag. - * - * @param chars the characters read - * @param callData call data for the processor (usually the result is stored - * here) - */ - public void characters(String chars, Object callData) { - characters = chars; - } - - /** - * This method is called on attribute strings and does the reverse of - * valid_string in xmlfmt.cc in opxml. - * - * @param source source attribute string - * @return the source string with escaped characters translated back to their - * single character counterpart - */ - public String validString(String source) { - final String chars_long[] = { "&", """, "'", "<", ">" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - final String chars[] = { "&", "\"", "'", "<", ">" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - for (int i = 0; i < chars_long.length; i++) { - source.replaceAll(chars_long[i], chars[i]); - } - return source; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventAdapter.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventAdapter.java deleted file mode 100644 index 661c1f54c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventAdapter.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent; - -import java.util.TreeSet; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.linuxtools.internal.oprofile.core.opxml.AbstractDataAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.EventIdCache; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -/** - * This class takes the XML that is output from various checks for and uses that - * data to modify it into the format expected by the SAX parser. - */ -public class CheckEventAdapter extends AbstractDataAdapter { - - public static final String CHECK_EVENTS = "check-events"; //$NON-NLS-1$ - public static final String RESULT = "result"; //$NON-NLS-1$ - public static final String UNIT_MASKS = "unit_masks"; //$NON-NLS-1$ - public static final String UNIT_MASK = "unit_mask"; //$NON-NLS-1$ - public static final String MASK = "mask"; //$NON-NLS-1$ - - private Element event; // the element corresponding to the event id - private String eventName; // the id corresponding to the event - private String unitMask; // the unit mask for the event - private Document resultDoc; // the document to hold the generated xml - private String returnCode; // the return code to be used in the generated xml - - public CheckEventAdapter(String ctr, String event, String umask) { - eventName = event; - unitMask = umask; - - this.event = EventIdCache.getInstance().getElementWithName(eventName); - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - resultDoc = builder.newDocument(); - } catch (ParserConfigurationException e1) { - e1.printStackTrace(); - } - } - - @Override - public void process() { - setReturnCode(); - createXML(); - } - - private void setReturnCode() { - if (!isValidUnitMask()) { - returnCode = "invalid-um"; //$NON-NLS-1$ - return; - } - - returnCode = "ok"; //$NON-NLS-1$ - } - - /** - * Check if the unit mask being used is acceptable for this event - * - * @return true if the unit mask is recognized by the event and false otherwise. - */ - private boolean isValidUnitMask() { - TreeSet<Integer> bitMaskSet = new TreeSet<>(); - Element unitMasksTag = (Element) event.getElementsByTagName(UNIT_MASKS).item(0); - - if (unitMasksTag == null) { - return true; - } - - NodeList unitMasksList = unitMasksTag.getElementsByTagName(UNIT_MASK); - - // type:exclusive unit mask support - for (int i = 0; i < unitMasksList.getLength(); i++) { - Element unitMaskElem = (Element) unitMasksList.item(i); - String val = unitMaskElem.getAttribute(MASK); - if (val.equals(unitMask)) { - return true; - } - bitMaskSet.add(Integer.parseInt(val)); - } - - // type:bitmask unit mask support - String unitMaskType = EventIdCache.getInstance().getUnitMaskType(eventName); - if ("bitmask".equals(unitMaskType)) { //$NON-NLS-1$ - int tmpVal = Integer.parseInt(unitMask); - int count = 0; - while (tmpVal != 0) { - if (tmpVal % 2 != 0 && !bitMaskSet.contains((int) Math.pow(2, count))) { - return false; - } - tmpVal = tmpVal / 2; - count++; - } - return true; - } - - return false; - } - - private void createXML() { - Element resultRoot = resultDoc.createElement(CHECK_EVENTS); - Element resultTag = resultDoc.createElement(RESULT); - resultTag.setTextContent(returnCode); - resultRoot.appendChild(resultTag); - resultDoc.appendChild(resultRoot); - } - - @Override - public Document getDocument() { - return resultDoc; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventsProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventsProcessor.java deleted file mode 100644 index 32246d5f4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/checkevent/CheckEventsProcessor.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.checkevent; - -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; - -/** - * XML handler class for opxml's "check-events". - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class CheckEventsProcessor extends XMLProcessor { - public static final int INVALID_UNKNOWN = 0; // unexpected error - public static final int EVENT_OK = 1; // valid - public static final int INVALID_UMASK = 3; // invalid unit mask value - public static final int INVALID_COUNTER = 4; // invalid event for given counter number - - private static final String RESULT_TAG = "result"; //$NON-NLS-1$ - private static final String CHECK_EVENTS_TAG = "check-events"; //$NON-NLS-1$ - - private static final String EVENT_OK_STR = "ok"; //$NON-NLS-1$ - private static final String INVALID_UMASK_STR = "invalid-um"; //$NON-NLS-1$ - private static final String INVALID_COUNTER_STR = "invalid-counter"; //$NON-NLS-1$ - - private int result; - - @Override - public void reset(Object callData) { - result = INVALID_UNKNOWN; - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(RESULT_TAG)) { - if (characters.equals(EVENT_OK_STR)) { - result = EVENT_OK; - } else if (characters.equals(INVALID_UMASK_STR)) { - result = INVALID_UMASK; - } else if (characters.equals(INVALID_COUNTER_STR)) { - result = INVALID_COUNTER; - } - } else if (name.equals(CHECK_EVENTS_TAG)) { - int[] r = (int[]) callData; - r[0] = result; - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/DefaultsProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/DefaultsProcessor.java deleted file mode 100644 index 98e8674fc..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/DefaultsProcessor.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.info; - -import java.util.HashMap; - -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; - -/** - * XML handler class for opxml's "defaults". - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class DefaultsProcessor extends XMLProcessor { - // XML tags reconize by this processor (public) - public static final String SAMPLE_DIR = "sample-dir"; //$NON-NLS-1$ - public static final String LOCK_FILE = "lock-file"; //$NON-NLS-1$ - public static final String LOG_FILE = "log-file"; //$NON-NLS-1$ - public static final String DUMP_STATUS = "dump-status"; //$NON-NLS-1$ - protected HashMap<String, String> map = new HashMap<>(); - - @Override - public void reset(Object callData) { - map.clear(); - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(OpInfoProcessor.DEFAULTS_TAG)) { - OpInfo info = (OpInfo) callData; - info.setDefaults(map); - OprofileSAXHandler.getInstance(callData).pop(name); - } else { - map.put(name, characters); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/EventListProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/EventListProcessor.java deleted file mode 100644 index 2975be8bf..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/EventListProcessor.java +++ /dev/null @@ -1,230 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.info; - -import java.util.ArrayList; - -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * XML handler class for opxml's "event-list". - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class EventListProcessor extends XMLProcessor { - // The current event being constructed - private OpEvent currentEvent; - private int counter; - private ArrayList<OpEvent> currentEventList; - - // An XML processor for reading the unit mask information for an event - private UnitMaskProcessor umProcessor; - - // XML elements recognized by this processor - private static final String EVENT_TAG = "event"; //$NON-NLS-1$ - private static final String UNIT_MASK_TAG = "unit-mask"; //$NON-NLS-1$ - private static final String NAME_TAG = "name"; //$NON-NLS-1$ - private static final String VALUE_TAG = "value"; //$NON-NLS-1$ - private static final String DESCRIPTION_TAG = "description"; //$NON-NLS-1$ - private static final String MASK_TAG = "mask"; //$NON-NLS-1$ - private static final String MINIMUM_COUNT_TAG = "minimum"; //$NON-NLS-1$ - private static final String ATTR_EVENT_LIST_COUNTER = "counter"; //$NON-NLS-1$ - - // This is a special processor which is used to deal with a single mask value - private static class MaskProcessor extends XMLProcessor { - private OpUnitMask.MaskInfo info; - - @Override - public void reset(Object callData) { - info = new OpUnitMask.MaskInfo(); - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(VALUE_TAG)) { - // Set mask's value - info.value = Integer.parseInt(characters); - } else if (name.equals(DESCRIPTION_TAG)) { - info.description = characters; - } else if (name.equals(NAME_TAG)) { - info.name = characters; - } else if (name.equals(MASK_TAG)) { - // Pop and pass mask tag to previous processor (UnitMaskProcessor) - OprofileSAXHandler.getInstance(callData).pop(MASK_TAG); - } - } - - /** - * Returns the information that has been collected about a mask. - * - * @return the mask information - */ - public OpUnitMask.MaskInfo getResult() { - return info; - } - } - - // This is a special processor to handle unit mask information - private class UnitMaskProcessor extends XMLProcessor { - // An ArrayList to hold all the valid masks for a unit mask. - private ArrayList<OpUnitMask.MaskInfo> masks; - - // The unit mask being constructed - private OpUnitMask unitMask; - - // An XML processor for each individual mask value. - private MaskProcessor maskProcessor; - - // XML elements recognized by this processor - private static final String MASK_TYPE_TAG = "type"; //$NON-NLS-1$ - private static final String MASK_DEFAULT_TAG = "default"; //$NON-NLS-1$ - private static final String MASK_TYPE_BITMASK = "bitmask"; //$NON-NLS-1$ - private static final String MASK_TYPE_MANDATORY = "mandatory"; //$NON-NLS-1$ - private static final String MASK_TYPE_EXCLUSIVE = "exclusive"; //$NON-NLS-1$ - - /** - * Constructor for UnitMaskProcessor. Initializes internal state. - */ - public UnitMaskProcessor() { - super(); - maskProcessor = new MaskProcessor(); - masks = new ArrayList<>(); - } - - @Override - public void reset(Object callData) { - unitMask = new OpUnitMask(); - masks.clear(); - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(MASK_TAG)) { - // Tell SAX handler to use the mask processor - OprofileSAXHandler.getInstance(callData).push(maskProcessor); - } else { - super.startElement(name, attrs, callData); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(MASK_TYPE_TAG)) { - // Set the mask type - unitMask.setType(getTypeFromString(characters)); - } else if (name.equals(MASK_DEFAULT_TAG)) { - // Set the default mask - unitMask.setDefault(Integer.parseInt(characters)); - } else if (name.equals(MASK_TAG)) { - // Add this mask description to the list of all masks - masks.add(maskProcessor.getResult()); - } else if (name.equals(UNIT_MASK_TAG)) { - // All done. Add the known masks to the unit mask - OpUnitMask.MaskInfo[] descs = new OpUnitMask.MaskInfo[masks.size()]; - masks.toArray(descs); - unitMask.setMaskDescriptions(descs); - - // Pop this processor and pass _UNIT_MASK_TAG to previoius processor - OprofileSAXHandler.getInstance(callData).pop(UNIT_MASK_TAG); - } - } - - /** - * Returns the constructed unit mask. - * - * @return the unit mask - */ - public OpUnitMask getResult() { - return unitMask; - } - - // Converts a string representing a mask type into an integer - private int getTypeFromString(String string) { - if (string.equals(MASK_TYPE_MANDATORY)) { - return OpUnitMask.MANDATORY; - } else if (string.equals(MASK_TYPE_BITMASK)) { - return OpUnitMask.BITMASK; - } else if (string.equals(MASK_TYPE_EXCLUSIVE)) { - return OpUnitMask.EXCLUSIVE; - } - - return -1; - } - } - - /** - * Constructor for EventListProcessor. Initializes internal state. - */ - public EventListProcessor() { - super(); - umProcessor = new UnitMaskProcessor(); - } - - @Override - public void reset(Object callData) { - currentEventList = new ArrayList<>(); - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(EVENT_TAG)) { - // new event - currentEvent = new OpEvent(); - } else if (name.equals(UNIT_MASK_TAG)) { - // Tell the SAX handler to use the unit mask processor - OprofileSAXHandler.getInstance(callData).push(umProcessor); - } else if (name.equals(OpInfoProcessor.EVENT_LIST_TAG)) { - // Our start tag: grab the counter number from the attributes - counter = Integer.parseInt(attrs.getValue(ATTR_EVENT_LIST_COUNTER)); - } else { - super.startElement(name, attrs, callData); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(EVENT_TAG)) { - // Finished constructing an event. Add it to the list. - currentEventList.add(currentEvent); - } else if (name.equals(UNIT_MASK_TAG)) { - // Set the event's unit mask - currentEvent.setUnitMask(umProcessor.getResult()); - } else if (name.equals(NAME_TAG)) { - // Set event's name - currentEvent.setText(characters); - } else if (name.equals(DESCRIPTION_TAG)) { - // Set event's description - currentEvent.setTextDescription(characters); - } else if (name.equals(MINIMUM_COUNT_TAG)) { - // Set event's minimum count - currentEvent.setMinCount(Integer.parseInt(characters)); - } else if (name.equals(OpInfoProcessor.EVENT_LIST_TAG)) { - OprofileSAXHandler.getInstance(callData).pop(name); - } - } - - public int getCounterNum() { - return counter; - } - - public OpEvent[] getEvents() { - OpEvent[] events = new OpEvent[currentEventList.size()]; - currentEventList.toArray(events); - return events; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/InfoAdapter.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/InfoAdapter.java deleted file mode 100644 index 2757e12be..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/InfoAdapter.java +++ /dev/null @@ -1,470 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.info; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.AbstractDataAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.EventIdCache; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * This class takes the XML that is output from 'ophelp -X' for and uses that - * data to modify it into the format expected by the SAX parser. - */ -public class InfoAdapter extends AbstractDataAdapter { - - public static final String HELP_EVENTS = "help_events"; //$NON-NLS-1$ - public static final String INFO = "info"; //$NON-NLS-1$ - - public static final String DEFAULTS = "defaults"; //$NON-NLS-1$ - public static final String NUM_COUNTERS = "num-counters"; //$NON-NLS-1$ - public static final String CPU_FREQUENCY = "cpu-frequency"; //$NON-NLS-1$ - public static final String TIMER_MODE = "timer-mode"; //$NON-NLS-1$ - public static final String TIMER = "timer"; //$NON-NLS-1$ - - public static final String EVENT_LIST = "event-list"; //$NON-NLS-1$ - public static final String COUNTER = "counter"; //$NON-NLS-1$ - - public static final String EVENT = "event"; //$NON-NLS-1$ - public static final String EVENT_NAME = "event_name"; //$NON-NLS-1$ - public static final String NAME = "name"; //$NON-NLS-1$ - public static final String DESC = "desc"; //$NON-NLS-1$ - public static final String DESCRIPTION = "description"; //$NON-NLS-1$ - public static final String MIN_COUNT = "min_count"; //$NON-NLS-1$ - public static final String MINIMUM = "minimum"; //$NON-NLS-1$ - public static final String VALUE = "value"; //$NON-NLS-1$ - - public static final String UNIT_MASKS = "unit_masks"; //$NON-NLS-1$ - public static final String UNITMASK = "unit-mask"; //$NON-NLS-1$ - public static final String DEFAULT = "default"; //$NON-NLS-1$ - public static final String TYPE = "type"; //$NON-NLS-1$ - - public static final String UNIT_MASK = "unit_mask"; //$NON-NLS-1$ - public static final String MASK = "mask"; //$NON-NLS-1$ - - public static final String SAMPLE_DIR = "sample-dir"; //$NON-NLS-1$ - public static final String LOCK_FILE = "lock-file"; //$NON-NLS-1$ - public static final String LOG_FILE = "log-file"; //$NON-NLS-1$ - public static final String DUMP_STATUS = "dump-status"; //$NON-NLS-1$ - - public static final String CPUINFO = "/proc/cpuinfo"; //$NON-NLS-1$ - public static String DEV_OPROFILE = "/dev/oprofile/"; //$NON-NLS-1$ - public static String CPUTYPE = DEV_OPROFILE + "cpu_type"; //$NON-NLS-1$ - public static final String OP_SHARE = "/usr/share/oprofile/"; //$NON-NLS-1$ - public static final String EVENTS = "events"; //$NON-NLS-1$ - - public static final String SAMPLE_DIR_VAL = "/var/lib/oprofile/samples/"; //$NON-NLS-1$ - public static final String LOCK_FILE_VAL = "/var/lib/oprofile/lock"; //$NON-NLS-1$ - public static final String LOG_FILE_VAL = "/var/lib/oprofile/samples/oprofiled.log"; //$NON-NLS-1$ - public static final String DUMP_STATUS_VAL = "/var/lib/oprofile/complete_dump"; //$NON-NLS-1$ - - private Document newDoc; // the document we intend to build - private Element oldRoot; // the root of the document with data from ophelp - private Element newRoot; // the root of the document we intent to build - private static IRemoteFileProxy proxy; - - private static boolean hasTimerSupport; - - public InfoAdapter() { - try { - if (hasTimerSupport()) { - // In timer mode, we have no relevant XML generated by ophelp - createDOM(null); - } else { - Process p = RuntimeProcessFactory.getFactory().exec("ophelp -X", Oprofile.OprofileProject.getProject()); //$NON-NLS-1$ - if (p != null) { - InputStream is = p.getInputStream(); - createDOM(is); - } else { - createDOM(null); - } - } - } catch (IOException e) { - createDOM(null); - } - } - - /** - * @since 1.1 - */ - public InfoAdapter(IFileStore resourceFile) { - InputStream inputStream = null; - try { - inputStream = resourceFile.openInputStream(EFS.NONE, new NullProgressMonitor()); - createDOM(inputStream); - setEventIdCacheDoc(oldRoot); - } catch (CoreException e) { - e.printStackTrace(); - } - } - - /** - * Set up the DOM for later manipulation - * - * @param is the InpuStream resulting from running the ophelp command. This will - * be passed in as null for timer mode. - */ - private void createDOM(InputStream is) { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - if (is != null) { - try { - Document oldDoc = builder.parse(is); - Element elem = (Element) oldDoc.getElementsByTagName(HELP_EVENTS).item(0); - oldRoot = elem; - } catch (SAXException | IOException e) { - e.printStackTrace(); - CoreException opcontrolException = new CoreException( - OprofileCorePlugin.createErrorStatus("ophelpRun", null)); //$NON-NLS-1$ - OprofileCorePlugin.showErrorDialog("opxmlSAXParseException", opcontrolException); //$NON-NLS-1$ - } - } else { - CoreException opcontrolException = new CoreException( - OprofileCorePlugin.createErrorStatus("ophelpRun", null)); //$NON-NLS-1$ - OprofileCorePlugin.showErrorDialog("ophelpInputStream", opcontrolException); //$NON-NLS-1$ - } - - newDoc = builder.newDocument(); - try { - newRoot = newDoc.createElement(INFO); - newDoc.appendChild(newRoot); - } catch (Exception e) { - e.printStackTrace(); - } - } catch (ParserConfigurationException e1) { - e1.printStackTrace(); - } - } - - @Override - public void process() { - if (getNrCounters() == -1) { - Element numCountersTag = newDoc.createElement(NUM_COUNTERS); - numCountersTag.setTextContent("error"); //$NON-NLS-1$ - newRoot.appendChild(numCountersTag); - return; - } - createHeaders(); - if (!hasTimerSupport() && oldRoot != null) { - createXML(); - } - } - - private void createHeaders() { - // number of counters - String numCounters = String.valueOf(getNrCounters()); - Element numCountersTag = newDoc.createElement(NUM_COUNTERS); - numCountersTag.setTextContent(String.valueOf(numCounters)); - newRoot.appendChild(numCountersTag); - - // cpu frequency - int cpuFreq = getCPUFrequency(); - Element cpuFreqTag = newDoc.createElement(CPU_FREQUENCY); - cpuFreqTag.setTextContent(String.valueOf(cpuFreq)); - newRoot.appendChild(cpuFreqTag); - - // file defaults - Element defaultsTag = newDoc.createElement(DEFAULTS); - - Element sampleDirTag = newDoc.createElement(SAMPLE_DIR); - sampleDirTag.setTextContent(SAMPLE_DIR_VAL); - defaultsTag.appendChild(sampleDirTag); - - Element lockFileTag = newDoc.createElement(LOCK_FILE); - lockFileTag.setTextContent(LOCK_FILE_VAL); - defaultsTag.appendChild(lockFileTag); - - Element logFileTag = newDoc.createElement(LOG_FILE); - logFileTag.setTextContent(LOG_FILE_VAL); - defaultsTag.appendChild(logFileTag); - - Element dumpStatusTag = newDoc.createElement(DUMP_STATUS); - dumpStatusTag.setTextContent(DUMP_STATUS_VAL); - defaultsTag.appendChild(dumpStatusTag); - - newRoot.appendChild(defaultsTag); - - // timer mode - Element timerModeTag = newDoc.createElement(TIMER_MODE); - timerModeTag.setTextContent(String.valueOf(hasTimerSupport())); - newRoot.appendChild(timerModeTag); - } - - /** - * @since 3.0 - */ - public static void setOprofileDir(String dir) { - DEV_OPROFILE = dir; - CPUTYPE = DEV_OPROFILE + "cpu_type"; //$NON-NLS-1$ - } - - /** - * Determine whether the cpu supports timer mode - * - * @return true if it is true, and false otherwise - */ - public static boolean hasTimerSupport() { - return hasTimerSupport; - } - - /** - * Set whether the cpu supports timer mode - */ - public static void checkTimerSupport() { - - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); - IFileStore fileStore = proxy.getResource(CPUTYPE); - if (fileStore.fetchInfo().exists()) { - try (InputStream is = fileStore.openInputStream(EFS.NONE, new NullProgressMonitor()); - BufferedReader bi = new BufferedReader(new InputStreamReader(is))) { - String cpuType = bi.readLine(); - if (cpuType.equals(TIMER)) { - hasTimerSupport = true; - } else { - hasTimerSupport = false; - } - } - } - } catch (FileNotFoundException e) { - hasTimerSupport = true; - } catch (IOException e) { - hasTimerSupport = true; - e.printStackTrace(); - } catch (CoreException e) { - e.printStackTrace(); - } - } - - /** - * Get the system's cpu frequency - * - * @return the system's cpu frequency - */ - private int getCPUFrequency() { - int val = 0; - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); - IFileStore fileStore = proxy.getResource(CPUINFO); - if (fileStore.fetchInfo().exists()) { - InputStream is = fileStore.openInputStream(EFS.NONE, new NullProgressMonitor()); - try (BufferedReader bi = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = bi.readLine()) != null) { - int index = line.indexOf(':'); - if (index != -1) { - String substr; - - // x86/ia64/x86_64 - if (line.startsWith("cpu MHz")) { //$NON-NLS-1$ - substr = line.substring(index + 1).trim(); - return (int) Double.parseDouble(substr); - // ppc/pc64 - } else if (line.startsWith("clock")) { //$NON-NLS-1$ - int MHzLoc = line.indexOf("MHz"); //$NON-NLS-1$ - substr = line.substring(index + 1, MHzLoc); - return (int) Double.parseDouble(substr); - // alpha - } else if (line.startsWith("cycle frequency [Hz]")) { //$NON-NLS-1$ - substr = line.substring(index + 1).trim(); - return (int) (Double.parseDouble(substr) / 1E6); - // sparc64 - } else if (line.startsWith("Cpu0ClkTck")) { //$NON-NLS-1$ - substr = line.substring(index + 1).trim(); - return (int) (Double.parseDouble(substr) / 1E6); - } - } - } - } catch (IOException | NumberFormatException e) { - e.printStackTrace(); - } - } - } catch (CoreException e) { - e.printStackTrace(); - } - - return val; - } - - /** - * Get the number of counters for the system - * - * @return the number of counters for the system - */ - private int getNrCounters() { - /* - * TODO: Originally the number of counters for a given arch were hard-coded in a - * list. This method may not be entirely correct, although much simpler. - */ - - /* - * Returning 1 for operf since it multiplexes the events through the counters - * and it is not possible to read data from opcontrol /dev dir if the opcontrol - * module was not initialized. TODO: Make possible to select more than one event - * in a tab. - */ - if ((OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY)) - || (OprofileProject.getProfilingBinary().equals(OprofileProject.OCOUNT_BINARY))) { - return 1; - } - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - final int MAXCPUS = Integer.MAX_VALUE; - for (int i = 0; i < MAXCPUS; i++) { - IFileStore fileStore = proxy.getResource(DEV_OPROFILE + i); - if (!fileStore.fetchInfo().exists()) { - return i; - } - } - return -1; - } - - private void createXML() { - - NodeList eventList = oldRoot.getElementsByTagName(EVENT); - Element newEventList = newDoc.createElement(EVENT_LIST); - - for (int i = 0; i < eventList.getLength(); i++) { - // get the event data - Element event = (Element) eventList.item(i); - String name = event.getAttribute(EVENT_NAME); - String desc = event.getAttribute(DESC); - String min_count = event.getAttribute(MIN_COUNT); - - // create the data for the new event - Element newEventTag = newDoc.createElement(EVENT); - Element nameTag = newDoc.createElement(NAME); - nameTag.setTextContent(name); - Element descTag = newDoc.createElement(DESCRIPTION); - descTag.setTextContent(desc); - Element minimumTag = newDoc.createElement(MINIMUM); - minimumTag.setTextContent(min_count); - - newEventTag.appendChild(nameTag); - newEventTag.appendChild(descTag); - newEventTag.appendChild(minimumTag); - - Element unitMaskTag = (Element) event.getElementsByTagName(UNIT_MASKS).item(0); - - // check if there are any unit masks for this event - if (unitMaskTag != null) { - String defaultVal = unitMaskTag.getAttribute(DEFAULT); - - // Get the unit mask type (compatible with 1.0 and 1.1 ophelp - // xml schemas) - String type = EventIdCache.getInstance().getUnitMaskType(name); - - Element newUnitMaskTag = newDoc.createElement(UNITMASK); - Element typeTag = newDoc.createElement(TYPE); - typeTag.setTextContent(type); - Element defaultValTag = newDoc.createElement(DEFAULT); - defaultValTag.setTextContent(defaultVal); - - newUnitMaskTag.appendChild(typeTag); - newUnitMaskTag.appendChild(defaultValTag); - newEventTag.appendChild(newUnitMaskTag); - - NodeList unitMaskList = unitMaskTag.getElementsByTagName(UNIT_MASK); - for (int j = 0; j < unitMaskList.getLength(); j++) { - Element unitMask = (Element) unitMaskList.item(j); - String maskVal = unitMask.getAttribute(MASK); - String maskDesc = unitMask.getAttribute(DESC); - String maskName = unitMask.getAttribute(NAME); - - Element newMask = newDoc.createElement(MASK); - Element newVal = newDoc.createElement(VALUE); - newVal.setTextContent(maskVal); - Element newDesc = newDoc.createElement(DESCRIPTION); - newDesc.setTextContent(maskDesc); - Element newName = newDoc.createElement(NAME); - newName.setTextContent(maskName); - - newMask.appendChild(newVal); - newMask.appendChild(newDesc); - newUnitMaskTag.appendChild(newMask); - } - // not unit mask for this event - } else { - String defaultVal = "0"; //$NON-NLS-1$ - String type = "mandatory"; //$NON-NLS-1$ - - Element newUnitMaskTag = newDoc.createElement(UNITMASK); - Element typeTag = newDoc.createElement(TYPE); - typeTag.setTextContent(type); - Element defaultValTag = newDoc.createElement(DEFAULT); - defaultValTag.setTextContent(defaultVal); - - newUnitMaskTag.appendChild(typeTag); - newUnitMaskTag.appendChild(defaultValTag); - newEventTag.appendChild(newUnitMaskTag); - - Element newMask = newDoc.createElement(MASK); - Element newVal = newDoc.createElement(VALUE); - newVal.setTextContent("0"); //$NON-NLS-1$ - Element newDesc = newDoc.createElement(DESCRIPTION); - newDesc.setTextContent("No unit mask"); //$NON-NLS-1$ - - newMask.appendChild(newVal); - newMask.appendChild(newDesc); - newUnitMaskTag.appendChild(newMask); - } - - newEventList.appendChild(newEventTag); - } - - for (int i = 0; i < getNrCounters(); i++) { - Element eventListTag = (Element) newEventList.cloneNode(true); - eventListTag.setAttribute(COUNTER, String.valueOf(i)); - newRoot.appendChild(eventListTag); - } - } - - @Override - public Document getDocument() { - return newDoc; - } - - /** - * @since 3.0 - */ - private void setEventIdCacheDoc(Element elem) { - EventIdCache.getInstance().setCacheDoc(elem); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/OpInfoProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/OpInfoProcessor.java deleted file mode 100644 index e70ca68fb..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/info/OpInfoProcessor.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.info; - -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpInfo; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * Opxml processor for the "info" command. - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class OpInfoProcessor extends XMLProcessor { - // Other XMLProcessors used by this processor - private DefaultsProcessor defaultsProc; - private EventListProcessor eventListProc; - - // XML tags processed by this processor - public static final String NUM_COUNTERS_TAG = "num-counters"; //$NON-NLS-1$ - public static final String DEFAULTS_TAG = "defaults"; //$NON-NLS-1$ - public static final String EVENT_LIST_TAG = "event-list"; //$NON-NLS-1$ - public static final String CPU_FREQUENCY_TAG = "cpu-frequency"; //$NON-NLS-1$ - public static final String TIMER_MODE = "timer-mode"; //$NON-NLS-1$ - - public OpInfoProcessor() { - defaultsProc = new DefaultsProcessor(); - eventListProc = new EventListProcessor(); - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(DEFAULTS_TAG)) { - OprofileSAXHandler.getInstance(callData).push(defaultsProc); - } else if (name.equals(EVENT_LIST_TAG)) { - OprofileSAXHandler.getInstance(callData).push(eventListProc); - eventListProc.startElement(name, attrs, callData); - } else { - super.startElement(name, attrs, callData); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(CPU_FREQUENCY_TAG)) { - double speed = Double.parseDouble(characters); - OpInfo info = (OpInfo) callData; - info.setCPUSpeed(speed); - } else if (name.equals(TIMER_MODE)) { - boolean timerMode = Boolean.parseBoolean(characters); - OpInfo info = (OpInfo) callData; - info.setTimerMode(timerMode); - } else if (name.equals(NUM_COUNTERS_TAG)) { - int numCounters = 0; - try { - numCounters = Integer.parseInt(characters); - } catch (NumberFormatException nfe) { - } - OpInfo info = (OpInfo) callData; - info.setNrCounters(numCounters); - } else if (name.equals(EVENT_LIST_TAG)) { - OpInfo info = (OpInfo) callData; - info.setEvents(eventListProc.getCounterNum(), eventListProc.getEvents()); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/DependentProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/DependentProcessor.java deleted file mode 100644 index 32f4ddfe4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/DependentProcessor.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata; - -import java.util.ArrayList; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * XML handler class for dependent images (<image> tags under <dependent>) - */ -public class DependentProcessor extends XMLProcessor { - // XML tags parsed by this processor - private static final String IMAGE_TAG = "image"; //$NON-NLS-1$ - private static final String SYMBOLS_TAG = "symbols"; //$NON-NLS-1$ - private static final String DEPENDENT_TAG = "dependent"; //$NON-NLS-1$ - - // attribute tags - private static final String ATTR_IMAGENAME = "name"; //$NON-NLS-1$ - private static final String ATTR_COUNT = "count"; //$NON-NLS-1$ - - /** - * the current image being constructed - */ - private OpModelImage image; - /** - * a list of all the dependent images - */ - private ArrayList<OpModelImage> imageList; - /** - * processor used for symbols of an image - */ - private SymbolsProcessor _symbolsProcessor = new SymbolsProcessor(); - - @Override - public void reset(Object callData) { - image = new OpModelImage(); - imageList = new ArrayList<>(); - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(IMAGE_TAG)) { - image.setName(validString(attrs.getValue(ATTR_IMAGENAME))); - image.setCount(Integer.parseInt(attrs.getValue(ATTR_COUNT))); - } else if (name.equals(SYMBOLS_TAG)) { - OprofileSAXHandler.getInstance(callData).push(_symbolsProcessor); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(IMAGE_TAG)) { - imageList.add(image); - image = new OpModelImage(); - } else if (name.equals(SYMBOLS_TAG)) { - image.setSymbols(_symbolsProcessor.getSymbols()); - } else if (name.equals(DEPENDENT_TAG)) { - OprofileSAXHandler.getInstance(callData).pop(DEPENDENT_TAG); - } - } - - public OpModelImage[] getImages() { - OpModelImage[] images = new OpModelImage[imageList.size()]; - imageList.toArray(images); - return images; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataAdapter.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataAdapter.java deleted file mode 100644 index 9363ec137..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataAdapter.java +++ /dev/null @@ -1,380 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.TreeSet; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.linuxtools.internal.oprofile.core.opxml.AbstractDataAdapter; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.info.InfoAdapter; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * This class takes the XML that is output from 'opreport -X --details' for the - * current session, and uses that data to modify it into the format expected by - * the SAX parser. - */ -public class ModelDataAdapter extends AbstractDataAdapter { - - public final static String ID = "id"; //$NON-NLS-1$ - public final static String IDREF = "idref"; //$NON-NLS-1$ - public final static String NAME = "name"; //$NON-NLS-1$ - public final static String COUNT = "count"; //$NON-NLS-1$ - public final static String SAMPLE = "sample"; //$NON-NLS-1$ - public final static String LINE = "line"; //$NON-NLS-1$ - - public final static String SYMBOL_DATA = "symboldata"; //$NON-NLS-1$ - public final static String SYMBOL_DETAILS = "symboldetails"; //$NON-NLS-1$ - public final static String SYMBOL = "symbol"; //$NON-NLS-1$ - - public final static String FILE = "file"; //$NON-NLS-1$ - - public final static String SETUP = "setup"; //$NON-NLS-1$ - public final static String EVENT_SETUP = "eventsetup"; //$NON-NLS-1$ - public final static String TIMER_SETUP = "timersetup"; //$NON-NLS-1$ - public final static String SETUP_COUNT = "setupcount"; //$NON-NLS-1$ - public final static String EVENT_NAME = "eventname"; //$NON-NLS-1$ - public final static String RTC_INTERRUPTS = "rtcinterrupts"; //$NON-NLS-1$ - - public final static String PROFILE = "profile"; //$NON-NLS-1$ - public final static String MODEL_DATA = "model-data"; //$NON-NLS-1$ - - public final static String MODULE = "module"; //$NON-NLS-1$ - public final static String DEPENDENT = "dependent"; //$NON-NLS-1$ - - public final static String BINARY = "binary"; //$NON-NLS-1$ - public final static String IMAGE = "image"; //$NON-NLS-1$ - - public final static String SYMBOLS = "symbols"; //$NON-NLS-1$ - public final static String SYMBOL_TABLE = "symboltable"; //$NON-NLS-1$ - public final static String DETAIL_TABLE = "detailtable"; //$NON-NLS-1$ - - public final static String DETAIL_DATA = "detaildata"; //$NON-NLS-1$ - - private boolean isParseable; - private Document newDoc; // the document we intend to build - private Element oldRoot; // the root of the document with data from opreport - private Element newRoot; // the root of the document we intent to build - - /** - * Constructor to the ModelAdapter class - * - * @param is The input stream to be parsed - */ - public ModelDataAdapter(InputStream is) { - isParseable = true; - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - try { - Document oldDoc = builder.parse(is); - Element elem = (Element) oldDoc.getElementsByTagName(PROFILE).item(0); - oldRoot = elem; - - newDoc = builder.newDocument(); - newRoot = newDoc.createElement(MODEL_DATA); - newDoc.appendChild(newRoot); - } catch (IOException e) { - isParseable = false; - } catch (SAXException e) { - isParseable = false; - } - } catch (ParserConfigurationException e1) { - e1.printStackTrace(); - } - } - - @Override - public void process() { - createXML(); - } - - private void createXML() { - - // get the binary name and the image count - Element oldImage = (Element) oldRoot.getElementsByTagName(BINARY).item(0); - Element newImage = newDoc.createElement(IMAGE); - - String binName = oldImage.getAttribute(NAME); - newImage.setAttribute(NAME, binName); - - Element countTag = (Element) oldImage.getElementsByTagName(COUNT).item(0); - String imageCount = countTag.getTextContent().trim(); - newImage.setAttribute(COUNT, imageCount); - - // There is no setup count in timer mode - if (!InfoAdapter.hasTimerSupport()) { - // get the count that was used to profile - Element setupTag = (Element) oldRoot.getElementsByTagName(SETUP).item(0); - Element eventSetupTag = (Element) setupTag.getElementsByTagName(EVENT_SETUP).item(0); - String setupcount = eventSetupTag.getAttribute(SETUP_COUNT); - newImage.setAttribute(SETUP_COUNT, setupcount); - } - - // these elements contain the data needed to populate the new symbol table - Element oldSymbolTableTag = (Element) oldRoot.getElementsByTagName(SYMBOL_TABLE).item(0); - NodeList oldSymbolDataList = oldSymbolTableTag.getElementsByTagName(SYMBOL_DATA); - - Element oldDetailTableTag = (Element) oldRoot.getElementsByTagName(DETAIL_TABLE).item(0); - NodeList oldDetailTableList = oldDetailTableTag.getElementsByTagName(SYMBOL_DETAILS); - - // parse the data into HashMaps for O(1) lookup time, as opposed to O(n). - HashMap<String, HashMap<String, String>> oldSymbolDataListMap = parseDataList(oldSymbolDataList); - HashMap<String, NodeList> oldDetailTableListMap = parseDetailTable(oldDetailTableList); - - // An ArrayList to hold the binary and other modules - ArrayList<Element> oldImageList = new ArrayList<>(); - // The first element is the original binary! - oldImageList.add(oldImage); - - NodeList oldModuleList = oldImage.getElementsByTagName(MODULE); - // Set up the dependent tag for any modules run by this binary - Element dependentTag = newDoc.createElement(DEPENDENT); - if (oldModuleList.getLength() > 0) { - dependentTag.setAttribute(COUNT, "0"); //$NON-NLS-1$ - - for (int t = 0; t < oldModuleList.getLength(); t++) { - oldImageList.add((Element) oldModuleList.item(t)); - } - } - - // iterate through all (binary/modules) - for (Element oldImg : oldImageList) { - Element newImg; - if (oldImg.getTagName().equals(BINARY)) { - newImg = newImage; - } else { - newImg = newDoc.createElement(IMAGE); - - String imgName = oldImg.getAttribute(NAME); - newImg.setAttribute(NAME, imgName); - - Element modCountTag = (Element) oldImg.getElementsByTagName(COUNT).item(0); - String imgCount = modCountTag.getTextContent().trim(); - newImg.setAttribute(COUNT, imgCount); - } - - Element newSymbolsTag = newDoc.createElement(SYMBOLS); - - // these elements contain the data needed to populate the new symbol table - NodeList oldSymbolList = oldImg.getElementsByTagName(SYMBOL); - - // iterate through all symbols - for (int i = 0; i < oldSymbolList.getLength(); i++) { - Element oldSymbol = (Element) oldSymbolList.item(i); - - /** - * The original binary is a parent for all symbols We only want library function - * calls under their respective modules, and not under the original binary as - * well. - */ - if (!oldSymbol.getParentNode().isSameNode(oldImg)) { - continue; - } - - Element newSymbol = newDoc.createElement(SYMBOL); - String idref = oldSymbol.getAttribute(IDREF); - String symbolCount = ((Element) oldSymbol.getElementsByTagName(COUNT).item(0)).getTextContent().trim(); - newSymbol.setAttribute(COUNT, symbolCount); - - // get the symboltable entry corresponding to the id of this symbol - HashMap<String, String> symbolData = oldSymbolDataListMap.get(idref); - newSymbol.setAttribute(NAME, symbolData.get(NAME)); - newSymbol.setAttribute(FILE, symbolData.get(FILE)); - newSymbol.setAttribute(LINE, symbolData.get(LINE)); - - // get the symboldetails entry corresponding to the id of this symbol - NodeList detailDataList = oldDetailTableListMap.get(idref); - - // go through the detail data of each symbol's details - HashMap<String, Element> tmp = new HashMap<>(); - // temporary place to store the elements for sorting - TreeSet<Element> sorted = new TreeSet<>(SAMPLE_COUNT_ORDER); - for (int l = 0; l < detailDataList.getLength(); l++) { - - Element detailData = (Element) detailDataList.item(l); - String sampleFile = detailData.getAttribute(FILE); - String sampleLine = detailData.getAttribute(LINE); - - // The sample has a line number but no file - // This means that the file is the same as the symbol (parent) - if (sampleFile.equals("") && !sampleLine.isEmpty()) { //$NON-NLS-1$ $NON-NLS-2$ - sampleFile = symbolData.get(FILE); - } else { - if (sampleFile.equals("")) { //$NON-NLS-1$ - sampleFile = "??"; //$NON-NLS-1$ - } - if (sampleLine.equals("")) { //$NON-NLS-1$ - sampleLine = "0"; //$NON-NLS-1$ - } - } - Element detailDataCount = (Element) detailData.getElementsByTagName(COUNT).item(0); - String count = detailDataCount.getTextContent().trim(); - - // if a sample at this line already exists then increase count for that line. - if (tmp.containsKey(sampleLine)) { - Element elem = (Element) tmp.get(sampleLine).getElementsByTagName(COUNT).item(0); - int val = Integer.parseInt(elem.getTextContent().trim()) + Integer.parseInt(count); - elem.setTextContent(String.valueOf(val)); - } else { - Element sampleTag = newDoc.createElement(SAMPLE); - - Element fileTag = newDoc.createElement(FILE); - fileTag.setTextContent(sampleFile); - - Element lineTag = newDoc.createElement(LINE); - lineTag.setTextContent(sampleLine); - - Element sampleCountTag = newDoc.createElement(COUNT); - sampleCountTag.setTextContent(count); - - sampleTag.appendChild(fileTag); - sampleTag.appendChild(lineTag); - sampleTag.appendChild(sampleCountTag); - - tmp.put(sampleLine, sampleTag); - } - } - - // add the elements to the sorter - for (Element elem : tmp.values()) { - sorted.add(elem); - } - - // append the elements in sorted order - for (Element e : sorted) { - newSymbol.appendChild(e); - } - - newSymbolsTag.appendChild(newSymbol); - } - - newImg.appendChild(newSymbolsTag); - // If this is a module, attach it to the dependent tag - if (oldImg.getTagName().equals(MODULE)) { - dependentTag.appendChild(newImg); - int currVal = Integer.parseInt(dependentTag.getAttribute(COUNT)); - int val = Integer.parseInt(newImg.getAttribute(COUNT)); - dependentTag.setAttribute(COUNT, String.valueOf(currVal + val)); - } else { - newRoot.appendChild(newImg); - } - } - - if (oldModuleList.getLength() > 0) { - newImage.appendChild(dependentTag); - } - - } - - /** - * - * @param oldDetailTableList the list of 'symboldetails' tags within detailtable - * @return a HashMap where the key is a function id and the value is a NodeList - * containing a list of the 'detaildata' tags that contain sample - * information. - */ - private HashMap<String, NodeList> parseDetailTable(NodeList oldDetailTableList) { - HashMap<String, NodeList> ret = new HashMap<>(); - for (int i = 0; i < oldDetailTableList.getLength(); i++) { - Element symbolDetails = (Element) oldDetailTableList.item(i); - String id = symbolDetails.getAttribute(ID); - NodeList detailDataList = symbolDetails.getElementsByTagName(DETAIL_DATA); - ret.put(id, detailDataList); - } - return ret; - } - - /** - * - * @param oldSymbolDataList the list of 'symboldata' tags within symboltable - * @return a Hashmap where the key is a function id and the value is a HashMap - * with various parameters of data - */ - private HashMap<String, HashMap<String, String>> parseDataList(NodeList oldSymbolDataList) { - HashMap<String, HashMap<String, String>> ret = new HashMap<>(); - for (int j = 0; j < oldSymbolDataList.getLength(); j++) { - HashMap<String, String> tmp = new HashMap<>(); - Element symbolData = (Element) oldSymbolDataList.item(j); - String id = symbolData.getAttribute(ID); - String name = symbolData.getAttribute(NAME); - String file = symbolData.getAttribute(FILE); - if (file.equals("")) { //$NON-NLS-1$ - file = "??"; //$NON-NLS-1$ - } - String line = symbolData.getAttribute(LINE); - if (line.equals("")) { //$NON-NLS-1$ - line = "0"; //$NON-NLS-1$ - } - tmp.put(NAME, name); - tmp.put(FILE, file); - tmp.put(LINE, line); - ret.put(id, tmp); - } - return ret; - } - - @Override - public Document getDocument() { - return newDoc; - } - - /** - * Helper class to sort the samples of a given symbol in descending order from - * largest to smallest - */ - private static final Comparator<Element> SAMPLE_COUNT_ORDER = new Comparator<Element>() { - @Override - public int compare(Element a, Element b) { - // sort from largest to smallest count in descending order - // items with the same count are sorted by line number from smallest - // to largest in descending order - Element a_countTag = (Element) a.getElementsByTagName(COUNT).item(0); - Element b_countTag = (Element) b.getElementsByTagName(COUNT).item(0); - Element a_LineTag = (Element) a.getElementsByTagName(LINE).item(0); - Element b_LineTag = (Element) b.getElementsByTagName(LINE).item(0); - - Integer a_count = Integer.parseInt(a_countTag.getTextContent().trim()); - Integer b_count = Integer.parseInt(b_countTag.getTextContent().trim()); - Integer a_line = Integer.parseInt(a_LineTag.getTextContent().trim()); - Integer b_line = Integer.parseInt(b_LineTag.getTextContent().trim()); - - if (a_count.compareTo(b_count) == 0) { - return a_line.compareTo(b_line); - } - return -a_count.compareTo(b_count); - } - }; - - /** - * Returns if parseable - * - * @return isParseable boolean variable - */ - public boolean isParseable() { - return isParseable; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataProcessor.java deleted file mode 100644 index d44a51078..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/ModelDataProcessor.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * A processor for `opxml samples`. - */ -public class ModelDataProcessor extends XMLProcessor { - // The resulting image compiled by the processor to be used by the caller. - public static class CallData { - public OpModelImage opModelImage; - - public CallData(OpModelImage im) { - opModelImage = im; - } - } - - // XML tags parsed by this processor - private static final String IMAGE_TAG = "image"; //$NON-NLS-1$ - private static final String SYMBOLS_TAG = "symbols"; //$NON-NLS-1$ - private static final String DEPENDENT_TAG = "dependent"; //$NON-NLS-1$ - - // attribute tags - private static final String ATTR_IMAGENAME = "name"; //$NON-NLS-1$ - private static final String ATTR_COUNT = "count"; //$NON-NLS-1$ - private static final String ATTR_DEPCOUNT = "count"; //$NON-NLS-1$ - - // the current image being constructed - private OpModelImage image; - private int imgSeen; // for ensuring image singleton-ness - - // processors used for symbols and dependent images - private SymbolsProcessor _symbolsProcessor = new SymbolsProcessor(); - private DependentProcessor _dependentProcessor = new DependentProcessor(); - - @Override - public void reset(Object callData) { - image = ((CallData) callData).opModelImage; - imgSeen = 0; - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(IMAGE_TAG)) { - if (imgSeen == 0) { - image.setName(validString(attrs.getValue(ATTR_IMAGENAME))); - image.setCount(Integer.parseInt(attrs.getValue(ATTR_COUNT))); - } - - imgSeen++; - } else if (name.equals(SYMBOLS_TAG)) { - OprofileSAXHandler.getInstance(callData).push(_symbolsProcessor); - } else if (name.equals(DEPENDENT_TAG)) { - image.setDepCount(Integer.parseInt(attrs.getValue(ATTR_DEPCOUNT))); - OprofileSAXHandler.getInstance(callData).push(_dependentProcessor); - } else { - super.startElement(name, attrs, callData); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(IMAGE_TAG)) { - if (imgSeen > 1) { - // should only ever be one image, otherwise oprofile was run - // outside of eclipse and the ui would not handle it properly - image.setCount(OpModelImage.IMAGE_PARSE_ERROR); - image.setDepCount(0); - image.setDependents(null); - image.setSymbols(null); - image.setName(""); //$NON-NLS-1$ - } - } else if (name.equals(SYMBOLS_TAG)) { - image.setSymbols(_symbolsProcessor.getSymbols()); - } else if (name.equals(DEPENDENT_TAG)) { - image.setDependents(_dependentProcessor.getImages()); - } else { - super.endElement(name, callData); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SamplesProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SamplesProcessor.java deleted file mode 100644 index ab3272c6c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SamplesProcessor.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * - Note: the original SamplesProcessor class was removed, this is a new - * implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata; - -import java.util.ArrayList; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSample; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; - -/** - * XML handler class for <sample> tags (individual samples). - */ -public class SamplesProcessor extends XMLProcessor { - // XML tags parsed by this processor - private static final String SAMPLE_TAG = "sample"; //$NON-NLS-1$ - private static final String COUNT_TAG = "count"; //$NON-NLS-1$ - private static final String LINE_TAG = "line"; //$NON-NLS-1$ - private static final String SYMBOL_TAG = "symbol"; //$NON-NLS-1$ - private static final String FILE_TAG = "file"; //$NON-NLS-1$ - - // the current sample being constructed - private OpModelSample sample; - // a list of all samples (for this symbol) - private ArrayList<OpModelSample> sampleList; - - @Override - public void reset(Object callData) { - sample = new OpModelSample(); - sampleList = new ArrayList<>(); - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(COUNT_TAG)) { - sample.setCount(Integer.parseInt(characters)); - } else if (name.equals(LINE_TAG)) { - sample.setLine(Integer.parseInt(characters)); - } else if (name.equals(FILE_TAG)) { - sample.setFilePath(characters); - } else if (name.equals(SAMPLE_TAG)) { - sampleList.add(sample); - sample = new OpModelSample(); - } else if (name.equals(SYMBOL_TAG)) { - OprofileSAXHandler.getInstance(callData).pop(SYMBOL_TAG); - } - } - - /** - * Return oprofile samples - * - * @return samples An array of oprofile samples - */ - public OpModelSample[] getSamples() { - OpModelSample[] samples = new OpModelSample[sampleList.size()]; - sampleList.toArray(samples); - return samples; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SymbolsProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SymbolsProcessor.java deleted file mode 100644 index 6a78b272f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/modeldata/SymbolsProcessor.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata; - -import java.util.ArrayList; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSymbol; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * A processor for the <symbols> tag from `opxml samples ..` - */ -public class SymbolsProcessor extends XMLProcessor { - // XML tags parsed by this processor - private static final String SYMBOLS_TAG = "symbols"; //$NON-NLS-1$ - private static final String SYMBOL_TAG = "symbol"; //$NON-NLS-1$ - private static final String SAMPLE_TAG = "sample"; //$NON-NLS-1$ - - // attribute tags - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_FILE = "file"; //$NON-NLS-1$ - private static final String ATTR_COUNT = "count"; //$NON-NLS-1$ - private static final String ATTR_LINE = "line"; //$NON-NLS-1$ - - /** - * The current symbol being constructed - */ - private OpModelSymbol symbol; - // all the symbols in this <symbols> tag, to be returned to the calling - // ModelDataProcessor - private ArrayList<OpModelSymbol> symbols; - - /** - * The processor used for individual samples - */ - private SamplesProcessor samplesProcessor = new SamplesProcessor(); - - @Override - public void reset(Object callData) { - symbol = new OpModelSymbol(); - symbols = new ArrayList<>(); - } - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(SYMBOL_TAG)) { - symbol.setName(validString(attrs.getValue(ATTR_NAME))); - symbol.setCount(Integer.parseInt(attrs.getValue(ATTR_COUNT))); - symbol.setFilePath(validString(attrs.getValue(ATTR_FILE))); - symbol.setLine(Integer.parseInt(attrs.getValue(ATTR_LINE))); - } else if (name.equals(SAMPLE_TAG)) { - OprofileSAXHandler.getInstance(callData).push(samplesProcessor); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(SYMBOL_TAG)) { - symbol.setSamples(samplesProcessor.getSamples()); - symbols.add(symbol); - symbol = new OpModelSymbol(); - } else if (name.equals(SYMBOLS_TAG)) { - OprofileSAXHandler.getInstance(callData).pop(SYMBOLS_TAG); - } - } - - /** - * Return all parsed samples - * - * @return s the parsed symbols - */ - public OpModelSymbol[] getSymbols() { - OpModelSymbol[] s = new OpModelSymbol[symbols.size()]; - symbols.toArray(s); - return s; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionManager.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionManager.java deleted file mode 100644 index a43253804..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionManager.java +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * This class manipulates the XML data output from the command 'opxml sessions' - */ -public class SessionManager { - public final static String PLUGIN_LOC = OprofileCorePlugin.getDefault().getStateLocation().toOSString(); - public final static String SESSIONS = "sessions"; //$NON-NLS-1$ - public final static String EVENT = "event"; //$NON-NLS-1$ - public final static String SESSION = "session"; //$NON-NLS-1$ - public final static String NAME = "name"; //$NON-NLS-1$ - public final static String CURRENT = "current"; //$NON-NLS-1$ - public final static String OPXML_PREFIX = PLUGIN_LOC + "/opxml_"; //$NON-NLS-1$ - public final static String SESSION_LOCATION = OPXML_PREFIX + SESSIONS; - public final static String MODEL_DATA = "model-data"; //$NON-NLS-1$ - - public Document doc; - public Element root; - public String absfilePath; - - public SessionManager(String filePath) { - this(new File(filePath)); - absfilePath = filePath; - write(); - } - - /** - * Session manager class constructor to manipulate the XML data - * - * @param file the xml file - */ - public SessionManager(File file) { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - if (!file.exists()) { - file.createNewFile(); - doc = builder.newDocument(); - root = doc.createElement(SESSIONS); - doc.appendChild(root); - } else { - InputStream is = new FileInputStream(file); - doc = builder.parse(is); - Element elem = (Element) doc.getElementsByTagName(SESSIONS).item(0); - root = elem; - } - } catch (ParserConfigurationException | SAXException | IOException e) { - e.printStackTrace(); - } - } - - /** - * Add a session to the specified event element if it does not exist. - * - * @param sessionName the name of the session - * @param eventName the name of the event - */ - public void addSession(String sessionName, String eventName) { - Element event = null; - Element session = find(root, SESSION, NAME, sessionName); - if (session == null) { - session = doc.createElement(SESSION); - session.setAttribute(NAME, sessionName); - root.appendChild(session); - } else { - event = find(session, EVENT, NAME, eventName); - } - - if (event == null) { - event = doc.createElement(EVENT); - event.setAttribute(NAME, eventName); - session.appendChild(event); - } - } - - /** - * Check if a session exists - * - * @param sessionName the name of the session - * @return true if the session exists, otherwise false - */ - public boolean existsSession(String sessionName) { - return find(root, SESSION, NAME, sessionName) != null ? true : false; - } - - /** - * Find an element in the XML - * - * @param elem the element to look under - * @param tagName the name of the tag - * @param attName the name of the attribute - * @param attVal the name of the attribute value - * @return the element that matches the search, or null if none is found. - */ - private Element find(Element elem, String tagName, String attName, String attVal) { - NodeList list = elem.getElementsByTagName(tagName); - for (int i = 0; i < list.getLength(); i++) { - if (list.item(i) instanceof Element) { - Element e = (Element) list.item(i); - if (e.getAttribute(attName).equals(attVal)) { - return e; - } - } - } - return null; - } - - /** - * Remove all sessions under any event that have the name 'current' - */ - public void removeAllCurrentSessions() { - NodeList sessionList = root.getElementsByTagName(SESSION); - for (int i = 0; i < sessionList.getLength(); i++) { - Element session = (Element) sessionList.item(i); - String sessionName = session.getAttribute(NAME); - if (CURRENT.equals(sessionName)) { - NodeList eventList = session.getElementsByTagName(EVENT); - for (int j = 0; j < eventList.getLength(); j++) { - Element event = (Element) eventList.item(j); - String eventName = event.getAttribute(NAME); - session.removeChild(event); - File file = new File(SessionManager.OPXML_PREFIX + SessionManager.MODEL_DATA + eventName - + SessionManager.CURRENT); - file.delete(); - if (sessionList.getLength() == 0) { - root.removeChild(session); - } - } - } - } - } - - /** - * Remove a session named sessionName that is under eventName if it exists. - * - * @param sessionName - * @param eventName - */ - public void removeSession(String sessionName, String eventName) { - NodeList list = root.getElementsByTagName(SESSION); - for (int i = 0; i < list.getLength(); i++) { - - if (list.item(i) instanceof Element) { - Element session = (Element) list.item(i); - if (session.getAttribute(NAME).equals(sessionName)) { - Element event = find((Element) list.item(i), EVENT, NAME, eventName); - if (event != null) { - removeSessionHelper(sessionName, event); - } - } - } - } - } - - /** - * remove event elem for given session sessionName , also remove session if - * there is no event under it. - * - * @param sessionName - * @param elem - * - */ - private void removeSessionHelper(String sessionName, Element elem) { - NodeList list = root.getElementsByTagName(SESSION); - for (int i = 0; i < list.getLength(); i++) { - if (list.item(i) instanceof Element) { - Element e = (Element) list.item(i); - if (e.getAttribute(NAME).equals(sessionName)) { - NodeList events = e.getElementsByTagName(EVENT); - for (int j = 0; j < events.getLength(); j++) { - Element event = (Element) events.item(j); - if (event.getAttribute(NAME).equals(elem.getAttribute(NAME))) { - e.removeChild(event); - } - if (events.getLength() == 0) { - root.removeChild(e); - } - } - } - } - } - } - - /** - * Return a list of the events run with the given session - * - * @param sessionName the name of the session - * @return A String ArrayList of event names that were run with the given - * session. - */ - public ArrayList<String> getSessionEvents(String sessionName) { - ArrayList<String> ret = new ArrayList<>(); - NodeList eventList = root.getElementsByTagName(SESSION); - - for (int i = 0; i < eventList.getLength(); i++) { - if (eventList.item(i) instanceof Element) { - Element event = ((Element) eventList.item(i)); - if (event.getAttribute(NAME).equals(sessionName)) { - - NodeList sessionList = event.getElementsByTagName(EVENT); - for (int j = 0; j < sessionList.getLength(); j++) { - if (sessionList.item(j) instanceof Element) { - Element session = ((Element) sessionList.item(j)); - ret.add(session.getAttribute(NAME)); - } - } - } - } - } - return ret; - } - - /** - * Write back to the same file, that the data was loaded from. - */ - public void write() { - writeToFile(absfilePath); - } - - /** - * Write the contents of the given Document to a file. - */ - private void writeToFile(String filePath) { - Source source = new DOMSource(doc); - Result result = new StreamResult(new File(filePath)); - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer xformer; - try { - xformer = factory.newTransformer(); - xformer.transform(source, result); - } catch (TransformerException e) { - e.printStackTrace(); - } - } - - public static void saveSession(String name) { - SessionManager sessMan; - try { - sessMan = new SessionManager(SessionManager.SESSION_LOCATION); - for (String event : sessMan.getSessionEvents(SessionManager.CURRENT)) { - sessMan.addSession(name, event); - String oldFile = SessionManager.OPXML_PREFIX + SessionManager.MODEL_DATA + event - + SessionManager.CURRENT; - String newFile = SessionManager.OPXML_PREFIX + SessionManager.MODEL_DATA + event + name; - Process p = Runtime.getRuntime().exec("cp " + oldFile + " " + newFile); //$NON-NLS-1$ //$NON-NLS-2$ - p.waitFor(); - } - sessMan.write(); - } catch (FileNotFoundException e) { - // intentionally blank - // during a save, the session file will exist - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } - - public static void deleteSession(String sessionName, String eventName) { - File file = new File(SessionManager.OPXML_PREFIX + SessionManager.MODEL_DATA + eventName + sessionName); - file.delete(); - SessionManager sessMan = new SessionManager(SessionManager.SESSION_LOCATION); - sessMan.removeSession(sessionName, eventName); - sessMan.write(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionsProcessor.java b/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionsProcessor.java deleted file mode 100644 index fd7602ebd..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/src/org/eclipse/linuxtools/internal/oprofile/core/opxml/sessions/SessionsProcessor.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions; - -import java.util.ArrayList; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.XMLProcessor; -import org.xml.sax.Attributes; - -/** - * A processor for sessions. - * - * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner - */ -public class SessionsProcessor extends XMLProcessor { - public static class SessionInfo { - /** - * A list of Session as well as Events under each of them - */ - public ArrayList<OpModelSession> list; - - public SessionInfo(ArrayList<OpModelSession> session) { - this.list = session; - } - } - - // XML tags recognized by this processor - public static final String SESSION_TAG = "session"; //$NON-NLS-1$ - private static final String SESSION_NAME_ATTR = "name"; //$NON-NLS-1$ - public static final String SAMPLE_COUNT_TAG = "count"; //$NON-NLS-1$ - public static final String EVENT_TAG = "event"; //$NON-NLS-1$ - private static final String EVENT_NAME_ATTR = "name"; //$NON-NLS-1$ - - /** - * The current session being constructed - */ - private OpModelSession currentSession; - - /** - * The current event being constructed - */ - private OpModelEvent currentEvent; - - /** - * A list of all sessions - */ - private ArrayList<OpModelEvent> eventList; - - @Override - public void startElement(String name, Attributes attrs, Object callData) { - if (name.equals(SESSION_TAG)) { - String sessionName = validString(attrs.getValue(SESSION_NAME_ATTR)); - currentSession = new OpModelSession(sessionName); - eventList = new ArrayList<>(); - } else if (name.equals(EVENT_TAG)) { - String eventName = attrs.getValue(EVENT_NAME_ATTR); - currentEvent = new OpModelEvent(currentSession, eventName); - } else { - super.startElement(name, attrs, callData); - } - } - - @Override - public void endElement(String name, Object callData) { - if (name.equals(SESSION_TAG)) { - // Got end of session -- save in session list - OpModelEvent[] s = new OpModelEvent[eventList.size()]; - eventList.toArray(s); - currentSession.setEvents(s); - SessionInfo info = (SessionInfo) callData; - info.list.add(currentSession); - currentSession = null; - eventList = null; - } else if (name.equals(EVENT_TAG)) { - // Got end of event -- save session list into current OpModelEvent and - // save current event into call data - eventList.add(currentEvent); - currentEvent = null; - } else { - super.endElement(name, callData); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.doc/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/.project b/oprofile/org.eclipse.linuxtools.oprofile.doc/.project deleted file mode 100644 index db498cc7d..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/.project +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.doc</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/oprofile/org.eclipse.linuxtools.oprofile.doc/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.doc/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 0d476152a..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -#Tue Apr 14 09:48:05 EDT 2009 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Example-Project.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Example-Project.html deleted file mode 100644 index e42a5716b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Example-Project.html +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Example Project</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Example Project</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Remote-OProfile.html" title="Remote OProfile"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Troubleshooting.html" title="Troubleshooting"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Remote OProfile</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Troubleshooting</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Example_Project">Example Project</h1> - <p>If you wish to try the documented steps in this article with a test project, you can download the same sample project used to create the screenshots at the following link:</p> - <p> - <a href="http://wiki.eclipse.org/images/7/77/Eclipse-oprofile_testproj_factorial.zip">http://wiki.eclipse.org/images/7/77/Eclipse-oprofile_testproj_factorial.zip</a> - </p> - <p>To import the project into the Eclipse workspace, navigate to <u>File</u> > <u>Import</u> > <u>General</u> > <u>Existing Projects into Workspace</u>. Then, choose <u>Select archive file</u> and use the <u>Browse</u> button to point to the location of the sample project on your file system.</p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Remote-OProfile.html" title="Remote OProfile"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Troubleshooting.html" title="Troubleshooting"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Remote OProfile</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Troubleshooting</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html deleted file mode 100644 index b7fc17726..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html +++ /dev/null @@ -1,155 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Installation and Set-Up</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Installation and Set-Up</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Launching-A-Profile.html" title="Launching A Profile"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">OProfile User Guide</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Launching A Profile</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Installation_and_Set-Up">Installation and Set-Up</h1> - <p>The easiest way to install the OProfile plug-in for Eclipse is through the - <b> - <i>Software Updates and Add-ons </i> - </b> menu. For information on how to use this menu, refer to - <a href="http://wiki.eclipse.org/Linux_Tools_Project/PluginInstallHelp#Installing_Updates_From_the_Linux_Tools_Update_Site">http://wiki.eclipse.org/Linux_Tools_Project/PluginInstallHelp#Installing_Updates_From_the_Linux_Tools_Update_Site</a>. - </p> - <p>Unlike most Eclipse plug-ins, the OProfile plug-in requires some configuration after installation. Note that this configuration process takes only a few simple steps, and only needs to be done once.</p> - <p>After the plug-in is first installed, performing a profile run with OProfile will bring up a dialog similar to the following:</p> - <p> - <img border="0" src="images/Screenshot-installscript_error_dialog.png"/> - </p> - <p>As the dialog suggests, you must run the supplied install script; this script will allow the OProfile plug-in to perform OProfile tasks as root (since OProfile cannot be run as an unprivileged user). The steps below are the same as the dialog but described in more detail.</p> - <p>To avoid having to perform the installation setup users can create a launch configuration for their project that uses 'operf' instead of 'opcontrol'. Simply navigate to either the Profiling/Profiling Tools launch configuration dialog and create an OProfile launch configuration. Select the OProfile - <a href="Profiling-Configuration.html#Global_Settings">Global Settings</a> tab, and select 'operf' from the 'Profile With' combo box. In future releases, 'operf' will become the default option. - </p> - <h2 id="Step_1_-_Locate_the_Installation_Scripts">Step 1 - Locate the Installation Scripts</h2> - <p>Open up a terminal and locate the - <i><code>natives/linux/scripts</code></i> subdirectory, which is found in the - <i><code>org.eclipse.linuxtools.oprofile.core</code></i> plug-in directory. The location of this plug-in directory depends on how you installed Eclipse. - </p> - <ul> - <li>If you are using a distro-supplied version of Eclipse and installed the plug-in via the update site, the plug-in directory will most likely be under - <i><code>~/.eclipse</code></i>. To find the exact location of the plug-in directory in this case, use the following command: - </li> - <li><code>find ~/.eclipse -name 'org.eclipse.linuxtools.oprofile.core_*'</code></li> - <li>Alternatively, if you are using an extracted tarball of Eclipse (i.e. you downloaded a - <i><code>.tar.gz</code></i> from - <a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>), then the plug-in will most likely be in the <code>plugins</code> sub-directory of where you extracted it. - </li> - <li>For example, if you extracted the tarball to <code> - <i>/home/ksebasti</i></code>, your Eclipse installation would be in <code> - <i>/home/ksebasti/eclipse</i></code>. In this case, you should use the following command to find the exact location of the plug-in directory: - </li> - <li><code>find /home/ksebasti/eclipse -name 'org.eclipse.linuxtools.oprofile.core_*'</code></li> - </ul> - <p> - <b>Note:</b> In both cases, the quotes (') and asterisk (*) are necessary. - </p> - <p>Sample output will look like this:</p> - <pre>$ find /home/ksebasti/eclipse -name 'org.eclipse.linuxtools.oprofile.core_*' -/home/ksebasti/eclipse/plugins/org.eclipse.linuxtools.oprofile.core_0.2.0.200904131051 -</pre> - <p>Once you find the plug-in directory, navigate to its <code> - <i>natives/linux/scripts</i></code> subdirectory. Using our previous example: - </p> - <pre>$ cd /home/ksebasti/eclipse/plugins/org.eclipse.linuxtools.oprofile.core_0.2.0.200904131051/natives/linux/scripts -</pre> - <p>The <code> - <i>natives/linux/scripts</i></code> subdirectory contains the installation scripts you will need to run in order to allow OProfile to run as root. - </p> - <h2 id="Step_2_-_Choose_Which_Installation_Script_To_Run">Step 2 - Choose Which Installation Script To Run</h2> - <p>The - <i><code>natives/linux/scripts</code></i> subdirectory contains two scripts: - <i><code>install.sh</code></i>, and - <i><code>install-noconsolehelper.sh</code></i>. These scripts perform sanity checks to ensure OProfile is installed. The difference is in how root authentication with the plug-in is set up. - </p> - <ul> - <li> - <i><code>install.sh</code></i> uses PolicyKit. This is the default and recommended method for root authentication. When an OProfile task is required, you will be presented with a dialog to enter the root password. If PolicyKit is not installed on the system, it is recommended to use - <i><code>install-noconsolehelper.sh</code></i> instead. - <br/> - </li> - <li> - <i><code>install-noconsolehelper.sh</code></i> can be used when <code>PolicyKit</code> is not present on the system. It uses the sudo mechanism and a small wrapper script. The install script will describe the text which should be written in the - <i><code>sudoers</code></i> file, then run the command <code>visudo</code> to edit it. - <br/> - <b>Warning:</b> The - <i><code>sudoers</code></i> file is a sensitive system file and altering it in other ways may lead to system instability. Only users with enough knowledge of running a Linux system should use this method. For these reasons, this method of root authentication is discouraged. However, it may be the only option available to some users and it has been tested to work by developers and users of the plug-in. - </li> - </ul> - <h2 id="Step_3_-_Running_The_Install_Script">Step 3 - Running The Install Script</h2> - <p>Once you have selected an install script, log in as root. Assuming you are in the - <i><code>natives/linux/scripts</code></i> subdirectory of the plug-in directory (as in - <a href="#Step_1_-_Locate_the_Installation_Scripts">Step 1 - Locate the Installation Scripts</a>), run your selected install script: - </p> - <pre> # ./install.sh -</pre> - <p>Successful output will look like this:</p> - <pre>./install.sh -Eclipse-OProfile plugin install successful. -</pre> - <p>Install scripts should be run as the root user since these scripts perform some actions that require elevated privileges: - <i><code>install.sh</code></i> uses PolicyKit, and - <i><code>install-noconsolehelper.sh</code></i> runs the command <code>visudo</code>. If you wish to simply run either install script without logging in as root, use: - </p> - <pre> su -c './install.sh' -</pre> - <p>This command will run only the install script as the root user, then return control to the regular user. Note that you will still need to enter the root password to make this work. If you receive an error message, refer to the - <a href="Troubleshooting.html#Troubleshooting">Troubleshooting</a> section. - </p> - <h2 id="Step_4_-_Restart_Eclipse">Step 4 - Restart Eclipse</h2> - <p>After running the install script, restart Eclipse using <u>File</u> > <u>Restart</u>. </p> - <p>If you need to uninstall the plug-in, run the uninstall script that corresponds to the install script used. For example, if you used - <i><code>install.sh</code></i>, you would run - <i><code>uninstall.sh</code></i> before uninstalling it from within Eclipse. These scripts are also located in the - <i><code>natives/linux/scripts</code></i> subdirectory of the OProfile core plug-in directory (i.e. the same directory where the install scripts are found). - </p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Launching-A-Profile.html" title="Launching A Profile"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">OProfile User Guide</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Launching A Profile</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html deleted file mode 100644 index f3aae520d..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Launching A Profile</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Launching A Profile</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Installation-and-Set-Up.html" title="Installation and Set-Up"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Profiling-Configuration.html" title="Profiling Configuration"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Installation and Set-Up</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Profiling Configuration</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Launching_A_Profile">Launching A Profile</h1> - <p>The purpose of the OProfile plug-in is to provide useful profile information in a user-friendly manner. To do this, it first gathers the required information. The plug-in hooks into the Eclipse and CDT's launching facilities; in doing so, profiling becomes as easy as a normal run of your program. </p> - <p>During a profile run, the OProfile plug-in will start, stop and perform other OProfile tasks in the background as needed, while the binary being profiled runs as normal. Currently, it is possible to start profiling when a user binary is run and stop after the binary has returned as well as the ability to start/stop profiling at arbitrary times.</p> - <h2 id="One-Click_Launch">One-Click Launch</h2> - <p>Most users are interested in profiling where a program spends the most CPU time during execution. The OProfile plug-in for Eclipse includes a - <i>one-click launch</i> feature which profiles this. The one-click launch sets appropriate defaults for a profile configuration using the - <i>execution time</i> event, and launches the profile with no further required user intervention. - </p> - <p>To use the one-click launch, right click on the - <i>project</i>, the - <i>binary</i> or in an - <i>open editor</i> for a source file belonging to that project. Here there are two ways to start a launch: - </p> - <p>Navigating to <u>Profiling Tools</u> and clicking <u>Profile With OProfile</u></p> - <p> - <img border="0" src="images/Oprofile_original_submenu.png"/> - </p> - <p>or navigating to <u>Profiling Tools</u>, clicking on <u>Profile Timing</u> and setting the timing tools to be Oprofile.</p> - <p> - <img border="0" src="images/Callgraph_timing_submenu.png"/> - </p> - <p>To properly set the preferences you can go to - <b>C/C++->Profiling->Categories->Timing</b> and set the default timing tool to be Oprofile. - </p> - <p> - <img border="0" src="images/Oprofile_global_prefs.png"/> - </p> - <p>Alternatively, you can set project specific preferences which override workspace preferences by using project - <b>Properties->C/C++ General->Profiling Categories->Timing</b>. - </p> - <p> - <img border="0" src="images/Oprofile_proj_prefs.png"/> - </p> - <p>You can also profile your application using Profile as...->Local C/C++ Application whereby you have set the profiling tool in the Profiler tab to be Oprofile. </p> - <p> - <img border="0" src="images/Oprofile_tab.png"/> - </p> - <h2 id="Launching_a_Customized_Profile">Launching a Customized Profile</h2> - <p>The OProfile plug-in allows you to configure a profile run using several available OProfile options. These options are exposed via the launch configuration in a user-friendly manner, allowing for a more complex profile. </p> - <p>To customize a profile, right click on the - <i>project</i>, the - <i>binary</i> or in an - <i>open editor</i> for a source file belonging to that project. Then, navigate to <u>Profiling Tools</u> > <u>Profile Configurations...</u> to open the - <b> - <i>Profile Configurations</i> - </b> menu. Refer to the - <a href="Profiling-Configuration.html#Profiling_Configuration">Profiling Configuration</a> section for more information about configuring a profile. - </p> - <p>After configuring a profile, click the <u>Profile</u> button to launch the profile.</p> - <h2 id="Manual_Profile">Manual Profile</h2> - <p>As of the 0.3.0 release, users can profile their applications in two ways: an automatic or manual profile. Automatic is the previously described method whereby the OProfile daemon is started before the binary is launched and stopped after the binary returns. A manual profile configures the daemon with the appropriate settings, but instead a control dialog is available which the user can use to start or stop the OProfile daemon at will. Each mode has their own configuration type and icon, as to disambiguate the type of profile an entry in the profile history. A feedback list in the dialog assures the user that the operations have been received, since at times an operation may take a few seconds to complete. This feature is most useful to profile applications which halt on input, or large applications for which it is undesirable to launch and return several times. It is not recommended to use this feature to only profile when you believe your application is spending time; the statistical nature of OProfile will account for this.</p> - <p> - <img border="0" src="images/Oprofile_manual_dialog.png"/> - </p> - <p> - <img border="0" src="images/Oprofile_manual_shortcut.png"/> - </p> - <p>The basic workflow to run manual OProfile is</p> - <ol> - <li>Profile -> Profile with OProfile (Manual)</li> - <li>On control dialog, hit "Start Daemon"</li> - <li>Run the application binary</li> - <li>On control dialog, hit "Refresh View" (Oprofile view should be refreshed with profiling data)</li> - <li>On control dialog, hit "Stop Daemon"</li> - </ol><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Installation-and-Set-Up.html" title="Installation and Set-Up"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Profiling-Configuration.html" title="Profiling Configuration"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Installation and Set-Up</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Profiling Configuration</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html deleted file mode 100644 index d5a7ca7ce..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html +++ /dev/null @@ -1,148 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - OProfile View</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">OProfile View</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Profiling-Configuration.html" title="Profiling Configuration"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Remote-OProfile.html" title="Remote OProfile"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Profiling Configuration</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Remote OProfile</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="OProfile_View">OProfile View</h1> - <p>The OProfile view is the central point of interaction of the plug-in with the results of profiling.</p> - <p> - <img border="0" src="images/Screenshot-oprofile_view_full.png"/> - </p> - <p>The tree structure displayed above describes one or more profiles of one or more events in the following manner:</p> - <ul> - <li> - <img border="0" src="images/Icon-oprofile_event.gif"/> Events -- the name of the profiling event used by OProfile (e.g. <code>CPU_CLK_UNHALTED</code>) - <ul> - <li> - <img border="0" src="images/Icon-oprofile_session.gif"/> Session -- the name of the session the profile is stored in (e.g. <code>run1</code>) - <ul> - <li> - <img border="0" src="images/Icon-oprofile_image.gif"/> Image -- the binary being profiled (e.g. - <i><code>/notnfs/ksebasti/oprofile/plugin/factorial/Debug/factorial</code></i>) - <ul> - <li> - <img border="0" src="images/Icon-oprofile_symbol.gif"/> Symbol -- symbols gathered from the binary's debug information (e.g. <code>factorial2</code>) - <ul> - <li> - <img border="0" src="images/Icon-oprofile_sample.gif"/> Sample -- individual OProfile samples correlated to line numbers of source code - </li> - </ul> - </li> - <li> - <img border="0" src="images/Icon-oprofile_dependent.gif"/> Dependent Images -- other binaries related to the run of the program; shared libraries or kernel modules - <ul> - <li> - <img border="0" src="images/Icon-oprofile_image.gif"/> Image -- the dependent binary - <ul> - <li> - <img border="0" src="images/Icon-oprofile_symbol.gif"/> Symbol -- same as above - <ul> - <li> - <img border="0" src="images/Icon-oprofile_sample.gif"/> Sample -- same as above - </li> - </ul> - </li> - </ul> - </li> - </ul> - </li> - </ul> - </li> - </ul> - </li> - </ul> - </li> - </ul> - <p>If source code is not available, some symbols (including source file name) may be shown, but no samples. This is normally the case with programs that use shared libraries. Also, depending on the - <a href="Profiling-Configuration.html#Global_Settings">Global Settings</a>, a profile may have no dependent images. - </p> - <p>Note that after Eclipse is restarted, there will be no data shown in the OProfile view. Data from past profiles will still be on the system, if not touched otherwise, and can be re-read with the <u>Refresh View</u> menu action (refer to the - <a href="#View_Menu">View Menu</a> section for more details). - </p> - <h2 id="Features">Features</h2> - <p>This section describes the features of the plug-in exposed through the view.</p> - <h3 id="View_Tree">View Tree</h3> - <p>Double-clicking on a - <img border="0" src="images/Icon-oprofile_sample.gif"/>sample will open the source file in an editor and place the insertion point at the corresponding line in code. - </p> - <p> - <b>Note:</b> For this to work, the source code must be available and it must be in the correct directory (as described in the debug info of the binary). - </p> - <h3 id="View_Menu">View Menu</h3> - <dl> - <dt>Open OProfile Daemon Log</dt> - <dd>This will launch a dialog showing the contents of the OProfile daemon log. - <br/> - <img border="0" src="images/Screenshot-oprofiled_log_reader.png"/> - <br/>By default, the OProfile daemon log is in <code> - <i>/var/lib/oprofile/samples/oprofiled.log</i></code> - </dd> - </dl> - <dl> - <dt>Refresh View</dt> - <dd>This will re-read the OProfile data on the system, re-create the internal data model and re-display the profile tree. Doing so allows you to display data already on the system without launching a profile (e.g. when Eclipse first starts up).</dd> - </dl> - <dl> - <dt>Save Default Session</dt> - <dd>The default session, named <code>current</code>, is overwritten on each launch of a profile if it is not saved. If you wish to keep a profile for later viewing, this menu action will allow you to save the session to a different name. - <br/>Since the samples are in a system directory, this operation requires root privileges; hence, you will be prompted for the root password. The - <b> - <i>Save Session</i> - </b> dialog is shown below: - </dd> - </dl> - <p> - <img border="0" src="images/Screenshot-oprofile_save_session.png"/> - </p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Profiling-Configuration.html" title="Profiling Configuration"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Remote-OProfile.html" title="Remote OProfile"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Profiling Configuration</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Remote OProfile</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html deleted file mode 100644 index 351c17154..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html +++ /dev/null @@ -1,236 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Profiling Configuration</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Profiling Configuration</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Launching-A-Profile.html" title="Launching A Profile"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="OProfile-View.html" title="OProfile View"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Launching A Profile</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">OProfile View</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Profiling_Configuration">Profiling Configuration</h1> - <p>OProfile has many configuration options, the amount of which can be overwhelming. For more information about these options, refer to - <a href="http://oprofile.sourceforge.net/doc/controlling-daemon.html">http://oprofile.sourceforge.net/doc/controlling-daemon.html</a>. The - <b> - <i>Profile Configurations</i> - </b> menu provided by the OProfile plug-in aims to make relevant, commonly-used OProfile configuration options easily accessible to users of all experience levels. Currently, the - <b> - <i>Profile Configurations</i> - </b> menu provides two configuration tabs to the standard CDT launch configuration: - <a href="#Global_Settings">Global Settings</a> and - <a href="#Event_Configuration">Event Configuration</a>. - </p> - <p>Since Linux Tools 2.1, the Oprofile plug-in supports opcontrol and operf as profiling tools. Both of them are explained as follows.</p> - <h2 id="Operf_vs_Opcontrol">Operf vs Opcontrol</h2> - <p>Legacy OProfile consists of the opcontrol shell script for configuring, starting, and stopping a profiling session. To this purpose, a kernel driver (usually built as a kernel module) is used for collecting samples, which are recorded into sample files. A disadvantage of this mode is the necessity of elevated user privileges to run opcontrol.</p> - <p>Operf was designed to be used in place of opcontrol for profiling. It uses the Linux Performance Events Subsystem, and therefore, does not require the use of the opcontrol daemon or any elevated privileges. The use of operf and opcontrol are mutually exclusive.</p> - <h2 id="Global_Settings">Global Settings</h2> - <p>The - <b> - <i>Global Settings</i> - </b> tab configures which profiling binary is going to be used (operf or opcontrol) and how the OProfile daemon gathers profiling information. Each option is described below. - </p> - <p> - <img border="0" src="images/Oprofile_global_config.png"/> - </p> - <dl> - <dt>Profile with</dt> - <dd>user can select opcontrol or operf as profiling tools.</dd> - </dl> - <dl> - <dt>Kernel Image File (optional)</dt> - <dd>To collect more detailed information about the operation of a program in the Linux kernel, use the <u>Browse</u> button specify the location of your running kernel's - <i><code>vmlinux</code></i> file. A kernel's - <i><code>vmlinux</code></i> file contains debugging information required by OProfile. Note that the compressed - <i>vmlinux</i> file, often named - <i><code>vmlinuz</code></i>, cannot be used for this purpose. - <br/> Note: For this option to have any effect, you must enable the - <b> - <i>Include dependent kernel modules</i> - </b> option. - </dd> - </dl> - <dl> - <dt>Include dependent shared libraries</dt> - <dd>This option will make OProfile include samples from shared libraries that are used by the profiled binary/program. These samples will then be aggregated in the profile results. This is performed by default when using operf.</dd> - </dl> - <dl> - <dt>Include dependent kernel modules</dt> - <dd>This option will make OProfile include samples related to running in the kernel. If the - <i><code>vmlinux</code></i> file is specified, the profile will include details of the specific kernel modules in use. Otherwise, kernel samples will be grouped under the name <code>no-vmlinux</code>. Operf by default separates kernel samples per application. - </dd> - </dl> - <p>The differences between the options are illustrated in the following OProfile view screenshot:</p> - <p> - <img border="0" src="images/Screenshot-oprofile_global_differences.png"/> - </p> - <ul> - <li><code>incl_library</code> was run with only the - <b> - <i>Include dependent shared libraries</i> - </b> checked - </li> - <li><code>incl_vmlinux</code> was run with the - <i><code>vmlinux</code></i> file specified; both - <b> - <i>Include dependent shared libraries</i> - </b> and - <b> - <i>Include dependent kernel modules</i> - </b> checked - </li> - <li><code>no_vmlinux</code> was run without any - <i><code>vmlinux</code></i> file specified; both - <b> - <i>Include dependent shared libraries</i> - </b> and - <b> - <i>Include dependent kernel modules</i> - </b> checked - </li> - <li><code>novmlinux_noseparate</code> was run with none of the options checked</li> - </ul> - <h2 id="Event_Configuration">Event Configuration</h2> - <p>Your system processor's hardware profiling registers often contain a large number of options. The - <b> - <i>Event Configuration</i> - </b> tab condenses these options to a more manageable amount. - </p> - <h3 id="Timer_Interrupt_Mode">Timer Interrupt Mode</h3> - <p>If your processor (or kernel) does not support the hardware profiling registers OProfile uses, OProfile will run in - <i>timer-interrupt mode</i>. This mode has no user-configurable events. For more information about - <i>timer-interrupt mode</i>, refer to - <a href="http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer">http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer</a>. - </p> - <p>The event configuration tab will then look like the screenshot below:</p> - <p> - <img border="0" src="images/Oprofile_event_timer.png"/> - </p> - <h3 id="Regular_Mode">Regular Mode</h3> - <p>If your processor (or kernel) supports hardware profiling registers, there are several configuration options available to you. The availability of these configuration options depend on your processor model or kernel version. With proper support, the - <b> - <i>Events</i> - </b> configuration tab will look like the following screenshot: - </p> - <p> - <img border="0" src="images/Oprofile_eventconfig.png"/> - </p> - <p>In - <i>regular mode</i>, the - <b> - <i>Events</i> - </b> configuration tab can contain any of the following options: - </p> - <dl> - <dt>Use default event</dt> - <dd>This option is enabled by default when creating a new profile configuration, or when a profile configuration is created through the - <a href="Launching-A-Profile.html#One-Click_Launch">one-click launch</a>. - <b> - <i>Use default event</i> - </b> is a shortcut to use an event based on processor execution time, with a reasonable value for the - <b> - <i>Count</i> - </b> option. Using this option will prevent you from configuring the counters any further. - <br/> For a list of default events for various processors, refer to - <a href="http://oprofile.sourceforge.net/doc/controlling.html#eventspec">http://oprofile.sourceforge.net/doc/controlling.html#eventspec</a>. - </dd> - </dl> - <dl> - <dt>Counter Tabs ( - <b> - <i>Ctr 0</i> - </b>, - <b> - <i>Ctr 1</i> - </b>, - <b> - <i>Ctr 2</i> - </b>, and so on) - </dt> - <dd>A processor may have 1 to 8 hardware profiling registers (also called counters). Each one may be programmed separately to profile many events simultaneously. Each tabs labelled - <i>Ctr</i> represents one counter and exposes the same options. - </dd> - </dl> - <dl> - <dt>Enabled</dt> - <dd>This option (located in each counter tab) disables or enables a counter.</dd> - </dl> - <dl> - <dt>Event List</dt> - <dd>A list of the events available for profiling on a given counter.</dd> - </dl> - <dl> - <dt>Event Description</dt> - <dd>When you select an event from the events list, this field provides a short description of that event's function. OProfile provides the content for this field.</dd> - </dl> - <dl> - <dt>Profile Kernel and Profile user binaries</dt> - <dd>Instructs OProfile to profile binaries in the selected spaces. Keeping both checked is recommended (even if other - <a href="#Global_Settings">Global Settings</a> are not specified). - </dd> - </dl> - <dl> - <dt>Count</dt> - <dd>Specifies a reset count for the hardware counter. In most cases, the default value (based on the CPU clock frequency) is sufficient. Each event has a minimum value, but it is recommended to use a value many orders of magnitude larger. - <br/> - <b>WARNING</b>: if you specify a value that is too low, the profiled program may take much longer to return or your system may hang. - </dd> - </dl> - <dl> - <dt>Unit Mask</dt> - <dd>Many events have a - <i>unit mask</i> which allows further narrowing of the scope of the event. If in doubt, use the default value (specified by OProfile). There are three types of unit masks: - </dd> - </dl> - <ul> - <li>Mandatory -- no selection necessary; a single required value</li> - <li>Exclusive -- several possible values; a single required value</li> - <li>Bitmask -- several possible values; a combination of several values</li> - </ul><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Launching-A-Profile.html" title="Launching A Profile"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="OProfile-View.html" title="OProfile View"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Launching A Profile</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">OProfile View</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html deleted file mode 100644 index 52a563ef5..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Remote OProfile</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Remote OProfile</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="OProfile-View.html" title="OProfile View"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Example-Project.html" title="Example Project"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">OProfile View</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Example Project</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Remote_OProfile">Remote OProfile</h1> - <p>The OProfile plug-in allows profiling a project stored in a remote machine. This can be particularly useful when developing an application for a different architecture. </p> - <h2 id="Set-up">Set-up</h2> - <p>The remote OProfile plug-in doesn't have installation scripts, but requires some setup in the remote machine. First, the remote machine's user must be able to run OProfile as root. For this, log in the remote machine as root and edit the /etc/sudoers file to add the following line: </p> - <pre><user> ALL=(ALL) NOPASSWD: <linux-tools-path>/opcontrol -</pre> - <p>Where: </p> - <ul> - <li> - <b><user></b> - Remote machine's user - </li> - <li> - <b><linux-tools-path></b> - Path for linux tools set for the project. The default is /usr/bin. This path can be modified by right-clicking the remote project, clicking in "Properties" and choosing the "Linux Tools Path" tab. - </li> - </ul> - <p>Also make sure that following line is not present or commented out: </p> - <pre>Defaults requiretty -</pre> - <p>This is necessary for running a remote command using sudo. </p> - <h2 id="Launching_A_Remote_Profile">Launching A Remote Profile</h2> - <p>To run OProfile remotely, right-click the project and navigate to "Profiling Tools", then to "Profile Configurations". (Note: there's no One-click launch for remote OProfile). In the new window, double-click the Profile with OProfile (remote) profile configuration. </p> - <p>In the main tab, choose the binary that will be profiled by clicking the "Browse" button under "C/C++ executable".</p> - <p> - <img border="0" src="images/Remote-oprofile.png"/> - </p> - <p>The same - <a href="Profiling-Configuration.html#Event_Configuration">Event Configuration</a> Event Configuration options for regular OProfile apply for remote OProfile as well. - </p> - <p>After configuring the profile, click the Profile button to launch the profile. The same - <a href="OProfile-View.html#OProfile_View">OProfile View</a> as the local one will show the results. - </p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="OProfile-View.html" title="OProfile View"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Example-Project.html" title="Example Project"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">OProfile View</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Example Project</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html deleted file mode 100644 index 2da93733d..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Troubleshooting</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Troubleshooting</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Example-Project.html" title="Example Project"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Updating-This-Document.html" title="Updating This Document"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Example Project</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Updating This Document</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Troubleshooting">Troubleshooting</h1> - <p>Various problems and their solutions are described here. If you encounter a problem not described here, please - <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?assigned_to=ksebasti%40redhat.com&blocked=&bug_file_loc=http%3A%2F%2F&bug_severity=normal&bug_status=NEW&comment=&component=OProfile&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&data=&dependson=&description=&flag_type-1=X&flag_type-2=X&flag_type-4=X&flag_type-6=X&flag_type-7=X&flag_type-8=X&form_name=enter_bug&keywords=&op_sys=Linux&priority=P3&product=Linux%20Tools&qa_contact=&rep_platform=PC&short_desc=">file a bug</a>. - </p> - <h2 id="Install_Script_Errors">Install Script Errors</h2> - <p>This section describes different errors that could occur from running the install scripts (i.e. <code> - <i>install.sh</i></code> or <code> - <i>install-noconsolehelper.sh</i></code>) - </p> - <h3 id="Error:_script_must_be_run_as_the_root_user">Error: script must be run as the root user</h3> - <p>You attempted to run the script as an ordinary, non-root user. You must be the root user to run the install script, as the scripts edit files located in root-owned directories. </p> - <p>Solution: Run the command <code>su -</code> to become the root user, or run the script as the root user with <code>su -c './install.sh'</code>.</p> - <h3 id="Error:_script_must_be_run_with_pwd_in_script_dir">Error: script must be run with pwd in script dir</h3> - <p>Your current working directory must be the <code> - <i>natives/linux/scripts</i></code> subdirectory of the OProfile core plug-in; running the script relative from another location will not work. - </p> - <p>Solution: Simply follow the steps on - <a href="Installation-and-Set-Up.html#Step_1_-_Locate_the_Installation_Scripts">Step 1 - Locate the Installation Scripts</a> to find the <code> - <i>natives/linux/scripts</i></code> subdirectory of the OProfile core plug-in. - </p> - <h3 id="Error:_required_binaries_do_not_exist.2C_OProfile_not_installed.3F">Error: required binaries do not exist, OProfile not installed?</h3> - <p>The OProfile plug-in could not find the <code> - <i>oprofiled</i></code> and <code> - <i>opcontrol</i></code> binaries. This could mean they are not in their default directory (<code> - <i>/usr/bin</i></code>), or they do not exist at all. - </p> - <p>Solution: If the binaries are on your system (and in your <code>PATH</code>) but not in those directories, you can either remove these checks from the install script or create symlinks in the <code> - <i>/usr/bin</i></code> directory. Of course, if the binaries do not exist on your system, then install the <code> - <i>oprofile</i></code> package. - </p> - <h3 id="Error:_.2Fusr.2Fbin.2Fpkexec_does_not_exist">Error: /usr/bin/pkexec does not exist</h3> - <p>You ran the <code> - <i>install.sh</i></code> script, but <code>pkexec</code> which is provided by PolicyKit was not installed on your system. - As described in - <a href="Installation-and-Set-Up.html#Step_2_-_Choose_Which_Installation_Script_To_Run">Step 2 - Choose Which Installation Script To Run</a>, if <code>PolicyKit</code> is not installed, then you can use the <code> - <i>install-noconsolehelper.sh</i></code> script. - </p> - <p>Solution: Run the <code> - <i>install-noconsolehelper.sh</i></code> script instead. - </p> - <h3 id="install.sh:_line_47:_opcontrol:_Permission_denied">install.sh: line 47: opcontrol: Permission denied</h3> - <p>The opcontrol wrapper file could not be created. This can occur if the <code> - <i>natives/linux/scripts</i></code> subdirectory is located on an NFS mount; the NFS server will not allow the local root user to create files in the directory. - </p> - <p>Solution: After seeing the error mentioned run the following commands from the commandline :</p> - <pre>echo '#!/bin/sh' > opcontrol || exit 1 -echo 'exec pkexec /usr/bin/opcontrol ${1+"$@"}' >> opcontrol -chmod +x ./opcontrol -</pre> - <h2 id="No_Samples_From_A_Profile">No Samples From A Profile</h2> - <p>It is possible for a profile run of a program to return no samples, resulting in no <code>current</code> session displayed. This is not always indicative of a problem with either OProfile or the profiled program. OProfile is a system-wide profiling tool; hence, other active processes running on your system may overshadow your program. This is particularly true if the profiled program is not CPU intensive. </p> - <p>In addition, the - <i>Event</i> you choose (selected through the - <b> - <i>Events</i> - </b> tab, as described in - <a href="Profiling-Configuration.html#Regular_Mode">Regular Mode</a>) could cause a profile to return no samples; for example the event - <i>BR_CND_MISSP_EXEC</i> will only provide samples if a branch was mispredicted by the processor. Note also that due to the statistical nature of OProfile, profiling is neither deterministic nor consistent; two subsequent runs may output very different results. In some cases, one run can result in no samples, while another run on the same program can result in many samples. The OProfile online documentation has other useful information - <a href="http://oprofile.sourceforge.net/doc/results.html#no-results">here</a>. - </p> - <p>Solution: The following suggestions could help you generate more samples from a profile run:</p> - <ul> - <li>run your program with a larger input</li> - <li>halt or kill as many other non-essential processes as possible </li> - <li>reduce the - <i>Count</i> in the - <a href="Profiling-Configuration.html#Event_Configuration">Event Configuration</a> tab - </li> - <li>launch a profile several times </li> - </ul> - <p>If you are unsure whether your configuration is working correctly, try profiling the sample project in the - <a href="Example-Project.html#Example_Project">Example Project</a> section. - </p> - <h2 id="Log_Reader_Hangs">Log Reader Hangs</h2> - <p>If the OProfile daemon log file is too large, the log reader may hang and possibly cause the OProfile plug-in to crash. This occurs when the - <i>verbosity</i> option is set to <code>all</code>, which results in several hundred MiB of text in the log over several profile runs. If you do require all this data in the log file, do not launch the log reader. Delete or backup the log file before running the log reader again. - </p> - <h2 id="Using_PolicyKit_with_X.2FVNC">Using PolicyKit with X/VNC</h2> - <p>When using an X/VNC viewer, PolicyKit may open the authentication dialog in the wrong display. If using this setup, please make sure to connect your VNC viewer to the main display.</p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Example-Project.html" title="Example Project"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"> - <a href="Updating-This-Document.html" title="Updating This Document"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Example Project</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Updating This Document</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Updating-This-Document.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Updating-This-Document.html deleted file mode 100644 index 8e24c6e84..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/Updating-This-Document.html +++ /dev/null @@ -1,54 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide - Updating This Document</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">Updating This Document</th> - </tr> - <tr> - <td style="width: 20%" align="left"> - <a href="Troubleshooting.html" title="Troubleshooting"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"></td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Troubleshooting</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top"></td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Updating_This_Document">Updating This Document</h1> - <p>This document is maintained in a collaborative wiki. If you wish to update or modify this document please visit - - <a href="http://wiki.eclipse.org/Linux_Tools_Project/OProfile/User_Guide">http://wiki.eclipse.org/Linux_Tools_Project/OProfile/User_Guide</a> . - </p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"> - <a href="Troubleshooting.html" title="Troubleshooting"> - <img alt="Previous" border="0" src="../../../images/prev.gif"/> - </a> - </td> - <td style="width: 60%" align="center"> - <a href="User-Guide.html" title="OProfile User Guide"> - <img alt="OProfile User Guide" border="0" src="../../../images/home.gif"/> - </a> - </td> - <td style="width: 20%" align="right"></td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top">Troubleshooting</td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top"></td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/User-Guide.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/User-Guide.html deleted file mode 100644 index 4417b6a37..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/User-Guide.html +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <title>OProfile User Guide</title> - <link type="text/css" rel="stylesheet" href="../../../book.css"/> - </head> - <body> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <th style="width: 100%" align="center" colspan="3">OProfile User Guide</th> - </tr> - <tr> - <td style="width: 20%" align="left"></td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Installation-and-Set-Up.html" title="Installation and Set-Up"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top"></td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Installation and Set-Up</td> - </tr> - </table><hr class="navigation-separator"/> - <h1 id="Overview">Overview</h1> - <p>OProfile is a system-wide Linux profiler, capable of running at low overhead. It consists of a kernel driver and a daemon for collecting raw sample data, along with a suite of tools for parsing that data into meaningful information. OProfile is generally used by developers to determine which sections of code consume the most amount of CPU time, and why.</p> - <p>The OProfile plug-in allows Eclipse users to seamlessly include OProfile capabilities into their development workflow, regardless of their experience in using OProfile. Users with little experience in OProfile can use the - <a href="Launching-A-Profile.html#One-Click_Launch">One-Click Launch</a> to run a default OProfile view. Experienced users can perform the same OProfile functions they would on the command line, but with a much richer visualization of the results. - </p> - <p>For more details on OProfile, visit the project homepage at - <a href="http://oprofile.sourceforge.net/news/">http://oprofile.sourceforge.net/news/</a>. - </p> - <p> - <b>Note : The following steps in - <a href="Installation-and-Set-Up.html#Installation_and_Set-Up">Installation and Set-Up</a> may not be necessary if installing the Eclipse OProfile plugin from a distribution specific package (eg. .deb, .rpm, etc.). These packages may perform the necessary setup on behalf of the user eliminating the need for steps 1-4. For example, on Fedora, the 'eclipse-oprofile' package automatically configures support for PolicyKit. These steps are also not necessary if using the operf binary for profiling instead of legacy opcontrol. - </b> - </p><hr class="navigation-separator"/> - <table class="navigation" style="width: 100%;" border="0" summary="navigation"> - <tr> - <td style="width: 20%" align="left"></td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right"> - <a href="Installation-and-Set-Up.html" title="Installation and Set-Up"> - <img alt="Next" border="0" src="../../../images/next.gif"/> - </a> - </td> - </tr> - <tr> - <td style="width: 20%" align="left" valign="top"></td> - <td style="width: 60%" align="center"></td> - <td style="width: 20%" align="right" valign="top">Installation and Set-Up</td> - </tr> - </table> - </body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Callgraph_timing_submenu.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Callgraph_timing_submenu.png deleted file mode 100644 index 5718ed1ed6dc3a7dc0c1f142ad3a0e9e0b02d1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24212 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_dependent.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_dependent.gif deleted file mode 100644 index 122bada5ffde2e46901b19cd3e1626c318568aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmZ?wbhEHb6krfwSZc%o1kTRRxoM91=??iB&IK8c#hLaM*|xQLwoL`r9mSS?rRIHQ z=94STrc{{Es4|^fWiY$We14tr(k7FoO{UA63|BQ9oLdofZbkI@7139=<lR2dbo<%& zdoO_K$Aect9=-Yg^zF~*?|;1d@bk^5U++Kv`t<ep=WoBifY6^W-+zDo{^#3|-`{@x z`Tq0IkDtGP{QUFt*Ps7H1I3>#j9d)%3_2j6fc(V3*6Gk)VDU$?-`+dtWKW`wM>4C} zihWFazRQH>ZehBwpS^fzz=TP`rW3dpglUPg{4}`v{s+gVK&~&VYgJYGJa|+X+dDf{ zxEb8JlsmFJRT%o*IF)A2o;__I1BYVvq9uyc+!)vu7+0@dqrg6$flWSp>vnlIcLrt| a+5HFh%dzfeI(Ga76U*+vvmOkN4AubKE5io> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_event.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_event.gif deleted file mode 100644 index c91f254ab1728df3d6555002c789ef4519693eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmZ?wbhEHb6krfwIK}`1%*@QJER6Q{@oK^K2I2LhDcg(_x<ymB#m2^pXYPoPkC({a zZI{|3mAl72W0Fk%9+`r@a>WNyQ|mJ_G8D=VDOVm*t39S!d(@!jh<5!k&BhZ3jmK+i zYn}Vf*iAU+IQ7#0dV9BNmwaYk4q0>~YT@;Y`THy9@83V)e!+qzP0NqAt~`E!zJ2kA zdvo_*nZNhS)ML-59eY0G_>2Gh?U$Z=z3bM;UAI3Sy7TV;{rFQ)zMgvW?d+4U7oL1L z|Log^XJ4<s_<Zfvk87`gU4QfI#+zTa-u$@p=Eu#qzwW;Map&FdyFm2*_r3SO@4x^3 z@cqw+?|(i1@axHkACEr%dHnIu(~p0ieEReB)1PObem(pA=LHab`Sa@Q-`C&%zWMg| z?YF=0zW;sy{qLur|Nj4<|Nr*~a8Oa7Q2fcl$i-04paU`*6ekSq#~SLJ>V;Zcn>(7s zC3H=#&2;5eI_t%h9pYltV&eVe6gs6`^&&&~Lxc6*Wjgo_;%oxFc)f${;|+zHc`Tzt zyqs8_eZphyM4JU%)Pp?CSscAWwR}%BaoGlhc(Yr%9T8#RZsstG3l8-5^br<jv;d}n zCZ#a#$e@sLW{pG(3yo)gI|G<bi|eXcF>p*~a_EwL#FBf$;W4KK!+(YjMuTQn1{Wb7 nkBEkiirivMLIFZY^4*RLFokWBVK}h3VTKXwL>YAr0S0RTR(c5A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_image.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_image.gif deleted file mode 100644 index 8aa0162df05c16227da66fddaa907c9b6cf28e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmZ?wbhEHb6krfwSZc`N?ChMI=9r)Eke}gPkl|RIX<w0TTbpOwRAAjvY}r?8-dAQm zxx#Eph53vs)45d!v+K;~*BLKuGFjSWy1dD7RkOjl6;bC_M4w*~ePv7D?E_7>pMAgg z0*HP*c=hAao9|EG{(S!a$Ey!N-+cP@{`0R-Uw?o8_WKJ6{rU3!_t)=#zWw<9?Z=<* zKmYvr`TNJuKR<u{`A-T^{K>+|#bD2%!vF*zKQXX19q1~s_#@fBpDX8NORScM@>A9o zyBOB;v<Xe!z;OS)*W`^p69j`r8<^&Vth~bfQsd_P3XVyROkY;ls;KaKa4R#kcXlXq zd2lLqWOpiadT=Ptm^q8XgIyte{z3(I4>oy*<ttanvw5(}WpCId$Lhf(EwgjiPFWTY S#sdcrF){}pJMQMlU=09`nZ#cJ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_sample.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_sample.gif deleted file mode 100644 index 061161ae1c9e6435863ba173c0b3fed6a239f745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmZ?wbhEHb6krfwc*el+`Rnf=KmR0GEr0jv*Qc+)fByRO<LB?Vvc+k2E3%r_<hHCW z?ATb`xv6H-j=IUadKMi1@a1>o^gS)J_IJ)ZIC1ImdoO<6eg6Iai|<d~{CxiI=i5)e zK7adt2PpFL$GsQdAHMqW>ch`(KYl-Z_w&Qo-=Dty{`%wh_n*IO3hb)#?5gtZDnX=u zYpG3bK2XHItK7P=&~`$VWp}yt(iW4YttJbaOlQ}d&8|0}R%7wtME|BPgLNH-tJ;jO zY|6N@Df8CenyZ^K|NsBbFl2$^PZmZ721f=RkPkp{!oc3w;MmmM(%NFx(b>_~WX0M) z!Op73T8)uy8l%0#<W?J15kW3?MN4~In^t2MX%%S(>5bARt)|K%{6f4uoJ<0yt!7eE z%!iLjnYUUf?AW!3Nx`DkP)YLI^{a-h`Vwb%@0BoW)scVt?3qrhfvkuyA2)}%oTx#o fx{Qq2&!4|^TlKVqR&Zz-v~r8|2=Q^TFjxZs;4`*T diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_session.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_session.gif deleted file mode 100644 index c2b41bda923b87ab63ee4564d9bf7ff6385404e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmZ?wbhEHb6krfwSZc@s1gtEKtgI}&-0b%D@%=%Pv9Yo7@$vKGW#`2!<mV*MOH*H( zqf%C!y*5W>RiVM!BJH(B`t?<%O;z>nwe?%-jrP<V?XS1r(`t0M)$DM$+5Y+V3l=Q7 zKi~ewhJptND*o@c|9Gz9#f6R^7b<>SX!voV@xzS?KW=pVxG~}X{rDdbX8d@t;Kz#@ zKVEG3@!`b(|MUO<{_vj^p!k!8k&D5eK?md$ke?XXCLXx&?|g-$-(#Wju^!7wCwRJ3 zg=%eP=7@C`R_;&WxpYZu_Ib{f)T42(_dfjKZ(8LZ^1~)h<foyZx?n@IIxjO9zY~YD zph};Ls;~%?CIbtLJ*%MdoH>dt()ya3(lhM2SF99b(3fG5QD9&XuxD7zV8Eat%dmxg h+d5fUMz$^X3lw&XGaft6!mx+&%vt;Wo1GjPtO1Uau~+~A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_symbol.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Icon-oprofile_symbol.gif deleted file mode 100644 index 6ae4604cdba44133c67384abbac46e9035200142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmZ?wbhEHb6krfwSjfZx1T8Hs|G_}<CkrDN0~3P|NE9T`z@#;$f92{2J$IVZ<N_8S lNxId`8Y3FB`0CtMY1{IuIszkmKg6of@%{QQUxR_c8UQ}rAyEJT diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_event_timer.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_event_timer.png deleted file mode 100644 index b98ec2348cb1fe3e7512dee5e7c005aa67ca5aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19610 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_eventconfig.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_eventconfig.png deleted file mode 100644 index c080c2d3e2c82c5561002a3471d41d80d8ea31f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46239 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_config.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_config.png deleted file mode 100644 index 99c460bce041a291b5d635a2b8ffe07ee6dc30c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99190 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_prefs.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_global_prefs.png deleted file mode 100644 index 989f379bc2c04262f54ef55abecff65dfeee0ef8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28988 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_dialog.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_dialog.png deleted file mode 100644 index b9232e3dfe7974ee9f29ae804cf45f3b6d320bcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12126 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 Je>D2?{{RYyH3|R# diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_shortcut.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_manual_shortcut.png deleted file mode 100644 index 187a7ef211217198574bdaa328f4b545d15080d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27319 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_original_submenu.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_original_submenu.png deleted file mode 100644 index 05e80eb895b3a793a2ff2e2a537bb402200f44f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23836 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_proj_prefs.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_proj_prefs.png deleted file mode 100644 index 9c1f4abc7aef4d2033518c703d11640649ca28fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30564 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 LeOvrm*Zcng=85P_ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_tab.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Oprofile_tab.png deleted file mode 100644 index d7a36344e11652212d18c0eb73abba5fc2470e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75682 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ℜ#3yMmyZbY4a2^c_M{3D@CF8xTev&N*<^J*# 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 R)x^OeJ?(p1r3m|o{{fjcjkf>* diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Remote-oprofile.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Remote-oprofile.png deleted file mode 100644 index f91f7295b310ba15008120a10304722f1010cadd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70099 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%0DDP}g1$`YY*P7y*nv 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-global_config.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-global_config.png deleted file mode 100644 index af97846ec929cc8a1d3aab997b715836429df595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46090 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�a1<<Lm6$#~6%5?BbB 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 P>AAj+$(_pEF3<i0Kq!Ch diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-installscript_error_dialog.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-installscript_error_dialog.png deleted file mode 100644 index 3dea3b95a6c1a3aa094f66777758fb671e6aa987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126665 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	KS}{6$<NoX=wpTB_4EU`1(sv;kmbaUs9D3sN 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-one-click_launch.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-one-click_launch.png deleted file mode 100644 index ce6c2d8b24487d484a61cd4aed2dd5c6385db2e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93966 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�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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-opcontrol_consolehelper.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-opcontrol_consolehelper.png deleted file mode 100644 index 5b2bc10372f6575959d9688bad05a7efab9fde31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18444 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_event_timer.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_event_timer.png deleted file mode 100644 index 37b3e8240573703600bf2745d791793d04cb0b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37908 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_eventconfig.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_eventconfig.png deleted file mode 100644 index d0bc0b627b59dd7b20080328827547da1083c52c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66787 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^eWgVsa$a6AEGeZNfT=G6kq;4Nc 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 F{9lAR#zp`D diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_global_differences.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_global_differences.png deleted file mode 100644 index 5d7cd3717e84954981d802769cba32f1e25bca94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52748 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_save_session.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_save_session.png deleted file mode 100644 index afb189b6041cfe718a289435adc4269369512052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8805 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 boCGuCy2QSCgm@9_L;&h4+R9Zg-iQ4UaMYVZ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_view_full.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofile_view_full.png deleted file mode 100644 index 6008028e64763b2c16229c16f5c7d48ff963d782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40368 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 Yr&$v`S~al}O$P)+Ju}_fyUq#!0h-WR+5i9m diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofiled_log_reader.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-oprofiled_log_reader.png deleted file mode 100644 index 5a7f61ef888a006465de8ab5756903616c931ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35457 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 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-remote-oprofile.png b/oprofile/org.eclipse.linuxtools.oprofile.doc/Linux_Tools_Project/OProfile/User_Guide/images/Screenshot-remote-oprofile.png deleted file mode 100644 index 4fa53629e330a162fcd5b9619fe40c4b9bb27aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110060 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%0AO^O38>TeN8I?F>xg+Y<~YZ);Kwj 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 Xyj)qr^v!h@sK2D4s;g3=WEb{7m?A^Y diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.doc/META-INF/MANIFEST.MF deleted file mode 100644 index ed92bf1be..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/META-INF/MANIFEST.MF +++ /dev/null @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %Bundle-Name -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.doc; singleton:=true -Bundle-Version: 1.0.0.qualifier -Bundle-ActivationPolicy: lazy -Bundle-Vendor: %Bundle-Vendor -Require-Bundle: org.eclipse.help -Bundle-Localization: plugin -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.doc diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/about.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/book.css b/oprofile/org.eclipse.linuxtools.oprofile.doc/book.css deleted file mode 100644 index 797473964..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/book.css +++ /dev/null @@ -1,59 +0,0 @@ -/* following font face declarations need to be removed for DBCS */ - - -body, h1, h2, h3, h4, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: Arial, sans-serif; color: #000000} -pre { font-family: Courier, monospace} - -/* end font face declarations */ - -/* following font size declarations should be OK for DBCS */ -body, h1, h2, h3, h4, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-size: 12pt; } -pre { font-size: 12pt} - -/* end font size declarations */ - -body { background: #FFFFFF} -h1 { font-size: 18pt; margin-top: 5; margin-bottom: 1 } -h2 { font-size: 14pt; margin-top: 25; margin-bottom: 3 } -h3 { font-size: 11pt; margin-top: 20; margin-bottom: 3 } -h4 { font-size: 10pt; margin-top: 20; margin-bottom: 3; font-style: italic } -h5 { font size: 13.5pt; } -p { font-size: 12pt; } -pre { margin-left: 6; font-size: 9pt } - -a:link { color: #006699 } -a:visited { color: #996699 } -a:hover { color: #006699 } - -ul { margin-top: 0; margin-bottom: 10 } -li { margin-top: 0; margin-bottom: 0 } -li p { margin-top: 0; margin-bottom: 0 } -ol { margin-top: 0; margin-bottom: 10 } -dl { margin-top: 0; margin-bottom: 10 } -dt { margin-top: 0; margin-bottom: 0; font-weight: bold } -dd { margin-top: 0; margin-bottom: 0 } -strong { font-weight: bold} -em { font-style: italic} -var { font-style: italic} -div.revision { border-left-style: solid; border-left-width: thin; - border-left-color: #7B68EE; padding-left:5 } -th { font-weight: bold } -.hidden { - display: none; -} - -/* Mike Behm's addition to the style sheet */ -.userinput { font-family: monospace; } -.guitab, .important, .guibutton, .selectblue, .guimenu, .guilabel, -.notetitle { - color: #000000; - font-family: helvetica, arial, sans-serif; - font-weight: bold; - } -div.linux {display:none;} -.firsterm {font-style:italic;} - -.typewriter {font-family:monospace;} -.bold {font-weight:600;} -.linethrough {text-decoration: line-through;} -.underline {text-decoration: underline;} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/build-helper.xml b/oprofile/org.eclipse.linuxtools.oprofile.doc/build-helper.xml deleted file mode 100644 index e2131a089..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/build-helper.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project name="org.eclipse.linuxtools.oprofile.doc" default="all"> - <description> - Generate Eclipse help content for the Linux Tools OProfile user guide - </description> - - <property name="help.doc.url.base" value="http://wiki.eclipse.org" /> - - <target name="all" description="Generate Eclipse help content for the Linux Tools OProfile user guide"> - <mediawiki-to-eclipse-help wikiBaseUrl="${help.doc.url.base}" title="OProfile User Guide" formatoutput="true" dest="." templateExcludes="*eclipseproject*"> - - <path name="Linux_Tools_Project/OProfile/User_Guide" title="OProfile User Guide" generateToc="false" /> - <stylesheet url="book.css" /> - <pageAppendum> -= Updating This Document = - -This document is maintained in a collaborative wiki. If you wish to update or modify this document please visit -http://wiki.eclipse.org/Linux_Tools_Project/OProfile/User_Guide . - </pageAppendum> - </mediawiki-to-eclipse-help> - <antcall target="test" /> - </target> - - <target name="test" description="verify that all of the HTML files are well-formed XML"> - <echo level="info"> -Validating help content XML and HTML files: The Eclipse help system expects well-formed XML - -If validation fails it is because either: - -* the userguide source code is poorly formed, or -* the WikiText MediaWiki parser has a bug - -Problems with userguide source are usually caused by improper use of HTML markup in the MediaWiki source, -or inadvertently starting a line with a space character (in MediaWiki this starts a preformatted block) - </echo> - - <!-- - Don't bother with DTD validation: we only care if the files are well-formed. - We therefore provide an empty DTD - --> - <echo file="tmp/__empty.dtd" message="" /> - <xmlvalidate lenient="true"> - <fileset dir="Linux_Tools_Project"> - <include name="**/*.html" /> - </fileset> - <dtd publicid="-//W3C//DTD XHTML 1.0 Transitional//EN" location="${basedir}/tmp/__empty.dtd" /> - </xmlvalidate> - <delete dir="tmp" /> - </target> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.doc/build.properties deleted file mode 100644 index da432261b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/build.properties +++ /dev/null @@ -1,16 +0,0 @@ -bin.includes = plugin.xml,\ - META-INF/,\ - .,\ - doc/,\ - toc.xml,\ - plugin.properties,\ - about.html,\ - Linux_Tools_Project/,\ - toc-doc.xml,\ - images/,\ - book.css - -src.includes = toc.xml,\ - doc/,\ - about.html -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/doc/notices.html b/oprofile/org.eclipse.linuxtools.oprofile.doc/doc/notices.html deleted file mode 100644 index dd6688fd2..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/doc/notices.html +++ /dev/null @@ -1,22 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> -<head> - -<meta name="copyright" content="© Copyright 2009 Eclipse Linux Tools project committers and others. 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=utf-8"> - <LINK REL="STYLESHEET" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css"> - <title>Legal Notices</title> -</head> -<body> - -<h3> -<a NAME="Notices"></a>Notices</h3> -<p> -The material in this guide is © Copyright 2009 Eclipse Linux Tools project committers and others. -</p> -<p> -<a href="../about.html">Terms and conditions regarding the use of this guide.</a> -</p> -</body> -</html> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/images/home.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/images/home.gif deleted file mode 100644 index 4472e8ce5b377934abe5910749b8c58591947424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmZ?wbhEHb6krfwc*ek>=hf;IH{B?(Il6LneC_)9y7e)Ys}kzgCpT_NZrqsBx;3M1 zYfjfr^Oy#Un1=ILZ(q4_=gaqB7ao7P|N7gr_usES|9bEBw__J?ox6Jb!jmu8UwnP~ z{`<W*-@bhR`Sip0w_kqPWz^VZ*0`2c{QUJRu(vR<r!aI%e#S=cqVj^`@`AF8f|X}X zuHRSw`}g<cNljIi`L)%#lP5N{*M-dJi(frIXU)R=+N#_clN(#>vgb@~XsXFsG`()# z)P`j<Y8Oqb`*~;S&pXThJ=wByX6^qM`#v77{BXG9)5+HFm!|%EwB^gmwgmwWzkdDt z|NlS3U<HalSr{1@d>C{<4g|#s1N-6zpQh%P)>bdmCa1Pm6E7bp=kA^+FJoIr3lG~V zK1Oy9RsvS`)>ACq4Fq%r%-n6-%-!@?>#ouFG;c9<)mp7~V2zfGUbChqzqhxVj+(c! zgob7dgSf1qs*0+ttT;m}qx_@Cj~QFpq($VE-iU}uGq>`{h>0ocD2NHm@U(JENoiR` mTx3|l#@Z^BazerJ04F22v4Td(0)|Fr1|zv05e@+g4Aub9HpVdk diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/images/next.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/images/next.gif deleted file mode 100644 index e2f8c3e1feeb0541239db4061812008af2225105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmZ?wbhEHb6krfwxXQrr@9+D+zn}g6e)He2XMaAO`UhluzxDUq&A;Dn{du|K&)c1U zKb`yw6#sVf_k*54PiFppGV{-i6@Ol={QGw2@4L-^fP#-_?rjlUS1Po<R%Cmf$ku9+ ztu-Qhn#6WCi0*C@TU{Wyx=?Usp5Xctp|wRq%X0*lWefcO|DS<MK=CIFBLjmvgAT|% zke?XXQVvWm@X(R!_jvSll1>@J+-Dz{8ESgwt+{5*!DHj%yExE6hNr2CLGc8SInS{s zf%p?|dHMv5Uuypo=4xzGc2W`Q5bP2Z;_OjzQJkcxFoj=0Ofg7Flus#0T~$PNfx4R7 K(v?Au4Aua3A9>vX diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/images/prev.gif b/oprofile/org.eclipse.linuxtools.oprofile.doc/images/prev.gif deleted file mode 100644 index 4fb41501036b940c99c8a839d7459c88eb98385c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmZ?wbhEHb6krfwxXQrr@9+D+zn}g6e)He2XMaAO`UhluzxDUq&A;Dn{du|K&)c1U zKb`yw6#sVf_k*54PiFppGV{-i6@Ol={QGw2@4L-^fP#-_?rjlUS1Po<R%Cmf$ku9+ ztu-Qhn#6WCi0*C@TU{Wyx=?Usp5Xctp|wRq%X0*lWefcO|DS<MK=CIFBLjmvgAT|% zke?XXQVvWm@X(R!_jvepl1drF++`n_8ETfyb4+;fvdZ>I4}+ox2M@c;!iyI;EP0M4 zDfSD$=;<vm3Do#iTPNHs;jAJg$k`#-Bh;tjq9`W7ub?<hai*IRpQuuhld6d70w*=K Lr7M>@GFSru%pQBc diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.properties deleted file mode 100644 index 911f160f4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.properties +++ /dev/null @@ -1,2 +0,0 @@ -Bundle-Vendor = Eclipse Linux Tools -Bundle-Name = OProfile Documentation diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.xml b/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.xml deleted file mode 100644 index 53bdf8de2..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/plugin.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.4"?> -<plugin> - <extension - id="org.eclipse.linuxtools.oprofile.doc.helpDocs" - name="OProfile" - point="org.eclipse.help.toc"> - <toc file="toc-doc.xml" primary="true" /> - <toc file="toc.xml" primary="false"/> - </extension> -</plugin> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.doc/pom.xml deleted file mode 100644 index 3155061f6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.doc</artifactId> - <version>1.0.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile Documentation Plug-in</name> - - <profiles> - <profile> - <id>regenHelp</id> - <build> - <plugins> - <plugin> - <artifactId>maven-antrun-plugin</artifactId> - <executions> - <execution> - <id>helpdocs</id> - <phase>generate-resources</phase> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - </profiles> - -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/toc-doc.xml b/oprofile/org.eclipse.linuxtools.oprofile.doc/toc-doc.xml deleted file mode 100644 index 1314f2d27..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/toc-doc.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?> -<toc topic="Linux_Tools_Project/OProfile/User_Guide/User-Guide.html" label="OProfile User Guide"> -<link toc="toc.xml" /> -<topic href="doc/notices.html" label="Legal"> </topic> -</toc> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.doc/toc.xml b/oprofile/org.eclipse.linuxtools.oprofile.doc/toc.xml deleted file mode 100644 index 9a3793cc6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.doc/toc.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version='1.0' encoding='utf-8' ?> -<toc topic="Linux_Tools_Project/OProfile/User_Guide/User-Guide.html" label="OProfile User Guide"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/User-Guide.html" label="OProfile User Guide"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/User-Guide.html" label="Overview"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html" label="Installation and Set-Up"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html#Step_1_-_Locate_the_Installation_Scripts" label="Step 1 - Locate the Installation Scripts"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html#Step_2_-_Choose_Which_Installation_Script_To_Run" label="Step 2 - Choose Which Installation Script To Run"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html#Step_3_-_Running_The_Install_Script" label="Step 3 - Running The Install Script"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Installation-and-Set-Up.html#Step_4_-_Restart_Eclipse" label="Step 4 - Restart Eclipse"></topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html" label="Launching A Profile"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html#One-Click_Launch" label="One-Click Launch"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html#Launching_a_Customized_Profile" label="Launching a Customized Profile"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Launching-A-Profile.html#Manual_Profile" label="Manual Profile"></topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html" label="Profiling Configuration"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html#Operf_vs_Opcontrol" label="Operf vs Opcontrol"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html#Global_Settings" label="Global Settings"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html#Event_Configuration" label="Event Configuration"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html#Timer_Interrupt_Mode" label="Timer Interrupt Mode"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Profiling-Configuration.html#Regular_Mode" label="Regular Mode"></topic> - </topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html" label="OProfile View"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html#Features" label="Features"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html#View_Tree" label="View Tree"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/OProfile-View.html#View_Menu" label="View Menu"></topic> - </topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html" label="Remote OProfile"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html#Set-up" label="Set-up"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Remote-OProfile.html#Launching_A_Remote_Profile" label="Launching A Remote Profile"></topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Example-Project.html" label="Example Project"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html" label="Troubleshooting"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Install_Script_Errors" label="Install Script Errors"> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Error:_script_must_be_run_as_the_root_user" label="Error: script must be run as the root user"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Error:_script_must_be_run_with_pwd_in_script_dir" label="Error: script must be run with pwd in script dir"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Error:_required_binaries_do_not_exist.2C_OProfile_not_installed.3F" label="Error: required binaries do not exist, OProfile not installed?"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Error:_.2Fusr.2Fbin.2Fpkexec_does_not_exist" label="Error: /usr/bin/pkexec does not exist"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#install.sh:_line_47:_opcontrol:_Permission_denied" label="install.sh: line 47: opcontrol: Permission denied"></topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#No_Samples_From_A_Profile" label="No Samples From A Profile"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Log_Reader_Hangs" label="Log Reader Hangs"></topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Troubleshooting.html#Using_PolicyKit_with_X.2FVNC" label="Using PolicyKit with X/VNC"></topic> - </topic> - <topic href="Linux_Tools_Project/OProfile/User_Guide/Updating-This-Document.html" label="Updating This Document"></topic> - </topic> -</toc> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.project b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.project deleted file mode 100644 index a5702a738..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.project +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.launch.tests</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <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> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a571a447a..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,100 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=error -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.ui.prefs b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 879fe2634..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,54 +0,0 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=false -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=false -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=false -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 41a9c6232..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,14 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.launch.tests -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: %bundleProvider -Require-Bundle: - org.junit;bundle-version="4.10.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ActivationPolicy: lazy -Fragment-Host: org.eclipse.linuxtools.oprofile.launch -Import-Package: org.eclipse.linuxtools.profiling.tests -Bundle-Localization: plugin -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.launch.tests diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/about.html b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/build.properties deleted file mode 100644 index 19d923f90..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.properties,\ - resources/ -src.includes = resources/,\ - about.html -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/plugin.properties deleted file mode 100644 index a7eef039b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/plugin.properties +++ /dev/null @@ -1,14 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2009, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Kent Sebastian <ksebasti@redhat.com> - initial API and implementation -#******************************************************************************* -bundleName=OProfile Ui Tests Plug-in -bundleProvider=Eclipse Linux Tools diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/pom.xml deleted file mode 100644 index ffddb768b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.launch.tests</artifactId> - <version>1.0.0-SNAPSHOT</version> - <packaging>eclipse-test-plugin</packaging> - - <name>Linux Tools OProfile Launch Tests Plug-in</name> - - <build> - <plugins> - <plugin> - <groupId>org.eclipse.tycho</groupId> - <artifactId>tycho-surefire-plugin</artifactId> - <version>${tycho-version}</version> - <configuration> - <useUIHarness>true</useUIHarness> - <useUIThread>true</useUIThread> - <product>org.eclipse.platform.ide</product> - <testSuite>org.eclipse.linuxtools.oprofile.launch.tests</testSuite> - <testClass>org.eclipse.linuxtools.oprofile.launch.tests.AllLaunchTests</testClass> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.cproject b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.cproject deleted file mode 100644 index 189e0592c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.cproject +++ /dev/null @@ -1,593 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?fileVersion 4.0.0?> - -<cproject> -<storageModule moduleId="org.eclipse.cdt.core.settings"> -<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.403427377"> -<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.403427377" moduleId="org.eclipse.cdt.core.settings" name="Debug"> -<externalSettings/> -<extensions> -<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> -<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -</extensions> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<configuration artifactName="primeTest" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.403427377" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug"> -<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.403427377." name="/" resourcePath=""> -<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.558427244" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug"> -<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1359199583" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/> -<builder buildPath="${workspace_loc:/primeTest/Debug}" id="cdt.managedbuild.target.gnu.builder.exe.debug.586737917" managedBuildOn="true" name="Gnu Make Builder.Debug" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/> -<tool id="cdt.managedbuild.tool.gnu.archiver.base.2089156823" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/> -<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.838879119" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug"> -<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.2129883685" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/> -<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.900612275" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.890848790" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug"> -<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1566991183" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/> -<option id="gnu.c.compiler.exe.debug.option.debugging.level.733038562" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/> -<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.582042928" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1103748863" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"> -<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.720696663" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> -<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> -<additionalInput kind="additionalinput" paths="$(LIBS)"/> -</inputType> -</tool> -<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1031198340" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"/> -<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.711744790" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug"> -<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1029709722" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> -</tool> -</toolChain> -</folderInfo> -</configuration> -</storageModule> -<storageModule moduleId="scannerConfiguration"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.403427377;cdt.managedbuild.config.gnu.exe.debug.403427377.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.890848790;cdt.managedbuild.tool.gnu.c.compiler.input.582042928"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.24056498;cdt.managedbuild.config.gnu.exe.release.24056498.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1686021986;cdt.managedbuild.tool.gnu.c.compiler.input.1357248577"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -</storageModule> -<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> -</cconfiguration> -<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.24056498"> -<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.24056498" moduleId="org.eclipse.cdt.core.settings" name="Release"> -<externalSettings/> -<extensions> -<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> -<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -</extensions> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<configuration artifactName="primeTest" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.24056498" name="Release" parent="cdt.managedbuild.config.gnu.exe.release"> -<folderInfo id="cdt.managedbuild.config.gnu.exe.release.24056498." name="/" resourcePath=""> -<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.247847873" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release"> -<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.2144033541" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/> -<builder buildPath="${workspace_loc:/primeTest/Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.1815603600" managedBuildOn="true" name="Gnu Make Builder.Release" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/> -<tool id="cdt.managedbuild.tool.gnu.archiver.base.514329033" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/> -<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.732737648" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release"> -<option id="gnu.cpp.compiler.exe.release.option.optimization.level.1782789072" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/> -<option id="gnu.cpp.compiler.exe.release.option.debugging.level.883245152" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1686021986" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release"> -<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1286291976" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/> -<option id="gnu.c.compiler.exe.release.option.debugging.level.74557006" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/> -<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1357248577" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1980307205" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"> -<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1094559692" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> -<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> -<additionalInput kind="additionalinput" paths="$(LIBS)"/> -</inputType> -</tool> -<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.906024509" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release"/> -<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1057582725" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release"> -<inputType id="cdt.managedbuild.tool.gnu.assembler.input.592314293" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> -</tool> -</toolChain> -</folderInfo> -</configuration> -</storageModule> -<storageModule moduleId="scannerConfiguration"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.403427377;cdt.managedbuild.config.gnu.exe.debug.403427377.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.890848790;cdt.managedbuild.tool.gnu.c.compiler.input.582042928"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.24056498;cdt.managedbuild.config.gnu.exe.release.24056498.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1686021986;cdt.managedbuild.tool.gnu.c.compiler.input.1357248577"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -</storageModule> -</cconfiguration> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<project id="primeTest.cdt.managedbuild.target.gnu.exe.2060231390" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/> -</storageModule> -</cproject> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.project b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.project deleted file mode 100644 index bcbd6b7b3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/.project +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>primeTest</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> - <triggers>clean,full,incremental,</triggers> - <arguments> - <dictionary> - <key>?name?</key> - <value></value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.append_environment</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.autoBuildTarget</key> - <value>all</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildArguments</key> - <value></value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildCommand</key> - <value>make</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildLocation</key> - <value>${workspace_loc:/primeTest/Debug}</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.cleanBuildTarget</key> - <value>clean</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.contents</key> - <value>org.eclipse.cdt.make.core.activeConfigSettings</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableAutoBuild</key> - <value>false</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableCleanBuild</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableFullBuild</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.fullBuildTarget</key> - <value>all</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.stopOnError</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key> - <value>true</value> - </dictionary> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> - <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> - <nature>org.eclipse.cdt.core.cnature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/primeTest.c b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/primeTest.c deleted file mode 100644 index df4f802a0..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/primeTest/primeTest.c +++ /dev/null @@ -1,36 +0,0 @@ -void -PrimeFactors(int n) -{ - int count = 0; - int temp = 0; - int i = 0; - for (i = 1; i <= n; i++) - { - int j = i - 1; - while (j > 1) - { - if (i % j == 0) //Is PRIME - break; - else - j--; - } - - if (j == 1) - { - if (n % i == 0) - { - if (i > temp) - temp = i; - count++; - } - } - } -} - -int -main() -{ - int a = 35324; - PrimeFactors(a); - return 0; -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.cproject b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.cproject deleted file mode 100644 index cd18366c9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.cproject +++ /dev/null @@ -1,593 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?fileVersion 4.0.0?> - -<cproject> -<storageModule moduleId="org.eclipse.cdt.core.settings"> -<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1175678966"> -<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1175678966" moduleId="org.eclipse.cdt.core.settings" name="Debug"> -<externalSettings/> -<extensions> -<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> -<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -</extensions> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<configuration artifactName="sleepTest" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1175678966" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug"> -<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1175678966." name="/" resourcePath=""> -<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1707235535" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug"> -<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1214447499" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/> -<builder buildPath="${workspace_loc:/sleepTest/Debug}" id="cdt.managedbuild.target.gnu.builder.exe.debug.1027550092" managedBuildOn="true" name="Gnu Make Builder.Debug" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/> -<tool id="cdt.managedbuild.tool.gnu.archiver.base.1529643871" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/> -<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.339425130" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug"> -<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1980513678" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/> -<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.587285095" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1711527348" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug"> -<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.948398850" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/> -<option id="gnu.c.compiler.exe.debug.option.debugging.level.1175577535" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/> -<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1219179977" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.546839158" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"> -<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1380471818" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> -<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> -<additionalInput kind="additionalinput" paths="$(LIBS)"/> -</inputType> -</tool> -<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1493322213" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"/> -<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1271920137" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug"> -<inputType id="cdt.managedbuild.tool.gnu.assembler.input.2029809829" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> -</tool> -</toolChain> -</folderInfo> -</configuration> -</storageModule> -<storageModule moduleId="scannerConfiguration"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1894586679;cdt.managedbuild.config.gnu.exe.release.1894586679.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1456980182;cdt.managedbuild.tool.gnu.c.compiler.input.1930258097"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1175678966;cdt.managedbuild.config.gnu.exe.debug.1175678966.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1711527348;cdt.managedbuild.tool.gnu.c.compiler.input.1219179977"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -</storageModule> -<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> -</cconfiguration> -<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.1894586679"> -<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.1894586679" moduleId="org.eclipse.cdt.core.settings" name="Release"> -<externalSettings/> -<extensions> -<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> -<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> -</extensions> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<configuration artifactName="sleepTest" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.1894586679" name="Release" parent="cdt.managedbuild.config.gnu.exe.release"> -<folderInfo id="cdt.managedbuild.config.gnu.exe.release.1894586679." name="/" resourcePath=""> -<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1335316415" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release"> -<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1056384912" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/> -<builder buildPath="${workspace_loc:/sleepTest/Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.1890388296" managedBuildOn="true" name="Gnu Make Builder.Release" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/> -<tool id="cdt.managedbuild.tool.gnu.archiver.base.1599654641" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/> -<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.110695799" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release"> -<option id="gnu.cpp.compiler.exe.release.option.optimization.level.483218288" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/> -<option id="gnu.cpp.compiler.exe.release.option.debugging.level.1740548907" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1456980182" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release"> -<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.564508580" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/> -<option id="gnu.c.compiler.exe.release.option.debugging.level.216318945" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/> -<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1930258097" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> -</tool> -<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1609842259" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"> -<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1263392915" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> -<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> -<additionalInput kind="additionalinput" paths="$(LIBS)"/> -</inputType> -</tool> -<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1176128340" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release"/> -<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1836498428" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release"> -<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1282718375" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> -</tool> -</toolChain> -</folderInfo> -</configuration> -</storageModule> -<storageModule moduleId="scannerConfiguration"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1894586679;cdt.managedbuild.config.gnu.exe.release.1894586679.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1456980182;cdt.managedbuild.tool.gnu.c.compiler.input.1930258097"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1175678966;cdt.managedbuild.config.gnu.exe.debug.1175678966.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1711527348;cdt.managedbuild.tool.gnu.c.compiler.input.1219179977"> -<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="makefileGenerator"> -<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC"> -<buildOutputProvider> -<openAction enabled="true" filePath=""/> -<parser enabled="true"/> -</buildOutputProvider> -<scannerInfoProvider id="specsFile"> -<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/> -<parser enabled="true"/> -</scannerInfoProvider> -</profile> -</scannerConfigBuildInfo> -</storageModule> -</cconfiguration> -</storageModule> -<storageModule moduleId="cdtBuildSystem" version="4.0.0"> -<project id="sleepTest.cdt.managedbuild.target.gnu.exe.918644780" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/> -</storageModule> -</cproject> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.project b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.project deleted file mode 100644 index 8e8d33630..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/.project +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>sleepTest</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> - <triggers>clean,full,incremental,</triggers> - <arguments> - <dictionary> - <key>?name?</key> - <value></value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.append_environment</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.autoBuildTarget</key> - <value>all</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildArguments</key> - <value></value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildCommand</key> - <value>make</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.buildLocation</key> - <value>${workspace_loc:/sleepTest/Debug}</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.cleanBuildTarget</key> - <value>clean</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.contents</key> - <value>org.eclipse.cdt.make.core.activeConfigSettings</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableAutoBuild</key> - <value>false</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableCleanBuild</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.enableFullBuild</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.fullBuildTarget</key> - <value>all</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.stopOnError</key> - <value>true</value> - </dictionary> - <dictionary> - <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key> - <value>true</value> - </dictionary> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> - <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> - <nature>org.eclipse.cdt.core.cnature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/sleepTest.c b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/sleepTest.c deleted file mode 100644 index e13b08b06..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/resources/sleepTest/sleepTest.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <unistd.h> - -int main() { - sleep(10); - return 0; -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunching.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunching.java deleted file mode 100644 index 447ffd86a..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunching.java +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.oprofile.launch.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.Launch; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileSetupTab; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.LaunchTestingOptions; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.OprofileTestingEventConfigTab; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.TestingOprofileLaunchConfigurationDelegate; -import org.eclipse.linuxtools.profiling.tests.AbstractTest; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; - -public class TestLaunching extends AbstractTest { - private ILaunchConfiguration config; - private Shell testShell; - - @Before - public void setUp() throws Exception { - proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), "primeTest"); //$NON-NLS-1$ - config = createConfiguration(proj.getProject()); - testShell = new Shell(Display.getDefault()); - testShell.setLayout(new GridLayout()); - } - - @After - public void tearDown() throws Exception { - testShell.dispose(); - deleteProject(proj); - } - - @Override - protected ILaunchConfigurationType getLaunchConfigType() { - return getLaunchManager().getLaunchConfigurationType(OprofileLaunchPlugin.ID_LAUNCH_PROFILE); - } - - @Override - protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) { - OprofileTestingEventConfigTab configTab = new OprofileTestingEventConfigTab(); - OprofileSetupTab setupTab = new OprofileSetupTab(); - configTab.setOprofileProject(proj.getProject()); - configTab.setDefaults(wc); - setupTab.setDefaults(wc); - } - @Test - public void testDefaultLaunch() throws CoreException { - TestingOprofileLaunchConfigurationDelegate delegate = new TestingOprofileLaunchConfigurationDelegate(); - ILaunch launch = new Launch(config, ILaunchManager.PROFILE_MODE, null); - - LaunchTestingOptions options = new LaunchTestingOptions(); - options.setOprofileProject(proj.getProject()); - options.loadConfiguration(config); - assertTrue(options.isValid()); - assertTrue(options.getBinaryImage().isEmpty()); - assertTrue(options.getKernelImageFile().isEmpty()); - assertEquals(OprofileDaemonOptions.SEPARATE_NONE, options.getSeparateSamples()); - Oprofile.OprofileProject.setProfilingBinary(Oprofile.OprofileProject.OPERF_BINARY); - delegate.launch(config, ILaunchManager.PROFILE_MODE, launch, null); - } - @Test - public void testEventLaunch() throws CoreException { - TestingOprofileLaunchConfigurationDelegate delegate = new TestingOprofileLaunchConfigurationDelegate(); - ILaunch launch = new Launch(config, ILaunchManager.PROFILE_MODE, null); - - ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); - wc.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false); - wc.setAttribute(OprofileLaunchPlugin.attrConterEnabled(0), true); - wc.setAttribute(OprofileLaunchPlugin.attrCounterCount(0), 100000); - wc.setAttribute(OprofileLaunchPlugin.attrConterEvent(0, 0), "FAKE_EVENT"); //$NON-NLS-1$ - wc.setAttribute(OprofileLaunchPlugin.attrCounterProfileKernel(0), true); - wc.setAttribute(OprofileLaunchPlugin.attrCounterProfileUser(0), true); - wc.setAttribute(OprofileLaunchPlugin.attrCounterUnitMask(0), 0); - wc.doSave(); - LaunchTestingOptions options = new LaunchTestingOptions(); - options.setOprofileProject(proj.getProject()); - options.loadConfiguration(config); - assertTrue(options.isValid()); - assertTrue(options.getBinaryImage().isEmpty()); - assertTrue(options.getKernelImageFile().isEmpty()); - assertEquals(OprofileDaemonOptions.SEPARATE_NONE, options.getSeparateSamples()); - - Oprofile.OprofileProject.setProfilingBinary(Oprofile.OprofileProject.OPERF_BINARY); - delegate.launch(config, ILaunchManager.PROFILE_MODE, launch, null); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunchingExternalProject.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunchingExternalProject.java deleted file mode 100644 index a1e2789da..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestLaunchingExternalProject.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.oprofile.launch.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.File; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.Launch; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileSetupTab; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.LaunchTestingOptions; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.OprofileTestingEventConfigTab; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.TestingOprofileLaunchConfigurationDelegate; -import org.eclipse.linuxtools.profiling.tests.AbstractTest; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; - -public class TestLaunchingExternalProject extends AbstractTest { - - private final Path EXTERNAL_PROJECT_PATH = new Path("/tmp/eclipse-oprofile-ext_project_test"); //$NON-NLS-1$ - private final String PROJECT_NAME = "primeTest"; //$NON-NLS-1$ - private ILaunchConfiguration config; - private Shell testShell; - private IProject externalProject; // external project to work with - - @Before - public void setUp() throws Exception { - // Setup a temporary workspace external path - File tempExternalProjectPath = EXTERNAL_PROJECT_PATH.toFile(); - // create directory if not existing - if (!tempExternalProjectPath.exists()) { - tempExternalProjectPath.mkdir(); - } - externalProject = createExternalProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), - PROJECT_NAME, EXTERNAL_PROJECT_PATH); - config = createConfiguration(externalProject); - testShell = new Shell(Display.getDefault()); - testShell.setLayout(new GridLayout()); - } - - @After - public void tearDown() throws Exception { - testShell.dispose(); - externalProject.delete(true, null); // delete project - // cleanup temporary directory - File tempExternalProjectPath = EXTERNAL_PROJECT_PATH.toFile(); - if (tempExternalProjectPath.exists()) { - tempExternalProjectPath.delete(); - } - } - - // Implemented abstract method of AbstractTest - @Override - protected ILaunchConfigurationType getLaunchConfigType() { - return getLaunchManager().getLaunchConfigurationType(OprofileLaunchPlugin.ID_LAUNCH_PROFILE); - } - - // Implemented abstract method of AbstractTest - @Override - protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) { - OprofileTestingEventConfigTab configTab = new OprofileTestingEventConfigTab(); - configTab.setOprofileProject(externalProject); - OprofileSetupTab setupTab = new OprofileSetupTab(); - configTab.setDefaults(wc); - setupTab.setDefaults(wc); - } - - /** - * Testcase for Eclipse BugZilla 321905/RedHat BZ - * - * @throws CoreException - */ - @Test - public void testLaunchExternalProject() throws CoreException { - LaunchTestingOptions options = new LaunchTestingOptions(); - options.setOprofileProject(externalProject); - options.loadConfiguration(config); - - TestingOprofileLaunchConfigurationDelegate delegate = new TestingOprofileLaunchConfigurationDelegate(); - ILaunch launch = new Launch(config, ILaunchManager.PROFILE_MODE, null); - - assertTrue(options.isValid()); - assertTrue(options.getBinaryImage().isEmpty()); - assertTrue(options.getKernelImageFile().isEmpty()); - assertEquals(OprofileDaemonOptions.SEPARATE_NONE, options.getSeparateSamples()); - - OprofileProject.setProfilingBinary(OprofileProject.OPERF_BINARY); - delegate.launch(config, ILaunchManager.PROFILE_MODE, launch, null); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestSetup.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestSetup.java deleted file mode 100644 index 5a7c48616..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/TestSetup.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.oprofile.launch.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.ui.ILaunchConfigurationTab; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileSetupTab; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.LaunchTestingOptions; -import org.eclipse.linuxtools.oprofile.launch.tests.utils.OprofileTestingEventConfigTab; -import org.eclipse.linuxtools.profiling.tests.AbstractTest; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.osgi.framework.FrameworkUtil; - -public class TestSetup extends AbstractTest { - protected ILaunchConfiguration config; - protected Shell testShell; - protected IProject project; - - @Before - public void setUp() throws Exception { - proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), "primeTest"); //$NON-NLS-1$ - project = proj.getProject(); - config = createConfiguration(proj.getProject()); - testShell = new Shell(Display.getDefault()); - testShell.setLayout(new GridLayout()); - } - - @After - public void tearDown() throws Exception { - testShell.dispose(); - deleteProject(proj); - } - - @Override - protected ILaunchConfigurationType getLaunchConfigType() { - return getLaunchManager().getLaunchConfigurationType(OprofileLaunchPlugin.ID_LAUNCH_PROFILE); - } - - @Override - protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) { - OprofileTestingEventConfigTab configTab = new OprofileTestingEventConfigTab(); - OprofileSetupTab setupTab = new OprofileSetupTab(); - configTab.setOprofileProject(proj.getProject()); - configTab.setDefaults(wc); - setupTab.setDefaults(wc); - } - - //getter functions for otherwise unaccessible member variables - private class OprofileTestingSetupTab extends OprofileSetupTab { - @Override - protected IProject getOprofileProject() { return proj.getProject(); } - @Override - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - options = new LaunchTestingOptions(); - options.saveConfiguration(config); - } - protected Button getKernelCheck() { return checkSeparateKernel; } - protected Button getLibraryCheck() { return checkSeparateLibrary; } - protected Text getTextKernelImage() { return kernelImageFileText; } - } - @Test - public void testSetupTab() throws CoreException { - OprofileTestingSetupTab tab = new OprofileTestingSetupTab(); - tab.createControl(new Shell()); - assertNotNull(tab.getImage()); - assertNotNull(tab.getName()); - - ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); - - //default config - tab.setDefaults(wc); - tab.initializeFrom(config); - - Button libraryCheck = tab.getLibraryCheck(); - libraryCheck.setSelection(true); - libraryCheck.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertEquals(OprofileDaemonOptions.SEPARATE_LIBRARY, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); - libraryCheck.setSelection(false); - libraryCheck.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertEquals(OprofileDaemonOptions.SEPARATE_NONE, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); - - Button kernelCheck = tab.getKernelCheck(); - kernelCheck.setSelection(true); - kernelCheck.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertEquals(OprofileDaemonOptions.SEPARATE_KERNEL, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); - kernelCheck.setSelection(false); - kernelCheck.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertEquals(OprofileDaemonOptions.SEPARATE_NONE, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); - - libraryCheck.setSelection(true); - libraryCheck.notifyListeners(SWT.Selection, null); - kernelCheck.setSelection(true); - kernelCheck.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - tab.initializeFrom(config); - assertTrue(libraryCheck.getSelection()); - assertTrue(kernelCheck.getSelection()); - - Text kernelLocationText = tab.getTextKernelImage(); - kernelLocationText.setText("doesntexist"); //$NON-NLS-1$ - kernelLocationText.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertFalse(tab.isValid(config)); - - kernelLocationText.setText(""); //$NON-NLS-1$ - kernelLocationText.notifyListeners(SWT.Selection, null); - performApply(tab, wc); - assertTrue(tab.isValid(config)); - } - @Test - public void testEventConfigTab() throws CoreException { - OprofileTestingEventConfigTab tab = new OprofileTestingEventConfigTab(); - tab.createControl(new Shell()); - assertNotNull(tab.getImage()); - assertNotNull(tab.getName()); - - tab.setDefaults(config.getWorkingCopy()); - tab.initializeFrom(config); - assertTrue(tab.isValid(config)); - - assertTrue(tab.getDefaultCheck().getSelection()); - tab.getDefaultCheck().notifyListeners(SWT.Selection, null); - tab.getDefaultCheck().setSelection(false); - tab.getDefaultCheck().notifyListeners(SWT.Selection, null); - - ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); - wc.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false); - performApply(tab, wc); - assertFalse(tab.isValid(config)); - } - private void performApply (ILaunchConfigurationTab tab , ILaunchConfigurationWorkingCopy wc) throws CoreException { - tab.performApply(wc); - wc.doSave(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/LaunchTestingOptions.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/LaunchTestingOptions.java deleted file mode 100644 index 1e48cb43c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/LaunchTestingOptions.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.launch.tests.utils; - -import org.eclipse.core.resources.IProject; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.LaunchOptions; - -public class LaunchTestingOptions extends LaunchOptions { - private IProject project; - - public void setOprofileProject(IProject proj) { - project = proj; - } - - @Override - protected IProject getOprofileProject() { - return project; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/OprofileTestingEventConfigTab.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/OprofileTestingEventConfigTab.java deleted file mode 100644 index cac04d744..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/OprofileTestingEventConfigTab.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.launch.tests.utils; - -import org.eclipse.core.resources.IProject; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask.MaskInfo; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.AbstractEventConfigTab; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileCounter; -import org.eclipse.swt.widgets.Button; - -// mock event configuration tab -public class OprofileTestingEventConfigTab extends AbstractEventConfigTab { - private IProject project; - - @Override - protected boolean getOprofileTimerMode() { - return false; - } - - @Override - protected int getNumberOfOprofileCounters() { - return 1; - } - - @Override - protected boolean checkEventSetupValidity(int counter, String name, - int maskValue) { - return true; - } - - @Override - protected IProject getOprofileProject() { - return project; - } - - @Override - public void setOprofileProject(IProject proj) { - project = proj; - } - - @Override - protected void updateOprofileInfo() { - } - - public Button getDefaultCheck() { - return defaultEventCheck; - } - - @Override - protected OprofileCounter[] getOprofileCounters(ILaunchConfiguration config) { - // setup and return mock counters - OprofileCounter[] ctrs = new OprofileCounter[] { getOprofileCounter(1) }; - return ctrs; - } - - @Override - public OprofileCounter getOprofileCounter(int i) { - // mock mask info - MaskInfo maskInfo = new MaskInfo(); - maskInfo.description = "mock mask info"; //$NON-NLS-1$ - maskInfo.value = 0; - - MaskInfo[] maskInfoDescriptions = { maskInfo }; - - // mock mask - OpUnitMask mask = new OpUnitMask(); - mask.setDefault(0); - mask.setMaskDescriptions(maskInfoDescriptions); - mask.setType(0); - mask.setMaskFromIndex(0); - mask.setMaskValue(0); - - // mock events - OpEvent event = new OpEvent(); - event.setMinCount(1); - event.setText("mock-event"); //$NON-NLS-1$ - event.setTextDescription("Mock Event"); //$NON-NLS-1$ - event.setUnitMask(mask); - - OpEvent[] events = { event }; - - // mock counter - OprofileCounter ctr = new OprofileCounter(i, events); - ctr.setCount(1); - ctr.setEvents(new OpEvent [] {event}); - - return ctr; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/TestingOprofileLaunchConfigurationDelegate.java b/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/TestingOprofileLaunchConfigurationDelegate.java deleted file mode 100644 index 11a83ee83..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch.tests/src/org/eclipse/linuxtools/oprofile/launch/tests/utils/TestingOprofileLaunchConfigurationDelegate.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * Severin Gehwolf <sgehwolf@redhat.com> - moved to separate class - *******************************************************************************/ - -package org.eclipse.linuxtools.oprofile.launch.tests.utils; - -import java.net.URI; - -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.LaunchOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileCounter; -import org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchConfigurationDelegate; - -/** - * Helper delegate class - */ -public final class TestingOprofileLaunchConfigurationDelegate extends - OprofileLaunchConfigurationDelegate { - public boolean eventsIsNull; - public OprofileDaemonOptions _options; - - @Override - protected boolean oprofileStatus() { - return false; - } - - @Override - protected void postExec(LaunchOptions options, - OprofileDaemonEvent[] daemonEvents, Process process) { - super.postExec(options, daemonEvents, process); - - try { - process.waitFor(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - @Override - protected OprofileCounter[] oprofileCounters(ILaunchConfiguration config) { - return new OprofileCounter[0]; - - } - - @Override - protected URI oprofileWorkingDirURI(ILaunchConfiguration config){ - return oprofileProject().getLocationURI(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.launch/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/.project b/oprofile/org.eclipse.linuxtools.oprofile.launch/.project deleted file mode 100644 index 1af4663e6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/.project +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.launch</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 269514738..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,104 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.launch/META-INF/MANIFEST.MF deleted file mode 100644 index efad52a39..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/META-INF/MANIFEST.MF +++ /dev/null @@ -1,33 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.launch;singleton:=true -Bundle-Version: 1.1.0.qualifier -Bundle-Vendor: %bundleProvider -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0", - org.eclipse.linuxtools.tools.launch.core, - org.eclipse.linuxtools.profiling.launch;bundle-version="0.9.0", - org.eclipse.cdt.core;bundle-version="5.3.0", - org.eclipse.core.filesystem;bundle-version="1.3.100", - org.eclipse.ui;bundle-version="3.4.0", - org.eclipse.debug.ui;bundle-version="3.7.0" -Bundle-Activator: org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin -Bundle-ActivationPolicy: lazy -Bundle-Localization: plugin -Import-Package: org.eclipse.cdt.core.model, - org.eclipse.cdt.debug.core, - org.eclipse.cdt.launch, - org.eclipse.core.resources, - org.eclipse.debug.core, - org.eclipse.debug.ui, - org.eclipse.linuxtools.internal.oprofile.core, - org.eclipse.linuxtools.internal.oprofile.core.daemon, - org.eclipse.linuxtools.internal.oprofile.ui, - org.eclipse.linuxtools.internal.oprofile.ui.view, - org.eclipse.linuxtools.profiling.launch, - org.eclipse.ui -Export-Package: org.eclipse.linuxtools.internal.oprofile.launch;x-friends:="org.eclipse.linuxtools.oprofile.remote.launch", - org.eclipse.linuxtools.internal.oprofile.launch.configuration;x-friends:="org.eclipse.linuxtools.oprofile.remote.launch", - org.eclipse.linuxtools.internal.oprofile.launch.launching;x-friends:="org.eclipse.linuxtools.oprofile.remote.launch" -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.launch diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/about.html b/oprofile/org.eclipse.linuxtools.oprofile.launch/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.launch/build.properties deleted file mode 100644 index 783b22fa3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/build.properties +++ /dev/null @@ -1,10 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - plugin.properties,\ - icons/,\ - about.html -src.includes = about.html,\ - icons/ -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/event_tab.gif b/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/event_tab.gif deleted file mode 100644 index c91f254ab1728df3d6555002c789ef4519693eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmZ?wbhEHb6krfwIK}`1%*@QJER6Q{@oK^K2I2LhDcg(_x<ymB#m2^pXYPoPkC({a zZI{|3mAl72W0Fk%9+`r@a>WNyQ|mJ_G8D=VDOVm*t39S!d(@!jh<5!k&BhZ3jmK+i zYn}Vf*iAU+IQ7#0dV9BNmwaYk4q0>~YT@;Y`THy9@83V)e!+qzP0NqAt~`E!zJ2kA zdvo_*nZNhS)ML-59eY0G_>2Gh?U$Z=z3bM;UAI3Sy7TV;{rFQ)zMgvW?d+4U7oL1L z|Log^XJ4<s_<Zfvk87`gU4QfI#+zTa-u$@p=Eu#qzwW;Map&FdyFm2*_r3SO@4x^3 z@cqw+?|(i1@axHkACEr%dHnIu(~p0ieEReB)1PObem(pA=LHab`Sa@Q-`C&%zWMg| z?YF=0zW;sy{qLur|Nj4<|Nr*~a8Oa7Q2fcl$i-04paU`*6ekSq#~SLJ>V;Zcn>(7s zC3H=#&2;5eI_t%h9pYltV&eVe6gs6`^&&&~Lxc6*Wjgo_;%oxFc)f${;|+zHc`Tzt zyqs8_eZphyM4JU%)Pp?CSscAWwR}%BaoGlhc(Yr%9T8#RZsstG3l8-5^br<jv;d}n zCZ#a#$e@sLW{pG(3yo)gI|G<bi|eXcF>p*~a_EwL#FBf$;W4KK!+(YjMuTQn1{Wb7 nkBEkiirivMLIFZY^4*RLFokWBVK}h3VTKXwL>YAr0S0RTR(c5A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/global_tab.gif b/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/global_tab.gif deleted file mode 100644 index ec6cca4525bf483077bcc2039eaede6e71258c89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmZ?wbhEHb6krfwxXQo~6H^{jeln(fZOo*T0n4t1_pLGO*y1x`Q}l#2#d9{*&R!j} z=48ytlQC=8PC9vVEf75cDvl|iRDSZw$w?>6*Pfg-V@=K4ljW1v0+qx}ngk@vPoA7q zUJhiJLo_{ka&qV9;sbl<|Nryp$;q{o)ztp~|6g8S4kQ^U28usf7#SEe8FWA<f&9e4 z)_!10frpNiV|R*Biin!~l9PuU10=-x13Fxad?eagK5kT)YP0YX=OG0NyTeDHhzNyR zEIgK^@ZpGhv8sr;qL^TfMq!+=w79s0v``I0AvYf%uau;eEYrMBrxYF@X4z#L^Xr^E ryja!dF=;UPILlWv*UV=qaFu7=uyMDqrh?oi4Y@6cPoMF1WUvMRl^lM1 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_manual_run.png b/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_manual_run.png deleted file mode 100644 index e14bdbeb41a4f32b13712b6ed4bd3abc91ba2395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 zcmV;>0x$iEP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02rG902rGANp*vi00007bV*G`2iXS( z5i>ZiBXD8>00K}+L_t(I%cYaeOH@%9#((GBnejG`W1>zum@_R>Zeih~!Vp?0W1(QV zNQerATD9pvXi<MdyY{vU#DxqcA+3ZU0@D%&u@rJ52j}D7Irp5?LLJRbQ19w_A6_2b z=ly{H3;~eK<sz9(=1C%v$Qom;)*7v~)kb6VUVgwEt!>r!7t7`H%X~g>Be`4-&+}e+ zo;R+wMk$3-iZBchu?kV)0ai3Bg%F|-cpL#}ZEGDV6bekenL;KdrH(SSLJeP6@$oSj zEEX(8H=|7SO%RL4h5#b@e4c@U0d29w+v7N=9f}W1i1z}up{U3T22=MORzt7=d!*dw zb-hA@PH1TQ>--J{>=6OKBS8KV&>;RMU;!d~&>DoG++Jp<zes!~j(;K`dAWsDHccjy zMre(+4r|+Me{>KzYQf!cNzcS7oh;*A2?;A9O>=^~y~CVs>B4awR&TEId10O1-Qyhq zQb`=&0RzsND9)_qPIio;-f>c?PNbAv>M7AIr(xlvTNkh#88bi?M5Dkj1f;q;NhI4* z+Je@|sLQ$T3w+!9nK){}0u+A~kxEjL6@nKvST}^{9V%6yn6dknmOu%DAk=k%?d|Qi zp6A`4yfIn7!Y~XW3*ioY-`t|Dtqmz1YPEo+rDeW+U74@{g6q1;o}Qj}&CShy)>@1) z7-O*35{)%*wf{PUgTqM2VR`WrrR5K#PNmeNr_W;bWeXu9*4m3e^!UO@MsBA^N5`%O zTASIK>A73|y{`)!>#o&$QT*c<r=CB&H!ot1-M<0Q3nqCef}N%S0000<MNUMnLSTaW CygQ8m diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_run.png b/oprofile/org.eclipse.linuxtools.oprofile.launch/icons/profile_run.png deleted file mode 100644 index 4f8488f1c0c23bdc8703856b2a3baae022046332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;z9%{{UP0v71Ez000SaNLh0L02rG902rGANp*vi0005+Nkl<ZI1!~% zy^9l35dZDxt$Q(1&J*uIa@d3*2q_eVloAf?Y_3wc+Qz@e&i*XytfHcYe}N(*cS1n0 zFbgIj`;ojaXI`=!!{tEmy`6b8vopV){k;MHb2(h!>-GF*v-zx6s~u>qjZz9EMrj4D z7JeDm6wiy|OPZ!H`u)D~sTl2c`z6UEE)+soky5T~LAG4R>HRi|<2W7q_EVob*txdz zFi8@eygh+icQM^dF;C_wRE~nSrfq2R6Z{Nt)Hy;Jh7Y*br#8^-b`>YYyD_{Q9>!0m za6UQ^KLj#2vjCjTOXku7k*V2tS<zC9gEU1{joiys<RW7QK%G?p#oi3=Z{l{#@_SJ+ z$El2dffbC=#0t{g6r=lN#HTTeOEc8(Ud8o;eT4oNNeIvQ_<HuqmXNX?EC7}rM574% zuVYNFr10)Z$V}q<t8Z%@1X)l5*bWvPa0j$p;le9Ci|ySEke_B{@}_f*1M5^-IpAzN zkcp^58;rj=SQ0Y+HMU*w)y<yIA<hV(yr&XjL`Ks(D}do}_>Ly=@$untHHAEh@)n7m zKt7jpTSC(x=Xw5yVeDN+QB-fWS|1vXM#mTfntLmoY>rJPllOzc;E?j>)n(Ic`}Fb- qfmSrzM$fB)LZ3<2c{`u?Z;?OB0TZGI2?9z00000<MNUMnLSTY=brB^1 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.properties deleted file mode 100644 index 211586e92..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.properties +++ /dev/null @@ -1,33 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2008, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat, Inc. - initial API and implementation -#******************************************************************************* -bundleName=OProfile Launch Plug-in -bundleProvider=Eclipse Linux Tools - -pluginName=OProfile Launch Support -launchconfigurationtype.label=Profile With OProfile -launchconfigurationtype.manual.label=Profile With OProfile (Manual) - -launchgroup.label=OProfile -launchgroup.titile=Select a run configuration to profile with OProfile - -launchmode.label=Profile -launchmode.launchaslabel=Profile As - -launchshortcuts.label=Profile With OProfile - -manual.launchconfigurationtype.label=Profile With OProfile (Manual) -manual.launchshortcuts.label=Profile With OProfile (Manual) - -oprofileLaunchConfiguration.name.0=Oprofile -oprofileLaunchConfiguration.description=Hardware/Software Events Timing -oprofileLaunchConfiguration.information=Note: requires root password to execute OProfile commands. \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.xml b/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.xml deleted file mode 100644 index 323651b32..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/plugin.xml +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.2"?> -<plugin> - <extension - point="org.eclipse.debug.core.launchConfigurationTypes"> - <launchConfigurationType - delegate="org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchConfigurationDelegate" - id="org.eclipse.linuxtools.oprofile.launch.oprofile" - modes="linuxtools" - name="%launchconfigurationtype.label" - public="true" - sourceLocatorId="org.eclipse.cdt.launch.DefaultSourceLocator" - sourcePathComputerId="org.eclipse.cdt.debug.core.sourcePathComputer"> - </launchConfigurationType> - </extension> - <extension - point="org.eclipse.debug.ui.launchConfigurationTypeImages"> - <launchConfigurationTypeImage - configTypeID="org.eclipse.linuxtools.oprofile.launch.oprofile" - icon="icons/profile_run.png" - id="org.eclipse.linuxtools.oprofile.launch.oprofileImage"> - </launchConfigurationTypeImage> - </extension> - <extension - point="org.eclipse.debug.ui.launchConfigurationTabGroups"> - <launchConfigurationTabGroup - class="org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileLaunchConfigurationTabGroup" - id="org.eclipse.linuxtools.oprofile.launch.launchConfigurationTabGroup" - type="org.eclipse.linuxtools.oprofile.launch.oprofile"> - </launchConfigurationTabGroup> - </extension> - <extension - point="org.eclipse.debug.ui.launchShortcuts"> - <shortcut - class="org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchShortcut" - icon="icons/profile_run.png" - id="org.eclipse.linuxtools.oprofile.launch.profileshortcut" - label="%launchshortcuts.label" - modes="linuxtools"> - <contextualLaunch> - <enablement> -<!-- FIXME: this is not a proper enablement condition --> - <with variable="selection"> - <count value="1"></count> - - <iterate> - <or> - <instanceof value="org.eclipse.cdt.core.model.IBinary"/> - <instanceof value="org.eclipse.cdt.core.model.ICProject"/> - <test property="org.eclipse.cdt.launch.isExecutable"/> - <test property="org.eclipse.cdt.launch.isCProject"/> - <and> - <instanceof value="org.eclipse.ui.IFileEditorInput"/> - <adapt type="org.eclipse.core.resources.IResource"> - <adapt type="org.eclipse.cdt.core.model.ICElement"/> - </adapt> - </and> - </or> - </iterate> - - </with> - </enablement> - </contextualLaunch> - </shortcut> - </extension> - <extension - point="org.eclipse.linuxtools.profiling.launch.launchProvider"> - <provider - delegate="org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchConfigurationDelegate" - description="%oprofileLaunchConfiguration.description" - id="org.eclipse.linuxtools.oprofile.launch.provider" - information="%oprofileLaunchConfiguration.information" - name="%oprofileLaunchConfiguration.name.0" - priority="2" - shortcut="org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchShortcut" - tabgroup="org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileLaunchConfigurationTabGroup" - type="timing"> - </provider> - </extension> -</plugin> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.launch/pom.xml deleted file mode 100644 index 846db1dc4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.launch</artifactId> - <version>1.1.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile Launch Plug-in</name> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchMessages.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchMessages.java deleted file mode 100644 index db4682deb..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public final class OprofileLaunchMessages { - private static final String BUNDLE_NAME = "org.eclipse.linuxtools.internal.oprofile.launch.oprofilelaunch"; //$NON-NLS-1$ - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); - - private OprofileLaunchMessages() { - } - - public static String getString(String key) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (MissingResourceException e) { - return '!' + key + '!'; - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchPlugin.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchPlugin.java deleted file mode 100644 index 300ed93fb..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/OprofileLaunchPlugin.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.EventConfigCache; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - - -/** - * The main plugin class to be used in the desktop. - */ -public class OprofileLaunchPlugin extends AbstractUIPlugin { - //The shared instance. - private static OprofileLaunchPlugin plugin; - //shared cache instance for configuration - private static EventConfigCache eventConfigCache = null; - - public static final String PLUGIN_ID = "org.eclipse.linuxtools.oprofile.launch"; //$NON-NLS-1$ - - // The launch type ID for profiling - public static final String ID_LAUNCH_PROFILE = PLUGIN_ID + ".oprofile"; //$NON-NLS-1$ - - /* Launch Configuration attributes */ - - // Global options \\ - public static final String ATTR_KERNEL_IMAGE_FILE = ID_LAUNCH_PROFILE + ".KERNEL_IMAGE"; //$NON-NLS-1$ - public static final String ATTR_SEPARATE_SAMPLES = ID_LAUNCH_PROFILE + ".SEPARATE_SAMPLES"; //$NON-NLS-1$ - public static final String ATTR_USE_DEFAULT_EVENT = ID_LAUNCH_PROFILE + ".USE_DEFAULT_EVENT"; //$NON-NLS-1$ - public static final String ATTR_EXECUTIONS_NUMBER = ID_LAUNCH_PROFILE + ".EXECUTIONS_NUMBER"; //$NON-NLS-1$ - - /** - * @since 2.1 - */ - public static final String ATTR_OPROFILE_COMBO_TEXT = ID_LAUNCH_PROFILE + ".OPROFILE_COMBO_TEXT"; //$NON-NLS-1$ - - // Counter Attributes \\ - private static final String attrCounter(int nr) { return ID_LAUNCH_PROFILE + ".COUNTER_" + nr; } //$NON-NLS-1$ - public static final String attrConterEnabled(int nr) { return attrCounter(nr) + ".ENABLED"; } //$NON-NLS-1$ - public static final String attrConterEvent(int nr, int ev) { return attrCounter(nr) + ".EVENT " + ev; } //$NON-NLS-1$ - public static final String attrCounterProfileKernel(int nr) { return attrCounter(nr) + ".PROFILE_KERNEL"; } //$NON-NLS-1$ - public static final String attrCounterProfileUser(int nr) { return attrCounter(nr) + ".PROFILE_USER"; } //$NON-NLS-1$ - public static final String attrCounterCount(int nr) { return attrCounter(nr) + ".COUNT"; } //$NON-NLS-1$ - public static final String attrCounterUnitMask(int nr) { return attrCounter(nr) + ".UNIT_MASK"; } //$NON-NLS-1$ - public static final String attrCounterUnitMaskName(int nr) { return attrCounter(nr) + ".UNIT_MASK_NAME"; } //$NON-NLS-1$ - public static final String attrNumberOfEvents(int nr) { return attrCounter(nr) + ".EVENTS"; } //$NON-NLS-1$ - - - public static final String ICON_PATH = "icons/"; //$NON-NLS-1$ - public static final String ICON_EVENT_TAB = ICON_PATH + "event_tab.gif"; //$NON-NLS-1$ - public static final String ICON_GLOBAL_TAB = ICON_PATH + "global_tab.gif"; //$NON-NLS-1$ - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - super.stop(context); - plugin = null; - } - - public static OprofileLaunchPlugin getDefault() { - return plugin; - } - - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } - - public static EventConfigCache getCache() { - if (eventConfigCache == null) { - eventConfigCache = new EventConfigCache(); - } - - return eventConfigCache; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/AbstractEventConfigTab.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/AbstractEventConfigTab.java deleted file mode 100644 index ec61d8bab..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/AbstractEventConfigTab.java +++ /dev/null @@ -1,1417 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.ListViewer; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.jface.window.IShellProvider; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -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.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.TabFolder; -import org.eclipse.swt.widgets.TabItem; -import org.eclipse.swt.widgets.Text; - -public abstract class AbstractEventConfigTab extends AbstractLaunchConfigurationTab { - protected Button defaultEventCheck; - protected OprofileCounter[] counters = null; - protected CounterSubTab[] counterSubTabs; - private Composite top; - - /** - * Essentially the constructor for this tab; creates the 'default event' - * checkbox and an appropriate number of counter tabs. - * @param parent the parent composite - */ - @Override - public void createControl(Composite parent) { - Composite top = new Composite(parent, SWT.NONE); - setControl(top); - top.setLayout(new GridLayout()); - this.top = top; - } - /** - * @since 1.1 - * @param top - */ - private void createCounterTabs(Composite top){ - //tabs for each of the counters - counters = getOprofileCounters(null); - TabItem[] counterTabs = new TabItem[counters.length]; - - // create only one counter for operf/opcontrol - if (counters.length > 0) { - counterSubTabs = new CounterSubTab[1]; - } else { - counterSubTabs = new CounterSubTab[0]; - } - - TabFolder tabFolder = new TabFolder(top, SWT.NONE); - tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - - // As per Roland suggestion if we decide to list all the selected events - // in a separate list viewer, then it makes sense to always show just one tab. - // This approach would make operf/opcontrol event selection more similar. - for (int i = 0; i < counters.length; i++) { - Composite c = new Composite(tabFolder, SWT.NONE); - CounterSubTab currentTab = new CounterSubTab(c, counters[i]); - counterSubTabs[i] = currentTab; - - counterTabs[i] = new TabItem(tabFolder, SWT.NONE); - counterTabs[i].setControl(c); - counterTabs[i].setText(OprofileLaunchMessages.getString("tab.event.counterTab.counterText")); //$NON-NLS-1$ - // just one tab for operf/opcontrol - break; - } - - getTabFolderComposite(); - } - - /** - * @since 1.1 - */ - private Composite getTabFolderComposite(){ - // check for length and first tab being null to prevent AIOBE - if(counterSubTabs.length == 0 ||counterSubTabs[0] == null){ - return null; - } else { - Composite c = counterSubTabs[0].getTabTopContainer(); - while(c != null && !(c instanceof TabFolder)){ - c = c.getParent(); - } - return c.getParent(); - } - } - - @Override - public void initializeFrom(ILaunchConfiguration config) { - - IProject previousProject = getOprofileProject(); - IProject project = getProject(config); - setOprofileProject(project); - - updateOprofileInfo(); - - String previousHost = null; - if(previousProject != null){ - if(previousProject.getLocationURI() != null){ - previousHost = previousProject.getLocationURI().getHost(); - } - } - - String host; - if (project != null) { - host = project.getLocationURI().getHost(); - } else { - host = null; - } - - // Create the counter tabs if host has changed or if they haven't been created yet - // Check that initialization is not done for current project. - // Any calculation based on project doesn't work as the very first time for local project they are both null. - if(previousProject == null || previousHost != host || host == null || counters == null){ - Control[] children = top.getChildren(); - - for (Control control : children) { - control.dispose(); - } - - OprofileCounter [] ctrs = getOprofileCounters(null); - if (getOprofileTimerMode() || (ctrs.length > 0 && ctrs[0].getValidEvents() == null)) { - Label timerModeLabel = new Label(top, SWT.LEFT); - timerModeLabel.setText(OprofileLaunchMessages.getString("tab.event.timermode.no.options")); //$NON-NLS-1$ - } else { - createVerticalSpacer(top, 1); - - //default event checkbox - defaultEventCheck = new Button(top, SWT.CHECK); - defaultEventCheck.setText(OprofileLaunchMessages.getString("tab.event.defaultevent.button.text")); //$NON-NLS-1$ - defaultEventCheck.setLayoutData(new GridData()); - defaultEventCheck - .addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> handleEnabledToggle())); - createVerticalSpacer(top, 1); - createCounterTabs(top); - } - - } - - if(!getOprofileTimerMode()){ - if (counters == null) { - OprofileCorePlugin.showErrorDialog("countersNotFound", null); //$NON-NLS-1$ - return; - } - for (int i = 0; i < counters.length; i++) { - counters[i].loadConfiguration(config); - } - - for (CounterSubTab tab : counterSubTabs) { - tab.initializeTab(config); - tab.createEventsFilter(); - } - try{ - boolean enabledState = config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true); - defaultEventCheck.setSelection(enabledState); - setEnabledState(!enabledState); - } catch (CoreException e) { - e.printStackTrace(); - } - } - - } - - @Override - public boolean isValid(ILaunchConfiguration config) { - IProject project = getProject(config); - setOprofileProject(project); - - OprofileCounter [] ctrs = getOprofileCounters(null); - if (ctrs.length > 0 && ctrs[0].getValidEvents() == null) { - return false; - } - if (getOprofileTimerMode() || counterSubTabs == null) { - return true; //no options to check for validity - } else { - return validateEvents(config); - } - } - - /** - * Validate events specified in the given configuration. - * @param config - * @return - */ - private boolean validateEvents(ILaunchConfiguration config) { - int numEnabledEvents = 0; - boolean valid = true; - - try { - if (config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false)) { - numEnabledEvents = 1; - } else { - //This seems like an odd way to validate, but since most of the validation - // is done with the OprofileDaemonEvent that the counter wraps, this - // is the easiest way. - OprofileCounter[] counters = new OprofileCounter[getNumberOfOprofileCounters()]; - for (int i = 0; i < counters.length; i++) { - counters[i] = getOprofileCounter(i); - counters[i].loadConfiguration(config); - - for (CounterSubTab counterSubTab : counterSubTabs){ - int nr = counterSubTab.counter.getNumber(); - if(counterSubTab.enabledCheck.getSelection() && config.getAttribute(OprofileLaunchPlugin.attrNumberOfEvents(nr), 0) == 0){ - valid = false; - } - // if target list is empty valid is false - // target event list item count - int count = counterSubTab.selectedEventList.getList().getItemCount(); - if(count == 0) - { - valid = false; - } - } - - if (counters[i].getEnabled()) { - ++numEnabledEvents; - - for (OpEvent event : counters[i].getEvents()) { - if (event == null) { - valid = false; - break; - } - - // First check min count - int min = event.getMinCount(); - if (counters[i].getCount() < min) { - setErrorMessage(MessageFormat.format( - OprofileLaunchMessages.getString("tab.event.counterSettings.count.too-small"), //$NON-NLS-1$ - min)); - valid = false; - break; - } - - // Next ask oprofile if it is valid - if (!checkEventSetupValidity( - counters[i].getNumber(), event.getText(), event.getUnitMask().getMaskValue())) { - Object[] args = new Object[] { event.getText() }; - setErrorMessage(MessageFormat.format(OprofileLaunchMessages.getString("tab.event.validation.msg"), args)); //$NON-NLS-1$ - valid = false; - break; - } - } - } - } - } - } catch (CoreException e) { - e.printStackTrace(); - } - - return (numEnabledEvents > 0 && valid); - } - - @Override - public void performApply(ILaunchConfigurationWorkingCopy config) { - if (getOprofileTimerMode() || counterSubTabs == null) { - config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true); - } else { - config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, defaultEventCheck.getSelection()); - for (CounterSubTab cst : counterSubTabs) { - cst.performApply(config); - } - } - } - - @Override - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - boolean useDefault = true; - IProject project = getProject(config); - setOprofileProject(project); - - counters = getOprofileCounters(config); - - // When instantiated, the OprofileCounter will set defaults. - for (int i = 0; i < counters.length; i++) { - counters[i].saveConfiguration(config); - if (counters[i].getEnabled()) { - useDefault = false; - } - } - - config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, useDefault); - } - - @Override - public String getName() { - return OprofileLaunchMessages.getString("tab.event.name"); //$NON-NLS-1$ - } - - @Override - public Image getImage() { - return OprofileLaunchPlugin.getImageDescriptor(OprofileLaunchPlugin.ICON_EVENT_TAB).createImage(); - } - - /** - * Handles the toggling of the default event check box. Not meant to be called - * directly. - */ - private void handleEnabledToggle() { - setEnabledState(!defaultEventCheck.getSelection()); - updateLaunchConfigurationDialog(); - } - - /** - * Sets the state of the child counter tabs' widgets. - * @param state true for enabled, false for disabled - */ - private void setEnabledState(boolean state) { - for (CounterSubTab cst : counterSubTabs) { - cst.setEnabledState(state); - } - } - - /* - * Extracted methods to be overridden by the test suite. - */ - - /** - * Returns whether the event's unit mask is valid - * @param counter counter number - * @param name event name - * @param maskValue unit mask value - * @return true if valid config, false otherwise - */ - protected abstract boolean checkEventSetupValidity(int counter, String name, int maskValue); - - /** - * - * @param config - * @return - * @since 1.1 - */ - private IProject getProject(ILaunchConfiguration config){ - String name = null; - try { - name = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ - } catch (CoreException e) { - return null; - } - if (name.isEmpty()) { - return null; - } - - return ResourcesPlugin.getWorkspace().getRoot().getProject(name); - } - - /** - * Returns counter with corresponding to counter number. - * @param i the counter number - */ - public abstract OprofileCounter getOprofileCounter(int i); - - /** - * Returns counters in the given configuration. - * @param config the launch configuration - */ - protected abstract OprofileCounter[] getOprofileCounters(ILaunchConfiguration config); - - /** - * Returns the number of hardware counters the cpu has - * @return int number of counters - */ - protected abstract int getNumberOfOprofileCounters(); - - /** - * Returns whether or not oprofile is operating in timer mode. - * @return true if oprofile is in timer mode, false otherwise - */ - protected abstract boolean getOprofileTimerMode(); - - /** - * Returns current project to profile by Oprofile. - */ - protected abstract IProject getOprofileProject(); - - /** - * Set project to profile by Oprofile. - * @param project the project to profile - */ - protected abstract void setOprofileProject(IProject project); - - /** - * Update generic Oprofile information. - */ - protected abstract void updateOprofileInfo(); - - /** - * A sub-tab of the OprofileEventConfigTab launch configuration tab. - * Essentially, it is a frontend to an OprofileCounter. This is an - * inner class because it requires methods from the parent tab (such as - * updateLaunchConfigurationDialog() when a widget changes state). - */ - protected class CounterSubTab { - - private Button profileKernelCheck; - private Button profileUserCheck; - private Label countTextLabel; - private Text countText; - private Label eventDescLabel; - private Text eventDescText; - private UnitMaskViewer unitMaskViewer; - private Text eventFilterText; - private OprofileCounter counter; - - private ScrolledComposite scrolledTop; - protected Composite tabTopContainer; - protected Button enabledCheck; - protected ListViewer eventList; - - protected Button add; - protected Button addAll; - protected Button remove; - protected Button removeAll; - protected Button customizeBtn; - protected ListViewer selectedEventList; - protected ScrolledComposite unitmaskScrollComposite; - protected Composite unitMaskSubComposite ; - private static final int ADD = 1; - private static final int ADD_ALL = 2; - private static final int REMOVE = 3; - private static final int REMOVE_ALL = 4; - private static final int CUSTOMIZE = 5; - private List<OpEvent> sourceList = new ArrayList<>(0); - private List<OpEvent> targetList = new ArrayList<>(0); - - - public Composite getTabTopContainer() { - return tabTopContainer; - } - - public void setTabTopContainer(Composite tabTopContainer) { - this.tabTopContainer = tabTopContainer; - } - - /** - * Constructor for a subtab. Creates the layout and widgets for its content. - * @param parent composite the widgets will be created in - * @param counter the associated OprofileCounter object - */ - public CounterSubTab(Composite parent, OprofileCounter counter) { - this.counter = counter; - - parent.setLayout(new GridLayout()); - - //scrollable composite on top - ScrolledComposite scrolledContainer = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); - scrolledContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - scrolledContainer.setLayout(layout); - scrolledContainer.setExpandHorizontal(true); - scrolledContainer.setExpandVertical(true); - - //composite to contain the rest of the tab - Composite tabTopContainer = new Composite(scrolledContainer, SWT.NONE); - scrolledContainer.setContent(tabTopContainer); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.numColumns = 2; - tabTopContainer.setLayout(layout); - tabTopContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - //top cell - Composite topCellComp = new Composite(tabTopContainer, SWT.NONE); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.numColumns = 2; - topCellComp.setLayout(layout); - topCellComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1)); - - createTopCell(topCellComp); - - createVerticalSpacer(tabTopContainer, 2); - - //left side composite group for eventList - Composite eventListComp = new Composite(tabTopContainer, SWT.NONE); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.numColumns = 3; - eventListComp.setLayout(layout); - eventListComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - //layoutdata is set later - - createLeftCell(eventListComp); - - - scrolledTop = scrolledContainer; - this.tabTopContainer = tabTopContainer; - resizeScrollContainer(); - } - - /** - * Creates the "Enabled" checkbox, and the event description text. - * @param parent composite these widgets will be created in - */ - private void createTopCell(Composite parent) { - //checkbox - enabledCheck = new Button(parent, SWT.CHECK); - enabledCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.enabled.button.text")); //$NON-NLS-1$ - enabledCheck.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); - enabledCheck.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - counter.setEnabled(enabledCheck.getSelection()); - internalSetEnabledState(counter.getEnabled()); - updateLaunchConfigurationDialog(); - })); - enabledCheck.setEnabled(false); - - //label for textbox - eventDescLabel = new Label(parent, SWT.NONE); - eventDescLabel.setText(OprofileLaunchMessages.getString("tab.event.eventDescription.label.text")); //$NON-NLS-1$ - eventDescLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); - - //textbox - eventDescText = new Text(parent, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); - eventDescText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - } - - /** - * Creates the event list widget. - * @param parent composite these widgets will be created in - */ - private void createLeftCell(Composite parent) { - // Text box used to filter the event list - eventFilterText = new Text(parent, SWT.BORDER | SWT.SINGLE | SWT.ICON_CANCEL | SWT.SEARCH); - eventFilterText.setMessage(OprofileLaunchMessages.getString("tab.event.eventfilter.message")); //$NON-NLS-1$ - GridData eventFilterLayout = new GridData(); - eventFilterLayout.horizontalAlignment = SWT.FILL; - eventFilterLayout.grabExcessHorizontalSpace = true; - eventFilterText.setLayoutData(eventFilterLayout); - eventFilterText.addModifyListener(e -> eventList.refresh(false)); - - // profile user binary and profile kernel - createRightCell(parent); - - int options = SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER; - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY)) { - options |= SWT.MULTI; - } else { - options |= SWT.SINGLE; - } - eventList = new ListViewer(parent, options); - GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true); - gdata.verticalSpan = 5; - eventList.getList().setLayoutData(gdata); - - eventList.setLabelProvider(new LabelProvider(){ - @Override - public String getText(Object element) { - OpEvent e = (OpEvent) element; - return e.getText(); - } - @Override - public Image getImage(Object element) { return null; } - @Override - public boolean isLabelProperty(Object element, String property) { return false; } - }); - - eventList.setContentProvider(new IStructuredContentProvider() { - @Override - public Object[] getElements(Object inputElement) { - List<OpEvent> list = (List<OpEvent>)inputElement; - return list.toArray(); - } - @Override - public void dispose() { } - @Override - public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } - }); - - // sorter - ListviewerComparator comparator = new ListviewerComparator(); - eventList.setComparator(comparator); - - //adds the events to the list from the counter - sourceList.addAll(Arrays.asList(counter.getValidEvents())); - eventList.setInput(sourceList); - - eventList.addSelectionChangedListener(sce -> handleEventListSelectionChange()); - - HandleButtonClick listener = new HandleButtonClick(); - add = new Button(parent, SWT.PUSH); - add.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - add.setText(OprofileLaunchMessages.getString("tab.event.addevent.button.text")); //$NON-NLS-1$ - add.setData(ADD); - add.addListener(SWT.Selection, listener); - - selectedEventList = new ListViewer(parent, options); - selectedEventList.getList().setLayoutData(gdata); - - - selectedEventList.setLabelProvider(new ILabelProvider(){ - @Override - public String getText(Object element) { - OpEvent e = (OpEvent) element; - return e.getText(); - } - @Override - public Image getImage(Object element) { return null; } - @Override - public void addListener(ILabelProviderListener listener) { } - @Override - public void dispose() { } - @Override - public boolean isLabelProperty(Object element, String property) { return false; } - @Override - public void removeListener(ILabelProviderListener listener) { } - }); - - selectedEventList.setContentProvider(new IStructuredContentProvider() { - @Override - public Object[] getElements(Object inputElement) { - List<OpEvent> list = (List<OpEvent>)inputElement; - return list.toArray(); - } - @Override - public void dispose() { } - @Override - public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } - }); - - // sorter - ListviewerComparator viewerComparator = new ListviewerComparator(); - selectedEventList.setComparator(viewerComparator); - - //adds the events to the list from the counter - if(counter.getEvents().length != 0 && null != counter.getEvents()[0]) - { - targetList.addAll(Arrays.asList(counter.getEvents())); - } - selectedEventList.setInput(targetList); - - selectedEventList.addSelectionChangedListener(sce -> { - handleListSelection(selectedEventList); - eventList.getList().deselectAll(); - updateLaunchConfigurationDialog(); - }); - - - - - - addAll = new Button(parent, SWT.PUSH); - addAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - addAll.setText(OprofileLaunchMessages.getString("tab.event.addallevent.button.text")); //$NON-NLS-1$ - addAll.setData(ADD_ALL); - addAll.addListener(SWT.Selection, listener); - - - remove = new Button(parent, SWT.PUSH); - remove.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - remove.setText(OprofileLaunchMessages.getString("tab.event.removeevent.button.text")); //$NON-NLS-1$ - remove.setData(REMOVE); - remove.addListener(SWT.Selection, listener); - - - removeAll = new Button(parent, SWT.PUSH); - removeAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - removeAll.setText(OprofileLaunchMessages.getString("tab.event.removeallevent.button.text")); //$NON-NLS-1$ - removeAll.setData(REMOVE_ALL); - removeAll.addListener(SWT.Selection, listener); - - customizeBtn = new Button(parent, SWT.PUSH); - customizeBtn.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - customizeBtn.setText(OprofileLaunchMessages.getString("tab.event.customizeevent.button.text")); //$NON-NLS-1$ - customizeBtn.addListener(SWT.Selection, listener); - customizeBtn.setData(CUSTOMIZE); - - - } - - /** - * Creates the 2 profile space checkboxes, event count and unit mask widget. - * @param parent composite these widgets will be created in - */ - private void createRightCell(Composite parent) { - //profile kernel checkbox - profileKernelCheck = new Button(parent, SWT.CHECK); - profileKernelCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.profileKernel.check.text")); //$NON-NLS-1$ - profileKernelCheck - .addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> handleProfileKernelToggle())); - - //profile user checkbox -- should this ever be disabled? - profileUserCheck = new Button(parent, SWT.CHECK); - profileUserCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.profileUser.check.text")); //$NON-NLS-1$ - profileUserCheck - .addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> handleProfileUserToggle())); - - } - - /** - * Creates a text filter for the events list widget - */ - private void createEventsFilter(){ - // Event Filter - ViewerFilter eventFilter = new ViewerFilter() { - - @Override - public Object[] filter(Viewer viewer, Object parent, Object[] elements) { - Object[] filteredElements = super.filter(viewer,parent,elements); - handleEventListSelectionChange(); - return filteredElements; - } - - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - String[] filterTerms = eventFilterText.getText().trim().toLowerCase().split(" "); //$NON-NLS-1$ - String eventName = ((OpEvent)element).getText().toLowerCase(); - String eventDescription = ((OpEvent)element).getTextDescription().toLowerCase(); - - boolean contains = true; - - for (String filterTerm : filterTerms) { - if(contains){ - contains = eventName.contains(filterTerm) || eventDescription.contains(filterTerm); - } - } - return contains; - } - }; - if(eventList != null){ - eventList.addFilter(eventFilter); - } - } - - /** - * Initializes the tab on first creation. - * @param config default configuration for the counter and the associated widgets - */ - public void initializeTab(ILaunchConfiguration config) { - //make all controls inactive, since the 'default event' checkbox - // is checked by default - try { - defaultEventCheck.setSelection(config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true)); - } catch (CoreException e) { - e.printStackTrace(); - } - setEnabledState(false); - - if (config != null) { - counter.loadConfiguration(config); - } - - boolean enabled = counter.getEnabled(); - enabledCheck.setSelection(enabled); - - if (counter.getEvents().length == 0 || counter.getEvents()[0] == null) { - // Default to first in list - counter.setEvents(new OpEvent [] {counter.getValidEvents()[0]}); - } - - //load default states - profileKernelCheck.setSelection(counter.getProfileKernel()); - profileUserCheck.setSelection(counter.getProfileUser()); - - eventDescText.setText(counter.getEvents()[0].getTextDescription()); - - - // add opevent to target event list - ArrayList<OpEvent> tmp = new ArrayList<>(Arrays.asList(counter.getEvents())); - targetList.addAll(tmp); - selectedEventList.add(tmp.toArray()); - selectedEventList.refresh(); - selectedEventList.setSelection(new StructuredSelection(tmp.toArray())); - - // remove selected opevent from source list - - sourceList.removeAll(tmp); - eventList.remove(tmp.toArray()); - eventList.refresh(); - } - - /** - * Applies the tab's current state to the launch configuration. - * @param config launch config to apply to - */ - public void performApply(ILaunchConfigurationWorkingCopy config) { - counter.saveConfiguration(config); - } - - /** - * Enables/disables the widgets in this tab. - * @param state true to enable to the counter's state, false to disable all - */ - public void setEnabledState(boolean state) { - enabledCheck.setEnabled(state); - - if (state) { - internalSetEnabledState(counter.getEnabled()); - } else { - internalSetEnabledState(false); - } - } - - /** - * Method split from setEnabledState to avoid code duplication. - * Not meant to be called directly. - * @param state true to enable all widgets, false to disable all widgets - */ - private void internalSetEnabledState(boolean state) { - profileKernelCheck.setEnabled(state); - profileUserCheck.setEnabled(state); - eventDescText.setEnabled(state); - eventList.getList().setEnabled(state); - selectedEventList.getList().setEnabled(state); - eventFilterText.setEnabled(state); - add.setEnabled(state); - addAll.setEnabled(state); - remove.setEnabled(state); - removeAll.setEnabled(state); - customizeBtn.setEnabled(state); - - - } - - /** - * Handling method for the event list. Gets the selection from the listviewer - * and updates the UnitMask and event description text box. - */ - private void handleEventListSelectionChange() { - handleListSelection(eventList); - int[] indices = eventList.getList().getSelectionIndices(); - if (indices.length != 0) { - customizeBtn.setEnabled(true); - // unselected other list element - // to keep customize button enable - // for both list selection - selectedEventList.getList().deselectAll(); - } - updateLaunchConfigurationDialog(); - - } - - /** - * Generic method for handling source & target selection list - * @param eventList - list to be handled - * @since 3.0 - */ - private void handleListSelection(ListViewer eventList) - { - setErrorMessage(null); - int [] indices = eventList.getList().getSelectionIndices(); - if (indices.length != 0) { - ArrayList<OpEvent> tmp = new ArrayList<> (); - for (int index : indices) { - OpEvent event = (OpEvent) eventList.getElementAt(index); - tmp.add(event); - eventDescText.setText(event.getTextDescription()); - - } - - // Check the min count to update the error message (events - // can have - // different minimum reset counts) - int min = Integer.MIN_VALUE; - for (OpEvent ev : tmp) { - // We want the largest of the min values - if (ev.getMinCount() > min) { - min = ev.getMinCount(); - } - } - if(counter.getEvents().length == 0 || counter.getEvents()[0] == null) - { - counter.setEvents(new OpEvent [] {counter.getValidEvents()[0]}); - } - if ((counter.getCount() < min) - && (!defaultEventCheck.getSelection())) { - setErrorMessage(getMinCountErrorMessage(min)); - } - - //counter.setEvents(tmp.toArray(new OpEvent[0])); - } else { - eventDescText.setText(""); //$NON-NLS-1$ - - } - - - - } - - /** - * Handles the toggling of the "profile user" button. - */ - private void handleProfileUserToggle() { - counter.setProfileUser(profileUserCheck.getSelection()); - updateLaunchConfigurationDialog(); - } - - /** - * Handles the toggling of the "profile kernel" button. - */ - private void handleProfileKernelToggle() { - counter.setProfileKernel(profileKernelCheck.getSelection()); - updateLaunchConfigurationDialog(); - } - - /** - * Handles text modify events in the count text widget. - */ - private void handleCountTextModify() { - String errorMessage = null; - try { - - // This seems counter-intuitive, but we must save the count - // so that isValid knows this launch config is invalid - int count = Integer.parseInt(countText.getText()); - counter.setCount(count); - - // Check minimum count - int min = Integer.MIN_VALUE; - for (OpEvent event : counter.getEvents()) { - // We want the largest of the min values - if (event != null && event.getMinCount() > min) { - min = event.getMinCount(); - } - } - if ((count < min) && (!defaultEventCheck.getSelection())) { - errorMessage = getMinCountErrorMessage(min); - } - } catch (NumberFormatException e) { - errorMessage = OprofileLaunchMessages.getString("tab.event.counterSettings.count.invalid"); //$NON-NLS-1$ - counter.setCount(OprofileDaemonEvent.COUNT_INVALID); - } finally { - setErrorMessage(errorMessage); - updateLaunchConfigurationDialog(); - } - } - - /** - * Returns a string with the minimum allowed count, suitable foruse with setErrorMessage(). - * @param min minimum count - * @return a String containing the error message - */ - private String getMinCountErrorMessage(int min) { - String msg = OprofileLaunchMessages.getString("tab.event.counterSettings.count.too-small"); //$NON-NLS-1$ - return MessageFormat.format(msg, Integer.valueOf(min)); - } - - /** - * Changes parameters for the top scrolled composite which makes the scroll bars - * appear when content overflows the visible area. Called by the UnitMaskViewer - * whenever a new set of unit mask buttons are created, since the number of them is - * variable and there is no guarantee as to the default size of the launch configuration - * dialog in general. - */ - private void resizeScrollContainer() { - scrolledTop.setMinSize(tabTopContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT)); - } - - - /** - * This class displays event unit masks via check boxes and appropriate labels. - */ - protected class UnitMaskViewer { - private Label unitMaskLabel; - private Composite top; - private Composite maskListComp; - private Button[] unitMaskButtons; - - /** - * Constructor, creates the widget. - * @param parent composite the widget will be created in - */ - public UnitMaskViewer(Composite parent) { - //"Unit Mask:" label - unitMaskLabel = new Label(parent, SWT.NONE); - unitMaskLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); - unitMaskLabel.setText(OprofileLaunchMessages.getString("unitmaskViewer.label.text")); //$NON-NLS-1$ - unitMaskLabel.setVisible(true); - - //composite to contain the button widgets - Composite top = new Composite(parent, SWT.NONE); - top.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - top.setLayout(layout); - this.top = top; - - maskListComp = null; - unitMaskButtons = null; - } - - /** - * Handles button toggles; updates the counter's unit mask to the appropriate value. - * @param maskButton the button object - * @param index the button's mask index (used in OpUnitMask for a proper mask value) - */ - private void handleToggle(Button maskButton, int index) { - OpUnitMask mask = counter.getUnitMask(); - if (mask != null) { - if (maskButton.getSelection()) { - mask.setMaskFromIndex(index); - } else { - mask.unSetMaskFromIndex(index); - } - } - - //update the parent tab - updateLaunchConfigurationDialog(); - } - - /** - * Disposes of the old unit mask check list and creates a new one with - * the appropriate default value. - * @param oe the event - */ - public void displayEvent(OpEvent oe) { - if (maskListComp != null) { - maskListComp.dispose(); - } - - if(oe == null){ - return; - } - - - OpUnitMask mask = oe.getUnitMask(); - int totalMasks = mask.getNumMasks(); - - Composite newMaskComp = new Composite(top, SWT.NONE); - newMaskComp.setLayout(new GridLayout()); - newMaskComp.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); - maskListComp = newMaskComp; - - //creates these buttons with the default masks - mask.setDefaultMaskValue(); - - ArrayList<Button> maskButtons = new ArrayList<>(); - - for (int i = 0; i < totalMasks; i++) { - Button maskButton; - - if (mask.getType() == OpUnitMask.INVALID) { - //big problem, most likely parsing went awry or opxml output mangled - OprofileCorePlugin.showErrorDialog("opxmlParse", null); //$NON-NLS-1$ - return; - } else if (mask.getType() == OpUnitMask.MANDATORY) { - maskButton = new Button(newMaskComp, SWT.RADIO); - maskButton.setEnabled(false); - maskButton.setText(mask.getText(i)); - maskButton.setSelection(true); - } else { - int buttonType; - final int maskButtonIndex = i; - boolean selected = mask.isMaskSetFromIndex(maskButtonIndex); - - if (mask.getType() == OpUnitMask.EXCLUSIVE) { - buttonType = SWT.RADIO; - } else { //mask type is OpUnitMask.BITMASK - buttonType = SWT.CHECK; - } - - maskButton = new Button(newMaskComp, buttonType); - maskButton.setEnabled(true); - maskButton.setText(mask.getText(i)); - maskButton.setSelection(selected); - maskButton.addSelectionListener(SelectionListener - .widgetSelectedAdapter(se -> handleToggle((Button) se.getSource(), maskButtonIndex))); - - maskButtons.add(maskButton); - } - } - - unitMaskButtons = new Button[maskButtons.size()]; - maskButtons.toArray(unitMaskButtons); - - - resizeUnitMaskContainer(); - } - - /** - * Enables and disables the viewer for UI input - * @param enabled whether this viewer should be enabled - */ - public void setEnabled(boolean enabled) { - if (unitMaskButtons != null) { - for (Button b : unitMaskButtons) { - if (!b.isDisposed()) { - b.setEnabled(enabled); - } - } - } - } - } - - /** - * Dialog box for unit mask field modification - * @since 3.0 - * - */ - protected class UnitMaskDialog extends Dialog { - private OpEvent event; - public UnitMaskDialog(IShellProvider parentShell) { - super(parentShell); - } - - public UnitMaskDialog(Shell parentShell,OpEvent event) { - super(parentShell); - this.event = event; - } - - @Override - protected Control createDialogArea(Composite parent) { - Composite child = (Composite)super.createDialogArea(parent); - ScrolledComposite scrolledContainer = new ScrolledComposite(child, SWT.H_SCROLL|SWT.V_SCROLL); - scrolledContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - scrolledContainer.setLayout(layout); - scrolledContainer.setExpandHorizontal(true); - scrolledContainer.setExpandVertical(true); - Composite unitMaskSubComposite = new Composite(scrolledContainer, SWT.None); - unitMaskSubComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - layout = new GridLayout(); - layout.numColumns=2; - unitMaskSubComposite.setLayout(layout); - createUnitMaskComponents(unitMaskSubComposite); - scrolledContainer.setContent(unitMaskSubComposite); - CounterSubTab.this.unitmaskScrollComposite = scrolledContainer; - CounterSubTab.this.unitMaskSubComposite = unitMaskSubComposite; - unitMaskViewer.displayEvent(event); - return child; - } - - @Override - protected boolean isResizable() { - return true; - } - - @Override - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - newShell.setText(event.getText()); - newShell.setSize(400, 400); - } - } - - - private void createUnitMaskComponents(Composite parent) - { - //event count label/text - countTextLabel = new Label(parent, SWT.NONE); - countTextLabel.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.count.label.text")); //$NON-NLS-1$ - countText = new Text(parent, SWT.SINGLE | SWT.BORDER); - countText.setText(Integer.toString(counter.getCount())); - countText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - countText.addModifyListener(me -> handleCountTextModify()); - - //unit mask widget - Composite unitMaskComp = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - unitMaskComp.setLayout(layout); - unitMaskComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); - - unitMaskViewer = new UnitMaskViewer(unitMaskComp); - } - private void resizeUnitMaskContainer() { - unitmaskScrollComposite.setMinSize(unitMaskSubComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); - } - - /** - * Events selection/removal button listener - * @since 3.0 - * - */ - protected class HandleButtonClick implements Listener { - - @Override - public void handleEvent(Event event) { - int btn_value = (Integer) event.widget.getData(); - switch (btn_value) { - case ADD: - addButtonClicked(); - updateLaunchConfigurationDialog(); - break; - case ADD_ALL: - addAllButtonClicked(); - updateLaunchConfigurationDialog(); - break; - case REMOVE: - removeButtonClicked(); - updateLaunchConfigurationDialog(); - break; - case REMOVE_ALL: - removeAllButtonClicked(); - updateLaunchConfigurationDialog(); - break; - case CUSTOMIZE: - customizeButtonClicked(); - break; - default: - break; - } - - } - - private void addButtonClicked() { - int[] indices = eventList.getList().getSelectionIndices(); - if (indices.length != 0) { - ArrayList<OpEvent> tmp = new ArrayList<>(); - for (int index : indices) { - OpEvent event = (OpEvent) eventList.getElementAt(index); - tmp.add(event); - } - // add to target list - targetList.addAll(tmp); - selectedEventList.add(tmp.toArray()); - - sourceList.removeAll(tmp); - eventList.remove(tmp.toArray()); - - int count = selectedEventList.getList().getItemCount(); - tmp = new ArrayList<>(); - for (int i = 0; i < count; i++) { - OpEvent event = (OpEvent) selectedEventList - .getElementAt(i); - tmp.add(event); - - } - if (!tmp.isEmpty()) - counter.setEvents(tmp.toArray(new OpEvent[0])); - - eventList.refresh(); - selectedEventList.refresh(); - - - } - } - - private void addAllButtonClicked() { - int count = eventList.getList().getItemCount(); - ArrayList<OpEvent> tmp = new ArrayList<>(); - for (int i = 0; i < count; i++) { - OpEvent event = (OpEvent) eventList.getElementAt(i); - tmp.add(event); - - } - - targetList.addAll(tmp); - selectedEventList.add(tmp.toArray()); - eventList.remove(tmp.toArray()); - sourceList.removeAll(tmp); - - count = selectedEventList.getList().getItemCount(); - tmp = new ArrayList<>(); - for (int i = 0; i < count; i++) { - OpEvent event = (OpEvent) selectedEventList.getElementAt(i); - tmp.add(event); - - } - if (!tmp.isEmpty()) - counter.setEvents(tmp.toArray(new OpEvent[0])); - - eventList.refresh(); - selectedEventList.refresh(); - - - } - - private void removeButtonClicked() { - int[] indices = selectedEventList.getList() - .getSelectionIndices(); - if (indices.length != 0) { - ArrayList<OpEvent> tmp = new ArrayList<>(); - for (int index : indices) { - OpEvent event = (OpEvent) selectedEventList - .getElementAt(index); - tmp.add(event); - } - // add to target list - sourceList.addAll(tmp); - eventList.add(tmp.toArray()); - - targetList.removeAll(tmp); - selectedEventList.remove(tmp.toArray()); - - int count = selectedEventList.getList().getItemCount(); - tmp = new ArrayList<>(); - for (int i = 0; i < count; i++) { - OpEvent event = (OpEvent) selectedEventList - .getElementAt(i); - tmp.add(event); - - } - if (!tmp.isEmpty()) - counter.setEvents(tmp.toArray(new OpEvent[0])); - else - // add first valid element to counter due to NPE - counter.setEvents(new OpEvent[]{counter.getValidEvents()[0]}); - - eventList.refresh(); - selectedEventList.refresh(); - - } - } - - private void removeAllButtonClicked() { - - int count = selectedEventList.getList().getItemCount(); - ArrayList<OpEvent> tmp = new ArrayList<>(); - for (int i = 0; i < count; i++) { - OpEvent event = (OpEvent) selectedEventList.getElementAt(i); - tmp.add(event); - - } - - if (!tmp.isEmpty()) { - sourceList.addAll(tmp); - eventList.add(tmp.toArray()); - - selectedEventList.remove(tmp.toArray()); - targetList.removeAll(tmp); - - } - counter.setEvents(new OpEvent[] { counter.getValidEvents()[0] }); - - eventList.refresh(); - selectedEventList.refresh(); - - } - - private void customizeButtonClicked() { - UnitMaskDialog d = null; - - if(eventList.getList().getSelectionIndex() != -1) - { - d = new UnitMaskDialog(Display.getCurrent() - .getActiveShell(), - (OpEvent) eventList.getElementAt(eventList.getList() - .getSelectionIndex())); - } - else if(selectedEventList.getList().getSelectionIndex() != -1) - { - d = new UnitMaskDialog(Display.getCurrent() - .getActiveShell(), - (OpEvent) selectedEventList.getElementAt(selectedEventList.getList() - .getSelectionIndex())); - } - if(d != null) - d.open(); - } - - } - } - - /** - * - * Event sorting for selected as well as all available events - * @since 3.0 - */ - protected class ListviewerComparator extends ViewerComparator - { - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - OpEvent op1 = (OpEvent) e1; - OpEvent op2 = (OpEvent) e2; - String op1txt = op1.getText(); - String op2txt = op2.getText(); - if(op1txt !=null && op2txt !=null && op1txt.trim().length() !=0 && op2txt.trim().length() !=0) - return getComparator().compare(op1txt, op2txt); - return super.compare(viewer, e1, e2); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/EventConfigCache.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/EventConfigCache.java deleted file mode 100644 index 2dd097642..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/EventConfigCache.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import java.util.HashMap; - -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; - -/** - * Cache class for event configuration. Currently only used to cache the results - * of an `opxml check-event ..` run, since the isValid() method in the EventConfigTab - * needlessly spawns opxml dozens of times with the same values. Note that multiple - * checks of the same value will necessarily return the same result (for a given - * processor) so there is no worry of an invalid cache entry. - */ -public class EventConfigCache { - //a cache entry for an event check, used as the hashmap key - static class CheckEventEntry { - public Integer counterNum, maskValue; - public String eventName; - - public CheckEventEntry(int counterNum, String eventName, int maskValue) { - this.counterNum = Integer.valueOf(counterNum); - this.eventName = eventName; - this.maskValue = Integer.valueOf(maskValue); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof CheckEventEntry) { - CheckEventEntry other = (CheckEventEntry)obj; - return (counterNum.equals(other.counterNum) && eventName.equals(other.eventName) && maskValue.equals(other.maskValue)); - } else { - return false; - } - } - - @Override - public int hashCode() { - int prime = 11, result = 3; - result = prime*result + counterNum.hashCode(); - result = prime*result + eventName.hashCode(); - result = prime*result + maskValue.hashCode(); - return result; - } - } - - HashMap<CheckEventEntry, Boolean> validEventCache; - - /** - * Default constructor, creates an empty cache. - */ - public EventConfigCache() { - validEventCache = new HashMap<>(); - } - - /** - * Method to be used to check the validity of an event. Will check - * the cache for the result of a previous check of the same values, - * or otherwise will spawn opxml to check properly. - * @param counter counter number - * @param event event name - * @param mask unit mask value - * @return true or false, depending if the event config is valid - */ - public boolean checkEvent(int counter, String event, int mask) { - CheckEventEntry e = new CheckEventEntry(counter, event, mask); - Boolean result = null; - - result = validEventCache.get(e); - - if (result == null) { - //not in the map, get its value and add it in - result = Oprofile.checkEvent(counter, event, mask); - - //possible to be null if there is no opxmlProvider - if (result != null) { - validEventCache.put(e, result); - } - } - - return (result == null ? false : result); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/LaunchOptions.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/LaunchOptions.java deleted file mode 100644 index d9ea4bcb6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/LaunchOptions.java +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; - -/** - * This class wraps OProfile's global launch options for the - * Eclipse launcher facility. - */ -public class LaunchOptions { - // The launch options for the daemon - private OprofileDaemonOptions options; - private String oprofileComboText; - private int executionsNumber; - - public LaunchOptions() { - options = new OprofileDaemonOptions(); - oprofileComboText = OprofileProject.OPERF_BINARY; - executionsNumber = 1; - } - - /** - * Determines whether the global oprofile options represented by this - * object are valid - * @return whether the options are valid - */ - public boolean isValid() { - IRemoteFileProxy proxy = null; - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(getOprofileProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - // The only point of contention is whether the specified vmlinux *file* exists. - String fn = options.getKernelImageFile(); - if (fn != null && fn.length() > 0) { - IFileStore fileStore = proxy.getResource(options.getKernelImageFile()); - return (fileStore.fetchInfo().exists() && !fileStore.fetchInfo().isDirectory()); - } - - return true; - } - - /** - * Get project to profile - * @return IProject project to profile - */ - protected IProject getOprofileProject(){ - return Oprofile.OprofileProject.getProject(); - } - - /** - * Saves the global options of this object into the specified launch - * configuration - * @param config the launch configuration - */ - public void saveConfiguration(ILaunchConfigurationWorkingCopy config) { - config.setAttribute(OprofileLaunchPlugin.ATTR_KERNEL_IMAGE_FILE, options.getKernelImageFile()); - config.setAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, options.getSeparateProfilesMask()); - config.setAttribute(OprofileLaunchPlugin.ATTR_EXECUTIONS_NUMBER, getExecutionsNumber()); - config.setAttribute(OprofileLaunchPlugin.ATTR_OPROFILE_COMBO_TEXT, getOprofileComboText()); - OprofileProject.setProfilingBinary(getOprofileComboText()); - } - - /** - * Loads this object with the global options in the given launch - * configuration - * @param config the launch configuration - */ - public void loadConfiguration(ILaunchConfiguration config) { - try { - options.setKernelImageFile(config.getAttribute(OprofileLaunchPlugin.ATTR_KERNEL_IMAGE_FILE, "")); //$NON-NLS-1$ - options.setSeparateProfilesMask(config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, OprofileDaemonOptions.SEPARATE_NONE)); - setExecutionsNumber(config.getAttribute(OprofileLaunchPlugin.ATTR_EXECUTIONS_NUMBER, 1)); - setOprofileComboText(config.getAttribute(OprofileLaunchPlugin.ATTR_OPROFILE_COMBO_TEXT, OprofileProject.OPERF_BINARY)); - } catch (CoreException e) { - } - } - - /** - * Get the daemon launch options - * @return the OprofileDaemonOption - */ - public OprofileDaemonOptions getOprofileDaemonOptions() { - return options; - } - - /** - * Method getKernelImageFile. - * @return the kernel image file - */ - public String getKernelImageFile() { - return options.getKernelImageFile(); - } - - /** - * Sets the kernel image file - * @param image the kernel image file - */ - public void setKernelImageFile(String image) { - options.setKernelImageFile(image); - } - - /** - * Method getSeparateSamples. - * @return whether and how to separate samples for each distinct application - */ - public int getSeparateSamples() { - return options.getSeparateProfilesMask(); - } - - /** - * Sets whether/how to collect separate samples for each distinct application - * @param how one of SEPARATE_{NONE, LIBRARY, KERNEL, THREAD, CPU} - */ - public void setSeparateSamples(int how) { - options.setSeparateProfilesMask(how); - } - - /** - * Returns the path of the binary to profile. - * @return the full path to the binary being profile - */ - public String getBinaryImage() { - return options.getBinaryImage(); - } - - /** - * Sets the binary to profile in this launch. - * @param image string of the full path to the binary - */ - public void setBinaryImage(String image) { - options.setBinaryImage(image); - } - - public int getExecutionsNumber() { - return executionsNumber; - } - - public void setExecutionsNumber(int executionsNumber) { - this.executionsNumber = executionsNumber; - } - - /** - * Gets OProfile combo box text regarding the binary - * opcontrol or operf - * @since 2.1 - */ - public String getOprofileComboText() { - return oprofileComboText; - } - - /** - * Sets OProfile combo box text regarding the binary - * opcontrol or operf - * @since 2.1 - */ - public void setOprofileComboText(String oprofileComboText) { - this.oprofileComboText = oprofileComboText; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileCounter.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileCounter.java deleted file mode 100644 index 2eb816feb..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileCounter.java +++ /dev/null @@ -1,300 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; - -/** - * This class represents an oprofile runtime configuration of a counter. It is - * used to construct arguments for launching op_start on the host. It - * simply wraps OprofileDaemonEvent. - */ -public class OprofileCounter { - private static final String COUNTER_STRING = OprofileLaunchMessages.getString("oprofileCounter.counterString"); //$NON-NLS-1$ - - // The counter number - private int number; - - // Is this counter enabled? - private boolean _enabled; - - // The event(s) to collect on this counter - private OprofileDaemonEvent[] daemonEvent; - - // List of valid events on this counter - private OpEvent[] eventList = null; - - /** - * Constructor for OprofileCounter. - * @param nr the counter number - */ - public OprofileCounter(int nr) { - this(nr, Oprofile.getEvents(nr)); - } - - /** - * Constructor for OprofileCounter. - * @param nr the counter number - * @param events the given events for counter number <code>nr</code> - */ - public OprofileCounter(int nr, OpEvent[] events) { - number = nr; - _enabled = false; - eventList = events; - daemonEvent = new OprofileDaemonEvent [] {new OprofileDaemonEvent()}; - } - - /** - * Constructs all of the counters in the given launch configuration. - * @param config the launch configuration - * @return an array of all counters - */ - public static OprofileCounter[] getCounters(ILaunchConfiguration config) { - OprofileCounter[] ctrs = new OprofileCounter[Oprofile.getNumberOfCounters()]; - for (int i = 0; i < ctrs.length; i++) - { - ctrs[i] = new OprofileCounter(i); - if (config != null) - ctrs[i].loadConfiguration(config); - } - - return ctrs; - } - - /** - * Method setEnabled. - * @param enabled whether to set this counter as enabled - */ - public void setEnabled(boolean enabled) { - this._enabled = enabled; - } - - /** - * Method setEvent. - * @param event the event for this counter - */ - public void setEvents(OpEvent [] events) { - OprofileDaemonEvent [] newDaemonEvent = new OprofileDaemonEvent[events.length]; - for (int i = 0; i < events.length; i++) { - if (i > daemonEvent.length - 1) { - OprofileDaemonEvent de = new OprofileDaemonEvent(); - de.setEvent(events[i]); - de.setResetCount(daemonEvent[0].getResetCount()); - newDaemonEvent[i] = de; - } else { - daemonEvent[i].setEvent(events[i]); - newDaemonEvent[i] = daemonEvent[i]; - } - } - daemonEvent = newDaemonEvent; - } - - /** - * Method setProfileKernel. - * @param profileKernel whether this counter should count kernel events - */ - public void setProfileKernel(boolean profileKernel) { - for (int i = 0; i < daemonEvent.length; i++) { - daemonEvent[i].setProfileKernel(profileKernel); - } - } - - /** - * Method setProfileUser. - * @param profileUser whether this counter should count user events - */ - public void setProfileUser(boolean profileUser) { - for (int i = 0; i < daemonEvent.length; i++) { - daemonEvent[i].setProfileUser(profileUser); - } - } - - /** - * Method setCount. - * @param count the number of events between samples for this counter - */ - public void setCount(int count) { - for (int i = 0; i < daemonEvent.length; i++) { - daemonEvent[i].setResetCount(count); - } - } - - /** - * Saves this counter's configuration into the specified launch - * configuration. - * @param config the launch configuration - */ - public void saveConfiguration(ILaunchConfigurationWorkingCopy config) { - config.setAttribute(OprofileLaunchPlugin.attrConterEnabled(number), _enabled); - config.setAttribute(OprofileLaunchPlugin.attrNumberOfEvents(number), daemonEvent.length); - - for (int i = 0; i < daemonEvent.length; i++) { - if (daemonEvent[i].getEvent() != null) { - config.setAttribute(OprofileLaunchPlugin.attrConterEvent(number, i), daemonEvent[i].getEvent().getText()); - config.setAttribute(OprofileLaunchPlugin.attrCounterUnitMask(number), daemonEvent[i].getEvent().getUnitMask().getMaskValue()); - config.setAttribute(OprofileLaunchPlugin.attrCounterUnitMaskName(number), daemonEvent[i].getEvent().getUnitMask().getMaskName()); - } - config.setAttribute(OprofileLaunchPlugin.attrCounterProfileKernel(number), daemonEvent[i].getProfileKernel()); - config.setAttribute(OprofileLaunchPlugin.attrCounterProfileUser(number), daemonEvent[i].getProfileUser()); - config.setAttribute(OprofileLaunchPlugin.attrCounterCount(number), daemonEvent[i].getResetCount()); - } - } - - /** - * Loads a counter configuration from the specified launch configuration. - * @param config the launch configuration - */ - public void loadConfiguration(ILaunchConfiguration config) { - try { - _enabled = config.getAttribute(OprofileLaunchPlugin.attrConterEnabled(number), false); - int numEvents = config.getAttribute(OprofileLaunchPlugin.attrNumberOfEvents(number), 1); - daemonEvent = new OprofileDaemonEvent[numEvents]; - - for (int i = 0; i < numEvents; i++) { - String str = config.getAttribute(OprofileLaunchPlugin.attrConterEvent(number, i), ""); //$NON-NLS-1$ - int maskValue = config.getAttribute(OprofileLaunchPlugin.attrCounterUnitMask(number), OpUnitMask.SET_DEFAULT_MASK); - String maskName = config.getAttribute(OprofileLaunchPlugin.attrCounterUnitMaskName(number), ""); //$NON-NLS-1$ - - daemonEvent[i] = new OprofileDaemonEvent(); - daemonEvent[i].setEvent(eventFromString(str)); - - if (daemonEvent[i].getEvent() == null) { - continue; - } - - daemonEvent[i].getEvent().getUnitMask().setMaskValue(maskValue); - daemonEvent[i].getEvent().getUnitMask().setMaskName(maskName); - daemonEvent[i].setProfileKernel(config.getAttribute(OprofileLaunchPlugin.attrCounterProfileKernel(number), false)); - daemonEvent[i].setProfileUser(config.getAttribute(OprofileLaunchPlugin.attrCounterProfileUser(number), false)); - - daemonEvent[i].setResetCount(config.getAttribute(OprofileLaunchPlugin.attrCounterCount(number), OprofileDaemonEvent.COUNT_UNINITIALIZED)); - } - } catch (CoreException ce) { - - } - } - - public OpUnitMask getUnitMask() { - OpEvent event = daemonEvent[0].getEvent(); - - if (event != null) { - return event.getUnitMask(); - } else { - return null; - } - } - - /** - * Returns a textual label for this counter (used by UI) - * @return the label to use in widgets referring to this counter - */ - public String getText() { - return MessageFormat.format(COUNTER_STRING, Integer.valueOf(number)); - } - - /** - * Method getNumber. - * @return the counter's number - */ - public int getNumber() { - return number; - } - - /** - * Method getEnabled. - * @return whether this counter is enabled - */ - public boolean getEnabled() { - return _enabled; - } - - /** - * Method getEvent. - * @return the event for this counter - */ - public OpEvent [] getEvents() { - List<OpEvent> res = new ArrayList<> (); - for (OprofileDaemonEvent de : daemonEvent) { - res.add(de.getEvent()); - } - return res.toArray(new OpEvent[0]); - } - - /** - * Method getProfileKernel. - * @return whether this counter is counting kernel events - */ - public boolean getProfileKernel() { - return daemonEvent[0].getProfileKernel(); - } - - /** - * Method getProfileUser. - * @return whether this counter is counting user events - */ - public boolean getProfileUser() { - return daemonEvent[0].getProfileUser(); - } - - /** - * Method getCount. - * @return the number of events between samples for this counter - */ - public int getCount() { - return daemonEvent[0].getResetCount(); - } - - /** - * Method getValidEvents. - * @return an array of all events that this counter can monitor - */ - public OpEvent[] getValidEvents() { - return eventList; - } - - /** - * Gets the daemon event configuration for this counter. - * <B>Not</B> valid if this counter is not enabled! - * @return the OprofileDaemonEvent - */ - public OprofileDaemonEvent [] getDaemonEvents() { - return daemonEvent; - } - - // Returns the event with the same label as the parameter STR - private OpEvent eventFromString(String str) { - if (eventList != null) { - for (int i = 0; i < eventList.length; i++) { - if (eventList[i].getText().equals(str)) - return eventList[i]; - } - } - - return null; - } -} - diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java deleted file mode 100644 index e280d624b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import org.eclipse.core.resources.IProject; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; - -/** - * Thic class represents the event configuration tab of the launcher dialog. - * It supplies all functionality dependent on opcontrol and having root access. - */ -public class OprofileEventConfigTab extends AbstractEventConfigTab { - - @Override - protected boolean getOprofileTimerMode() { - return Oprofile.getTimerMode(); - } - - @Override - public OprofileCounter getOprofileCounter(int i) { - return new OprofileCounter(i); - } - - @Override - protected OprofileCounter[] getOprofileCounters(ILaunchConfiguration config) { - return OprofileCounter.getCounters(config); - } - - @Override - protected int getNumberOfOprofileCounters() { - return Oprofile.getNumberOfCounters(); - } - - @Override - protected IProject getOprofileProject() { - return Oprofile.OprofileProject.getProject(); - } - - @Override - protected void setOprofileProject(IProject project) { - Oprofile.OprofileProject.setProject(project); - } - - @Override - protected void updateOprofileInfo() { - Oprofile.updateInfo(); - } - - @Override - protected boolean checkEventSetupValidity(int counter, String name, - int maskValue) { - return OprofileLaunchPlugin.getCache().checkEvent(counter, name, maskValue); - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileLaunchConfigurationTabGroup.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileLaunchConfigurationTabGroup.java deleted file mode 100644 index 4bb0ec9a4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileLaunchConfigurationTabGroup.java +++ /dev/null @@ -1,23 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; -import org.eclipse.linuxtools.profiling.launch.ProfileLaunchConfigurationTabGroup; - -public class OprofileLaunchConfigurationTabGroup extends ProfileLaunchConfigurationTabGroup { - @Override - public AbstractLaunchConfigurationTab[] getProfileTabs() { - return new AbstractLaunchConfigurationTab[] { new OprofileSetupTab(), new OprofileEventConfigTab() }; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileSetupTab.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileSetupTab.java deleted file mode 100644 index 03c157bf7..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileSetupTab.java +++ /dev/null @@ -1,371 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.configuration; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CCombo; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.MessageBox; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Spinner; -import org.eclipse.swt.widgets.Text; - -/** - * This tab is used by the launcher to configure global oprofile run options. - */ -public class OprofileSetupTab extends AbstractLaunchConfigurationTab { - - protected Text kernelImageFileText; - protected CCombo controlCombo; - - protected Button checkSeparateLibrary; - protected Button checkSeparateKernel; - - protected LaunchOptions options = null; - - protected Spinner executionsSpinner; - protected Label executionsSpinnerLabel; - - private IRemoteFileProxy proxy; - - protected Label kernelLabel; - - @Override - public String getName() { - return OprofileLaunchMessages.getString("tab.global.name"); //$NON-NLS-1$ - } - - @Override - public boolean isValid(ILaunchConfiguration config) { - return options.isValid(); - } - - @Override - public void performApply(ILaunchConfigurationWorkingCopy config) { - options.saveConfiguration(config); - } - - @Override - public void initializeFrom(ILaunchConfiguration config) { - String name = ""; //$NON-NLS-1$ - /* - * Update the global OprofileProject object. In many occasions its - * value is read, which may produce inconsistencies if it is not - * up-to-date. - */ - try { - name = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ - if (!name.isEmpty()) { - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); - Oprofile.OprofileProject.setProject(project); - } - } catch (CoreException e) { - // Nothing to do - } - - options.loadConfiguration(config); - controlCombo.setText(options.getOprofileComboText()); - - kernelImageFileText.setText(options.getKernelImageFile()); - executionsSpinner.setSelection(options.getExecutionsNumber()); - - int separate = options.getSeparateSamples(); - - if (separate == OprofileDaemonOptions.SEPARATE_NONE) { - checkSeparateLibrary.setSelection(false); - checkSeparateKernel.setSelection(false); - } else { - //note that opcontrol will nicely ignore the trailing comma - if ((separate & OprofileDaemonOptions.SEPARATE_LIBRARY) != 0) - checkSeparateLibrary.setSelection(true); - if ((separate & OprofileDaemonOptions.SEPARATE_KERNEL) != 0) - checkSeparateKernel.setSelection(true); - } - enableOptionWidgets(); - } - - @Override - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - options = new LaunchOptions(); - options.saveConfiguration(config); - } - - @Override - public Image getImage() { - return OprofileLaunchPlugin.getImageDescriptor(OprofileLaunchPlugin.ICON_GLOBAL_TAB).createImage(); - } - - @Override - public void createControl(Composite parent) { - options = new LaunchOptions(); - - Composite top = new Composite(parent, SWT.NONE); - setControl(top); - top.setLayout(new GridLayout()); - - GridData data; - GridLayout layout; - createVerticalSpacer(top, 1); - - // Create container for kernel image file selection - Composite p = new Composite(top, SWT.NONE); - layout = new GridLayout(); - layout.numColumns = 2; - layout.marginHeight = 0; - layout.marginWidth = 0; - p.setLayout(layout); - data = new GridData(GridData.FILL_HORIZONTAL); - p.setLayoutData(data); - - Label l2 = new Label(p, SWT.NONE); - l2.setText(OprofileLaunchMessages.getString("tab.global.select")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalSpan = 2; - l2.setLayoutData(data); - - controlCombo = new CCombo(p, SWT.DROP_DOWN|SWT.READ_ONLY|SWT.BORDER); - List<String> tools = new ArrayList<>(Arrays.asList(OprofileProject.OPERF_BINARY)); - - /* - * Check if tools are installed. Use whichComand() method from - * RuntimeProcessFactory as it considers the LinuxTools Path. - */ - IProject project = getOprofileProject(); - try { - String toolPath = RuntimeProcessFactory.getFactory().whichCommand(OprofileProject.OCOUNT_BINARY, project); - // Command found - if (!toolPath.equals(OprofileProject.OCOUNT_BINARY)) { - tools.add(OprofileProject.OCOUNT_BINARY); - } - } catch (Exception e) { - } - - controlCombo.setItems(tools.toArray(new String [0])); - controlCombo.select(0); - controlCombo.addModifyListener(mev -> { - OprofileProject.setProfilingBinary(controlCombo.getText()); - options.setOprofileComboText(controlCombo.getText()); - enableOptionWidgets(); - updateLaunchConfigurationDialog(); - }); - data = new GridData(); - data.horizontalSpan = 2; - controlCombo.setLayoutData(data); - - kernelLabel = new Label(p, SWT.NONE); - kernelLabel.setText(OprofileLaunchMessages.getString("tab.global.kernelImage.label.text")); //$NON-NLS-1$ - kernelLabel.setEnabled(false); - data = new GridData(); - data.horizontalSpan = 2; - kernelLabel.setLayoutData(data); - - kernelImageFileText = new Text(p, SWT.SINGLE | SWT.BORDER); - data = new GridData(GridData.FILL_HORIZONTAL); - kernelImageFileText.setLayoutData(data); - kernelImageFileText.addModifyListener(mev -> handleKernelImageFileTextModify(kernelImageFileText)); - - Button button = createPushButton(p, OprofileLaunchMessages.getString("tab.global.kernelImage.browse.button.text"), null); //$NON-NLS-1$ - final Shell shell = top.getShell(); - button.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> showFileDialog(shell))); - - createVerticalSpacer(top, 1); - - // Create checkbox options container - p = new Composite(top, SWT.NONE); - layout = new GridLayout(); - layout.numColumns = 1; - layout.marginHeight = 0; - layout.marginWidth = 0; - p.setLayout(layout); - data = new GridData(GridData.FILL_HORIZONTAL); - data.horizontalSpan = 2; - p.setLayoutData(data); - - checkSeparateLibrary = myCreateCheckButton(p, OprofileLaunchMessages.getString("tab.global.check.separateLibrary.text")); //$NON-NLS-1$ - checkSeparateKernel = myCreateCheckButton(p, OprofileLaunchMessages.getString("tab.global.check.separateKernel.text")); //$NON-NLS-1$ - - //Number of executions spinner - Composite executionsComposite = new Composite(top, SWT.NONE); - GridLayout gridLayout = new GridLayout(2, false); - executionsComposite.setLayout(gridLayout); - executionsSpinnerLabel = new Label(executionsComposite, SWT.LEFT); - executionsSpinnerLabel.setText(OprofileLaunchMessages.getString("tab.global.executionsNumber.label.text")); //$NON-NLS-1$ - executionsSpinnerLabel.setToolTipText(OprofileLaunchMessages.getString("tab.global.executionsNumber.label.tooltip")); //$NON-NLS-1$ - executionsSpinner = new Spinner(executionsComposite, SWT.BORDER); - executionsSpinner.setMinimum(1); - executionsSpinner.addModifyListener(e -> { - options.setExecutionsNumber(executionsSpinner.getSelection()); - updateLaunchConfigurationDialog(); - }); - } - - - - // convenience method to create radio buttons with the given label - private Button myCreateCheckButton(Composite parent, String label) { - final Button b = new Button(parent, SWT.CHECK); - b.setText(label); - b.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> handleCheckSelected(b))); - - return b; - } - - //sets the proper separation mask for sample separation - private void handleCheckSelected(Button button) { - int oldSeparate = options.getSeparateSamples(); - int newSeparate = oldSeparate; //initalize - - if (button == checkSeparateLibrary) { - if (button.getSelection()) { - newSeparate = oldSeparate | OprofileDaemonOptions.SEPARATE_LIBRARY; - } else { - newSeparate = oldSeparate & ~OprofileDaemonOptions.SEPARATE_LIBRARY; - } - } else if (button == checkSeparateKernel) { - if (button.getSelection()) { - newSeparate = oldSeparate | OprofileDaemonOptions.SEPARATE_KERNEL; - } else { - newSeparate = oldSeparate & ~OprofileDaemonOptions.SEPARATE_KERNEL; - } - } - - options.setSeparateSamples(newSeparate); - - updateLaunchConfigurationDialog(); - } - - // handles text modification events for all text boxes in this tab - private void handleKernelImageFileTextModify(Text text) { - String errorMessage = null; - String filename = text.getText(); - - if (filename.length() > 0) { - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(getOprofileProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - IFileStore fileStore = proxy.getResource(filename); - if (!fileStore.fetchInfo().exists() || fileStore.fetchInfo().isDirectory()){ - String msg = OprofileLaunchMessages.getString("tab.global.kernelImage.kernel.nonexistent"); //$NON-NLS-1$ - errorMessage = MessageFormat.format(msg, filename); - } - - //seems odd, but must set it even if it is invalid so that performApply - // and isValid work properly - options.setKernelImageFile(filename); - } else { - // no kernel image file - options.setKernelImageFile(""); //$NON-NLS-1$ - } - - // Update dialog and error message - setErrorMessage(errorMessage); - updateLaunchConfigurationDialog(); - } - - // Displays a file dialog to allow the user to select the kernel image file - private void showFileDialog(Shell shell) { - try { - proxy = RemoteProxyManager.getInstance().getFileProxy(getOprofileProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - - FileDialog d = new FileDialog(shell, SWT.OPEN); - IFileStore kernel = proxy.getResource(options.getKernelImageFile()); - if (!kernel.fetchInfo().exists()) { - kernel = proxy.getResource("/boot"); //$NON-NLS-1$ - - if (!kernel.fetchInfo().exists()) { - kernel = proxy.getResource("/"); //$NON-NLS-1$ - } - } - d.setFileName(kernel.toString()); - d.setText(OprofileLaunchMessages.getString("tab.global.selectKernelDialog.text")); //$NON-NLS-1$ - String newKernel = d.open(); - if (newKernel != null) { - kernel = proxy.getResource(newKernel); - if (!kernel.fetchInfo().exists()) { - MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.RETRY | SWT.CANCEL); - mb.setMessage(OprofileLaunchMessages.getString("tab.global.selectKernelDialog.error.kernelDoesNotExist.text")); //$NON-NLS-1$ - switch (mb.open()) { - case SWT.RETRY: - // Ok, it's recursive, but it shouldn't matter - showFileDialog(shell); - break; - default: - case SWT.CANCEL: - break; - } - } else { - kernelImageFileText.setText(newKernel); - } - } - } - // Enable/disable widgets options according to the tool selected. - private void enableOptionWidgets() { - if (controlCombo.getText().equals(OprofileProject.OCOUNT_BINARY)) { - checkSeparateLibrary.setEnabled(false); - checkSeparateKernel.setEnabled(false); - kernelImageFileText.setEnabled(false); - kernelLabel.setEnabled(false); - executionsSpinnerLabel.setEnabled(false); - executionsSpinner.setEnabled(false); - } else { - checkSeparateLibrary.setEnabled(false); - checkSeparateKernel.setEnabled(false); - kernelImageFileText.setEnabled(false); - kernelLabel.setEnabled(false); - executionsSpinnerLabel.setEnabled(true); - executionsSpinner.setEnabled(true); - } - } - - /** - * Get project to profile - * @return IProject project to profile - */ - protected IProject getOprofileProject(){ - return Oprofile.OprofileProject.getProject(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/AbstractOprofileLaunchConfigurationDelegate.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/AbstractOprofileLaunchConfigurationDelegate.java deleted file mode 100644 index c77b3bc52..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/AbstractOprofileLaunchConfigurationDelegate.java +++ /dev/null @@ -1,404 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. and others - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * Keith Seitz <keiths@redhat.com> - setup code in launch the method, initially - * written in the now-defunct OprofileSession class - * QNX Software Systems and others - the section of code marked in the launch - * method, and the exec method - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.launching; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; - -import org.eclipse.cdt.debug.core.CDebugUtils; -import org.eclipse.cdt.launch.AbstractCLaunchDelegate; -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.LaunchOptions; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileCounter; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.linuxtools.internal.oprofile.ui.view.OcountView; -import org.eclipse.linuxtools.internal.oprofile.ui.view.OprofileView; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; - -public abstract class AbstractOprofileLaunchConfigurationDelegate extends AbstractCLaunchDelegate { - protected ILaunchConfiguration config; - private static final String OPROFILE_DATA = "oprofile_data"; //$NON-NLS-1$ - private static final String OCOUNT_DATA = "ocount_data"; //$NON-NLS-1$ - private static final String SESSION_DIR = "--session-dir="; //$NON-NLS-1$ - private static final String OUTPUT_FILE = "--output-file="; //$NON-NLS-1$ - private static final String EVENTS = "--events="; //$NON-NLS-1$ - private static final String APPEND = "--append"; //$NON-NLS-1$ - private static final String OPD_SETUP_EVENT_SEPARATOR = ":"; //$NON-NLS-1$ - private static final String OPD_SETUP_EVENT_TRUE = "1"; //$NON-NLS-1$ - private static final String OPD_SETUP_EVENT_FALSE = "0"; //$NON-NLS-1$ - - @Override - public void launch(ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { - this.config = config; - Oprofile.OprofileProject.setProject(getProject()); - LaunchOptions options = new LaunchOptions(); //default options created in the constructor - options.loadConfiguration(config); - IPath exePath = getExePath(config); - options.setBinaryImage(exePath.toOSString()); - Oprofile.OprofileProject.setProfilingBinary(options.getOprofileComboText()); - - /* - * Parameters needed for the application under profiling - */ - String appArgs[] = getProgramArgumentsArray(config); - String appEnv[] = getEnvironment(config); - - //if daemonEvents null or zero size, the default event will be used - OprofileDaemonEvent[] daemonEvents = null; - ArrayList<OprofileDaemonEvent> events = new ArrayList<>(); - if (!config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false)) { - //get the events to profile from the counters - OprofileCounter[] counters = oprofileCounters(config); - - for (int i = 0; i < counters.length; ++i) { - if (counters[i].getEnabled()) { - OprofileDaemonEvent[] counterEvents = counters[i].getDaemonEvents(); - events.addAll(Arrays.asList(counterEvents)); - } - } - - daemonEvents = new OprofileDaemonEvent[events.size()]; - events.toArray(daemonEvents); - } - - /* - * this code written by QNX Software Systems and others and was - * originally in the CDT under LocalCDILaunchDelegate::RunLocalApplication - */ - - if (!preExec(options, daemonEvents, launch)) { - return; - } - Process process = null; - // Executing operf with the default or specified events, - // outputing the profiling data to the project dir/OPROFILE_DATA - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY)) { - - String eventsString=null; - - // Event spec: "EVENT:count:mask:profileKernel:profileUser" - StringBuilder spec = new StringBuilder(); - spec.append(EVENTS); - boolean isCommaAllowed = false; - for (int i=0;i<events.size();i++) { - OprofileDaemonEvent event = events.get(i); - if(isCommaAllowed) { - spec.append(','); - } - spec.append(event.getEvent().getText()); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append(event.getResetCount()); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append(event.getEvent().getUnitMask().getMaskValue()); - // Some platforms allow EXCLUSIVE masks with same bit value, but - // different names and thus, the name is needed when specifying. - if (event.getEvent().getUnitMask().getMaskName() != null) { - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append(event.getEvent().getUnitMask().getMaskName()); - } - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append((event.getProfileKernel() ? OPD_SETUP_EVENT_TRUE : OPD_SETUP_EVENT_FALSE)); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append((event.getProfileUser() ? OPD_SETUP_EVENT_TRUE : OPD_SETUP_EVENT_FALSE)); - isCommaAllowed = true; - } - eventsString = spec.toString(); - - ArrayList<String> argArray = new ArrayList<>(Arrays.asList(appArgs)); - // Use remote file proxy to determine data folder since the project may be either local or remote - IRemoteFileProxy proxy = RemoteProxyManager.getInstance().getFileProxy(OprofileProject.getProject()); - IFileStore dataFolder = proxy.getResource(oprofileWorkingDirURI(config).getPath() + IPath.SEPARATOR + OPROFILE_DATA); - if(! dataFolder.fetchInfo().exists()) { - dataFolder.mkdir(EFS.SHALLOW, null); - } - argArray.add(0, exePath.toOSString()); - if (events.size()>0) { - argArray.add(0,eventsString); - } - argArray.add(0, SESSION_DIR + oprofileWorkingDirURI(config).getPath() + IPath.SEPARATOR + OPROFILE_DATA); - argArray.add(0, OprofileProject.OPERF_BINARY); - - boolean appended = false; - for(int i = 0; i < options.getExecutionsNumber(); i++){ - /* - * If profiling multiple times, - * append oprofile results from 2nd execution on. - */ - if (!appended && i!=0) { - argArray.add(1, APPEND); - appended = true; - } - String[] arguments = new String[argArray.size()]; - arguments = argArray.toArray(arguments); - try { - process = RuntimeProcessFactory.getFactory().exec(arguments, appEnv , OprofileProject.getProject()); - } catch (IOException e1) { - if (process != null) - process.destroy(); - Status status = new Status(IStatus.ERROR, OprofileLaunchPlugin.PLUGIN_ID, OprofileLaunchMessages.getString("oprofilelaunch.error.interrupted_error.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - DebugPlugin.newProcess( launch, process, renderProcessLabel( exePath.toOSString() ) ); - try{ - process.waitFor(); - } catch (InterruptedException e){ - if (process != null) - process.destroy(); - Status status = new Status(IStatus.ERROR, OprofileLaunchPlugin.PLUGIN_ID, OprofileLaunchMessages.getString("oprofilelaunch.error.interrupted_error.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - } - } - - // Executing ocount with the default or specified events, - // outputing the profiling data to the project dir/OPROFILE_DATA - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OCOUNT_BINARY)) { - String eventsString=null; - // Event spec: "EVENT:count:mask:profileKernel:profileUser" - StringBuilder spec = new StringBuilder(); - spec.append(EVENTS); - boolean isCommaAllowed = false; - for (int i=0;i<events.size();i++) { - OprofileDaemonEvent event = events.get(i); - if(isCommaAllowed) { - spec.append(','); - } - spec.append(event.getEvent().getText()); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append(event.getResetCount()); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append(event.getEvent().getUnitMask().getMaskValue()); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append((event.getProfileKernel() ? OPD_SETUP_EVENT_TRUE : OPD_SETUP_EVENT_FALSE)); - spec.append(OPD_SETUP_EVENT_SEPARATOR); - spec.append((event.getProfileUser() ? OPD_SETUP_EVENT_TRUE : OPD_SETUP_EVENT_FALSE)); - isCommaAllowed = true; - } - eventsString = spec.toString(); - - ArrayList<String> argArray = new ArrayList<>(Arrays.asList(appArgs)); - argArray.add(0, exePath.toOSString()); - if (events.size()>0) { - argArray.add(0,eventsString); - } - argArray.add(0, OUTPUT_FILE + oprofileWorkingDirURI(config).getPath() + IPath.SEPARATOR + OCOUNT_DATA); - argArray.add(0, OprofileProject.OCOUNT_BINARY); - - String[] arguments = new String[argArray.size()]; - arguments = argArray.toArray(arguments); - try { - process = RuntimeProcessFactory.getFactory().exec(arguments, OprofileProject.getProject()); - } catch (IOException e1) { - process.destroy(); - Status status = new Status(IStatus.ERROR, OprofileLaunchPlugin.PLUGIN_ID, OprofileLaunchMessages.getString("oprofilelaunch.error.interrupted_error.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - DebugPlugin.newProcess( launch, process, renderProcessLabel( exePath.toOSString() ) ); - try{ - process.waitFor(); - - // Put the OCount data in a separate view - StringBuilder buffer = new StringBuilder(); - // Use remote file proxy to operate resources since the project may be either local or remote - IRemoteFileProxy proxy = RemoteProxyManager.getInstance().getFileProxy(OprofileProject.getProject()); - - IFileStore ocountDataStore = proxy.getResource(oprofileWorkingDirURI(config).getPath() + - IPath.SEPARATOR + OCOUNT_DATA); - try ( - InputStream is = ocountDataStore.openInputStream(EFS.NONE, monitor); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)) - ) { - String s = reader.readLine(); - String sep_char = ""; //$NON-NLS-1$ - while (s != null) { - buffer.append(s); - buffer.append(sep_char); - sep_char = "\n"; //$NON-NLS-1$ - s = reader.readLine(); - } - - // Open the OCount View and display output from ocount - final String text = buffer.toString(); - Display.getDefault().syncExec(() -> refreshOcountView(text)); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } catch (InterruptedException e){ - process.destroy(); - Status status = new Status(IStatus.ERROR, OprofileLaunchPlugin.PLUGIN_ID, OprofileLaunchMessages.getString("oprofilelaunch.error.interrupted_error.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - return; - } - - postExec(options, daemonEvents, process); - - } - - protected abstract boolean preExec(LaunchOptions options, OprofileDaemonEvent[] daemonEvents, ILaunch launch); - - protected abstract void postExec(LaunchOptions options, OprofileDaemonEvent[] daemonEvents, Process process); - - @Override - protected String getPluginID() { - return OprofileLaunchPlugin.PLUGIN_ID; - } - - //Helper function to refresh the oprofile view. Opens and focuses the view - // if it isn't already. - protected void refreshOprofileView() { - OprofileView view = OprofileUiPlugin.getDefault().getOprofileView(); - if (view != null) { - view.refreshView(); - } else { - try { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(OprofileUiPlugin.ID_OPROFILE_VIEW); - } catch (PartInitException e2) { - e2.printStackTrace(); - } - OprofileUiPlugin.getDefault().getOprofileView().refreshView(); - } - } - - //Helper function to refresh the ocount view. Opens and focuses the view - // if it isn't already. - protected void refreshOcountView(String text) { - OcountView view = OprofileUiPlugin.getDefault().getOcountView(); - if (view == null) { - try { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(OprofileUiPlugin.ID_OCOUNT_VIEW); - } catch (PartInitException e2) { - e2.printStackTrace(); - return; - } - view = OprofileUiPlugin.getDefault().getOcountView(); - } - view.setText(text); - view.refreshView(); - } - - /* all these functions exist to be overridden by the test class in order to allow launch testing */ - - protected IProject oprofileProject(){ - return Oprofile.OprofileProject.getProject(); - } - - - /** - * Return the URI of the current working directory from the current - * project's file proxy. - * - * @return URI URI of the working directory. - * @throws CoreException - */ - protected URI oprofileWorkingDirURI(ILaunchConfiguration config) throws CoreException{ - File workingDirectory = this.getWorkingDirectory(config); - if(workingDirectory == null){ - return getProject().getLocationURI(); - } else { - URI uri = null; - try { - uri = new URI(workingDirectory.getAbsolutePath()); - } catch (URISyntaxException e) { - //Since working directory paths are verified by the launch tab, this exception should never be thrown - Status status = new Status(IStatus.ERROR, OprofileCorePlugin.getId(), - OprofileLaunchMessages.getString("oprofilelaunch.error.invalidworkingdir.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - return uri; - } - } - - protected OprofileCounter[] oprofileCounters(ILaunchConfiguration config){ - return OprofileCounter.getCounters(config); - } - - /** - * Runs opcontrol --help. Returns true if there was any output, false - * otherwise. Return value can be used to tell if the user successfully - * entered a password. - * @return true if opcontrol --help was run correctly. False otherwise - */ - protected boolean oprofileStatus() { - if (OprofileProject.getProfilingBinary().equals(OprofileProject.OPERF_BINARY)) { - try { - Process p = RuntimeProcessFactory.getFactory().exec(new String[] { "operf", "--version" }, //$NON-NLS-1$ //$NON-NLS-2$ - OprofileProject.getProject()); - return (p != null); - } catch (IOException e) { - return false; - } - } else { - try { - Process p = RuntimeProcessFactory.getFactory().exec(new String[] { "ocount", "--version" }, //$NON-NLS-1$ //$NON-NLS-2$ - OprofileProject.getProject()); - return (p != null); - } catch (IOException e) { - return false; - } - } - } - - protected IProject getProject(){ - try{ - return CDebugUtils.verifyCProject(config).getProject(); - } catch (CoreException e) { - e.printStackTrace(); - } - return null; - } - - /** - * - * @param config - * @return - * @throws CoreException - * @since 1.1 - */ - protected IPath getExePath(ILaunchConfiguration config) throws CoreException{ - return CDebugUtils.verifyProgramPath( config ); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchConfigurationDelegate.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchConfigurationDelegate.java deleted file mode 100644 index fc1748cf9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchConfigurationDelegate.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. and others - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.launching; - -import org.eclipse.core.resources.IProject; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.ILaunchesListener2; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.LaunchOptions; -import org.eclipse.swt.widgets.Display; - -public class OprofileLaunchConfigurationDelegate extends AbstractOprofileLaunchConfigurationDelegate { - - @Override - protected boolean preExec(LaunchOptions options, OprofileDaemonEvent[] daemonEvents, ILaunch launch) { - // set up and launch the oprofile daemon - IProject project = getProject(); - // Set current project to allow using the oprofile path that - // was chosen for the project - Oprofile.OprofileProject.setProject(project); - - if (!oprofileStatus()) { - OprofileCorePlugin.showErrorDialog("opcontrolProvider", null); //$NON-NLS-1$ - return false; - } - - // add a listener for termination of the launch prior to execution of launch - ILaunchManager lmgr = DebugPlugin.getDefault().getLaunchManager(); - lmgr.addLaunchListener(new LaunchTerminationWatcher(launch, options.getExecutionsNumber())); - return true; - } - - @Override - protected void postExec(LaunchOptions options, OprofileDaemonEvent[] daemonEvents, Process process) { - // do nothing here since the termination listener already registered will handle everything needed - } - - //A class used to listen for the termination of the current launch, and - // run some functions when it is finished. - class LaunchTerminationWatcher implements ILaunchesListener2 { - private ILaunch launch; - private int executions; - public LaunchTerminationWatcher(ILaunch il, int executions) { - launch = il; - this.executions = executions; - } - @Override - public void launchesTerminated(ILaunch[] launches) { - for (ILaunch l : launches) { - /** - * Dump samples from the daemon, shut down the daemon, activate the OProfile - * view (open it if it isn't already), refresh the view (which parses the - * data/ui model and displays it). - */ - if (l.equals(launch) && l.getProcesses().length == executions) { - // need to run this in the ui thread otherwise get SWT Exceptions - // based on concurrency issues - if (!OprofileProject.getProfilingBinary().equals(OprofileProject.OCOUNT_BINARY)) { - Display.getDefault().syncExec(() -> refreshOprofileView()); - } - } - } - } - @Override - public void launchesAdded(ILaunch[] launches) { /* dont care */} - @Override - public void launchesChanged(ILaunch[] launches) { /* dont care */ } - @Override - public void launchesRemoved(ILaunch[] launches) { /* dont care */ } - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchShortcut.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchShortcut.java deleted file mode 100644 index 440ae8cc5..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/launching/OprofileLaunchShortcut.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.launch.launching; - -import org.eclipse.cdt.core.model.IBinary; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.LaunchOptions; -import org.eclipse.linuxtools.profiling.launch.ProfileLaunchShortcut; - -/** - * A class that takes care of the right-click -> profile with oprofile - * shortcut, where the ProfileLaunchShortcut has the logic to automatically - * find binaries and create a default launch if one doesn't exist. - */ -public class OprofileLaunchShortcut extends ProfileLaunchShortcut { - @Override - protected ILaunchConfigurationType getLaunchConfigType() { - - return getLaunchManager().getLaunchConfigurationType(OprofileLaunchPlugin.ID_LAUNCH_PROFILE); - } - - /** - * Default settings for the OProfile-specific option tabs. - */ - @Override - protected void setDefaultProfileAttributes(ILaunchConfigurationWorkingCopy wc) { - //default global setup options - LaunchOptions options = new LaunchOptions(); - options.saveConfiguration(wc); - - //default event option - wc.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true); - } - - //need to have this here because a saved launch config will have the manual - // attribute left over, and a previous manual run will still run manually - // even if launched from the non-manual shortcut - @Override - protected ILaunchConfiguration findLaunchConfiguration(IBinary bin, String mode) { - ILaunchConfiguration config = super.findLaunchConfiguration(bin, mode); - - try { - ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); - wc.doSave(); - } catch (CoreException e) { - e.printStackTrace(); - } - - return config; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/oprofilelaunch.properties b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/oprofilelaunch.properties deleted file mode 100644 index 3d5360826..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/oprofilelaunch.properties +++ /dev/null @@ -1,84 +0,0 @@ -##################################################################### -# Copyright (c) 2004, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Keith Seitz <keiths@redhat.com> - initial implementation -# Kent Sebastian <ksebasti@redhat.com> - -###################################################################### -tab.claunch.name=&Application -tab.claunch.launchConfig.label.text=C/C++ Launch &Configuration: -tab.claunch.launchConfig.button.browse.text=&Browse... -tab.claunch.launchConfigDialog.title=Launch Configuration Selection -tab.claunch.launchConfigDialog.message=Choose a C/C++ Application Launch Configuration to profile: -oprofileCounter.counterString=Counter: {0,number,integer} - -tab.event.name=Events -tab.event.counterSettings.label.text=Counter settings -tab.event.counterSettings.enabled.button.text=Enabled -tab.event.eventDescription.label.text=Event Description: -tab.event.counterSettings.profileKernel.check.text=Profile kernel -tab.event.counterSettings.profileUser.check.text=Profile user binaries -tab.event.counterSettings.count.label.text=Count: -tab.event.counterSettings.count.too-small=Minimum count must be at least {0,number,integer} -tab.event.counterSettings.count.invalid=Invalid count value, must be an integer -tab.event.defaultevent.button.text=Use default event -tab.event.counterTab.counterText=Counter -tab.event.eventfilter.message=type filter text -tab.event.timermode.no.options=OProfile is running in timer mode; no event options can be specified. -tab.event.addevent.button.text=Add > -tab.event.addallevent.button.text=Add All > -tab.event.removeevent.button.text= < Remove -tab.event.removeallevent.button.text= < Remove All -tab.event.customizeevent.button.text = Customize Event -tab.event.validation.msg= Event {0} validation failed -tab.event.opcontrol.validation.msg= Events count must be equal or less then number of counter [hardware counter is {0}] - -tab.global.name=Global -tab.global.select=Profile with: -tab.global.kernelImage.label.text=&Kernel image file (optional): -tab.global.kernelImage.kernel.nonexistent=Kernel image \"{0}\" does not exist -tab.global.kernelImage.browse.button.text=&Browse... -tab.global.selectKernelDialog.text=Select current kernel file -tab.global.selectKernelDialog.error.kernelDoesNotExist.text=The selected kernel image file does not exist. -tab.global.check.separateLibrary.text=Include dependent shared libraries -tab.global.check.separateKernel.text=Include dependent kernel modules (also includes libraries) -tab.global.check.separateThread.text=Separate profiles per thread -tab.global.check.separateCpu.text=Separate profiles per CPU -tab.global.executionsNumber.label.text=Number of executions -tab.global.executionsNumber.label.tooltip=Sets the number of times the binary will be executed in order to collect the samples. -tab.global.check.manualProfile.text=Manual control of OProfile daemon - -unitmaskViewer.label.text=Unit mask: - -launchshortcut.no_project_error=No project associated with selected element. -launchshortcut.errordialog.title=OProfile Launcher -launchshortcut.errordialog.no_launch_error=Error: No launch configurations exist for this project. - -launchshortcut.launchselectiondialog.no_project_name=<no name> -launchshortcut.launchselectiondialog.title=Profile Configuration Selection -launchshortcut.launchselectiondialog.message=Select a profiling launch configuration: - -oprofiledcontroldialog.title=OProfile Control -oprofiledcontroldialog.buttons.startdaemon=Start Daemon -oprofiledcontroldialog.buttons.stopdaemon=Stop Daemon -oprofiledcontroldialog.buttons.refreshview=Refresh View -oprofiledcontroldialog.buttons.resetsession=Reset Session -oprofiledcontroldialog.buttons.savesession=Save Session -oprofiledcontroldialog.feedback.init=Dialog initialized -oprofiledcontroldialog.feedback.startdaemon=Started OProfile daemon -oprofiledcontroldialog.feedback.stopdaemon=Stopped OProfile daemon -oprofiledcontroldialog.feedback.reset=Default session cleared -oprofiledcontroldialog.feedback.save=Opening session save dialog.. -oprofiledcontroldialog.feedback.dumpsamples=Dumping samples.. -oprofiledcontroldialog.feedback.refreshed=OProfile view refreshed - -oprofiledcontroldialog.post.stopdaemon=Ensuring the OProfile daemon is stopped.. - -oprofilelaunch.error.interrupted_error.status_message=The profile execution was interrupted by another thread -oprofilelaunch.error.invalidworkingdir.status_message=Invalid working directory diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/build.properties deleted file mode 100644 index 649829126..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -bin.includes = feature.xml,\ - feature.properties,\ - p2.inf -src.includes = feature.properties,\ - feature.xml diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.properties b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.properties deleted file mode 100644 index 903b0deab..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.properties +++ /dev/null @@ -1,16 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2008, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat, Inc. - initial API and implementation -#******************************************************************************** -featureName=Remote OProfile Integration -description=Plugins to bring remote OProfile-based profiling into the workbench. -provider=Eclipse Linux Tools -copyright=Copyright 2008, 2010 Red Hat, Inc. diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.xml b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.xml deleted file mode 100644 index 299007a5a..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/feature.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<feature - id="org.eclipse.linuxtools.oprofile.remote.feature" - label="%featureName" - version="7.4.0.qualifier" - provider-name="%provider" - os="linux" - license-feature="org.eclipse.license" - license-feature-version="0.0.0"> - - <description> - %description - </description> - - <copyright> - %copyright - </copyright> - - <license url="%licenseURL"> - %license - </license> - - <url> - <update label="Linux Tools Update Site" url="http://download.eclipse.org/linuxtools/update"/> - </url> - - <requires> - <import plugin="org.eclipse.core.runtime" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.ui" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.cdt.core"/> - <import plugin="org.eclipse.cdt.debug.core"/> - <import plugin="org.eclipse.cdt.launch"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.debug.core"/> - <import plugin="org.eclipse.debug.ui"/> - <import plugin="org.eclipse.linuxtools.profiling.launch"/> - <import plugin="org.eclipse.ui.ide"/> - <import plugin="org.eclipse.jface.text"/> - <import plugin="org.eclipse.linuxtools.profiling.ui"/> - <import plugin="org.eclipse.ui.editors" version="3.4.0" match="greaterOrEqual"/> - <import plugin="org.eclipse.help"/> - <import feature="org.eclipse.linuxtools.oprofile.feature" version="0.1.0" match="greaterOrEqual"/> - <import feature="org.eclipse.linuxtools.profiling.remote" version="0.8.0" match="greaterOrEqual"/> - </requires> - - <plugin - id="org.eclipse.linuxtools.oprofile.remote.launch" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - -</feature> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/p2.inf b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/p2.inf deleted file mode 100644 index 193bce9e3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/p2.inf +++ /dev/null @@ -1,3 +0,0 @@ -instructions.configure=\ -org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/linuxtools/update,type:0,name:Linux Tools,enabled:false); \ -org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/linuxtools/update,type:1,name:Linux Tools,enabled:false); diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/pom.xml deleted file mode 100644 index fa86e4c8d..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote-feature/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.remote.feature</artifactId> - <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> - - <name>Linux Tools Remote OProfile Integration Feature</name> - - <build> - <plugins> - <plugin> - <groupId>org.eclipse.tycho.extras</groupId> - <artifactId>tycho-source-feature-plugin</artifactId> - <executions> - <execution> - <id>source-feature</id> - <phase>package</phase> - <goals> - <goal>source-feature</goal> - </goals> - <configuration> - <excludes> - <plugin id="org.eclipse.linuxtools.oprofile.doc"/> - </excludes> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.eclipse.tycho</groupId> - <artifactId>tycho-p2-plugin</artifactId> - <version>${tycho-version}</version> - <executions> - <execution> - <id>attached-p2-metadata</id> - <phase>package</phase> - <goals> - <goal>p2-metadata</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.project b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.project deleted file mode 100644 index ac7d64636..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.project +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.remote.launch</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c7a729bc4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,99 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/META-INF/MANIFEST.MF deleted file mode 100644 index 0136db6c8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/META-INF/MANIFEST.MF +++ /dev/null @@ -1,25 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.remote.launch;singleton:=true -Bundle-Version: 2.0.0.qualifier -Bundle-Vendor: %bundleProvider -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0", - org.eclipse.ui;bundle-version="3.4.0", - org.eclipse.linuxtools.tools.launch.core -Bundle-Activator: org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin -Bundle-ActivationPolicy: lazy -Bundle-Localization: plugin -Import-Package: org.eclipse.cdt.debug.core, - org.eclipse.cdt.launch, - org.eclipse.core.resources, - org.eclipse.debug.core, - org.eclipse.debug.ui, - org.eclipse.linuxtools.internal.oprofile.core, - org.eclipse.linuxtools.internal.oprofile.core.linux, - org.eclipse.linuxtools.internal.oprofile.launch, - org.eclipse.linuxtools.internal.oprofile.launch.configuration, - org.eclipse.linuxtools.internal.oprofile.launch.launching, - org.eclipse.linuxtools.profiling.launch -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.remote.launch diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/about.html b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/build.properties deleted file mode 100644 index 783b22fa3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/build.properties +++ /dev/null @@ -1,10 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - plugin.properties,\ - icons/,\ - about.html -src.includes = about.html,\ - icons/ -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/event_tab.gif b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/event_tab.gif deleted file mode 100644 index c91f254ab1728df3d6555002c789ef4519693eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmZ?wbhEHb6krfwIK}`1%*@QJER6Q{@oK^K2I2LhDcg(_x<ymB#m2^pXYPoPkC({a zZI{|3mAl72W0Fk%9+`r@a>WNyQ|mJ_G8D=VDOVm*t39S!d(@!jh<5!k&BhZ3jmK+i zYn}Vf*iAU+IQ7#0dV9BNmwaYk4q0>~YT@;Y`THy9@83V)e!+qzP0NqAt~`E!zJ2kA zdvo_*nZNhS)ML-59eY0G_>2Gh?U$Z=z3bM;UAI3Sy7TV;{rFQ)zMgvW?d+4U7oL1L z|Log^XJ4<s_<Zfvk87`gU4QfI#+zTa-u$@p=Eu#qzwW;Map&FdyFm2*_r3SO@4x^3 z@cqw+?|(i1@axHkACEr%dHnIu(~p0ieEReB)1PObem(pA=LHab`Sa@Q-`C&%zWMg| z?YF=0zW;sy{qLur|Nj4<|Nr*~a8Oa7Q2fcl$i-04paU`*6ekSq#~SLJ>V;Zcn>(7s zC3H=#&2;5eI_t%h9pYltV&eVe6gs6`^&&&~Lxc6*Wjgo_;%oxFc)f${;|+zHc`Tzt zyqs8_eZphyM4JU%)Pp?CSscAWwR}%BaoGlhc(Yr%9T8#RZsstG3l8-5^br<jv;d}n zCZ#a#$e@sLW{pG(3yo)gI|G<bi|eXcF>p*~a_EwL#FBf$;W4KK!+(YjMuTQn1{Wb7 nkBEkiirivMLIFZY^4*RLFokWBVK}h3VTKXwL>YAr0S0RTR(c5A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/global_tab.gif b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/global_tab.gif deleted file mode 100644 index ec6cca4525bf483077bcc2039eaede6e71258c89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmZ?wbhEHb6krfwxXQo~6H^{jeln(fZOo*T0n4t1_pLGO*y1x`Q}l#2#d9{*&R!j} z=48ytlQC=8PC9vVEf75cDvl|iRDSZw$w?>6*Pfg-V@=K4ljW1v0+qx}ngk@vPoA7q zUJhiJLo_{ka&qV9;sbl<|Nryp$;q{o)ztp~|6g8S4kQ^U28usf7#SEe8FWA<f&9e4 z)_!10frpNiV|R*Biin!~l9PuU10=-x13Fxad?eagK5kT)YP0YX=OG0NyTeDHhzNyR zEIgK^@ZpGhv8sr;qL^TfMq!+=w79s0v``I0AvYf%uau;eEYrMBrxYF@X4z#L^Xr^E ryja!dF=;UPILlWv*UV=qaFu7=uyMDqrh?oi4Y@6cPoMF1WUvMRl^lM1 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/profile_run.png b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/icons/profile_run.png deleted file mode 100644 index 4f8488f1c0c23bdc8703856b2a3baae022046332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;z9%{{UP0v71Ez000SaNLh0L02rG902rGANp*vi0005+Nkl<ZI1!~% zy^9l35dZDxt$Q(1&J*uIa@d3*2q_eVloAf?Y_3wc+Qz@e&i*XytfHcYe}N(*cS1n0 zFbgIj`;ojaXI`=!!{tEmy`6b8vopV){k;MHb2(h!>-GF*v-zx6s~u>qjZz9EMrj4D z7JeDm6wiy|OPZ!H`u)D~sTl2c`z6UEE)+soky5T~LAG4R>HRi|<2W7q_EVob*txdz zFi8@eygh+icQM^dF;C_wRE~nSrfq2R6Z{Nt)Hy;Jh7Y*br#8^-b`>YYyD_{Q9>!0m za6UQ^KLj#2vjCjTOXku7k*V2tS<zC9gEU1{joiys<RW7QK%G?p#oi3=Z{l{#@_SJ+ z$El2dffbC=#0t{g6r=lN#HTTeOEc8(Ud8o;eT4oNNeIvQ_<HuqmXNX?EC7}rM574% zuVYNFr10)Z$V}q<t8Z%@1X)l5*bWvPa0j$p;le9Ci|ySEke_B{@}_f*1M5^-IpAzN zkcp^58;rj=SQ0Y+HMU*w)y<yIA<hV(yr&XjL`Ks(D}do}_>Ly=@$untHHAEh@)n7m zKt7jpTSC(x=Xw5yVeDN+QB-fWS|1vXM#mTfntLmoY>rJPllOzc;E?j>)n(Ic`}Fb- qfmSrzM$fB)LZ3<2c{`u?Z;?OB0TZGI2?9z00000<MNUMnLSTY=brB^1 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.properties deleted file mode 100644 index d1746e6e0..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.properties +++ /dev/null @@ -1,23 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2008, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat, Inc. - initial API and implementation -#******************************************************************************* -bundleName=OProfile Remote Launch Plug-in (Incubation) -bundleProvider=Eclipse Linux Tools - -pluginName=OProfile Remote Launch Support -launchconfigurationtype.remote.label=Profile With OProfile (Remote) - -launchgroup.label=OProfile -launchgroup.titile=Select a run configuration to profile with OProfile - -launchmode.label=Profile -launchmode.launchaslabel=Profile As diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.xml b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.xml deleted file mode 100644 index 12125b0bb..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/plugin.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.2"?> -<plugin> - <extension - point="org.eclipse.debug.core.launchConfigurationTypes"> - <launchConfigurationType - delegate="org.eclipse.linuxtools.internal.oprofile.remote.launch.launching.OprofileRemoteLaunchConfigurationDelegate" - id="org.eclipse.linuxtools.oprofile.launch.oprofile.remote" - modes="linuxtools" - name="%launchconfigurationtype.remote.label" - public="true" - sourceLocatorId="org.eclipse.cdt.debug.core.sourceLocator" - sourcePathComputerId="org.eclipse.cdt.debug.core.sourcePathComputer"> - </launchConfigurationType> - </extension> - <extension - point="org.eclipse.debug.ui.launchConfigurationTypeImages"> - <launchConfigurationTypeImage - configTypeID="org.eclipse.linuxtools.oprofile.launch.oprofile.remote" - icon="icons/profile_run.png" - id="org.eclipse.linuxtools.oprofile.launch.oprofileImage"> - </launchConfigurationTypeImage> - </extension> - <extension - point="org.eclipse.debug.ui.launchConfigurationTabGroups"> - <launchConfigurationTabGroup - class="org.eclipse.linuxtools.internal.oprofile.remote.launch.configuration.OprofileRemoteLaunchConfigurationTabGroup" - id="org.eclipse.linuxtools.oprofile.launch.remoteLaunchConfigurationTabGroup" - type="org.eclipse.linuxtools.oprofile.launch.oprofile.remote"> - </launchConfigurationTabGroup> - </extension> - <extension - point="org.eclipse.debug.ui.launchShortcuts"> - </extension> -</plugin> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/pom.xml deleted file mode 100644 index 2299de2e3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/pom.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.remote.launch</artifactId> - <version>2.0.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile Remote Launch Plug-in</name> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/configuration/OprofileRemoteLaunchConfigurationTabGroup.java b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/configuration/OprofileRemoteLaunchConfigurationTabGroup.java deleted file mode 100644 index a6610ab36..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/configuration/OprofileRemoteLaunchConfigurationTabGroup.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012, 2018 IBM Corporation - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Rafael Medeiros Teixeira <rafaelmt@linux.vnet.ibm.com> - initial API and implementation -*******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.remote.launch.configuration; - -import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileEventConfigTab; -import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileSetupTab; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyProfileLaunchConfigurationTabGroup; - -/** - * @since 1.1 - */ -public class OprofileRemoteLaunchConfigurationTabGroup extends RemoteProxyProfileLaunchConfigurationTabGroup { - @Override - public AbstractLaunchConfigurationTab[] getProfileTabs() { - return new AbstractLaunchConfigurationTab[] { new OprofileSetupTab(), new OprofileEventConfigTab() }; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/launching/OprofileRemoteLaunchConfigurationDelegate.java b/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/launching/OprofileRemoteLaunchConfigurationDelegate.java deleted file mode 100644 index 13456b121..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.remote.launch/src/org/eclipse/linuxtools/internal/oprofile/remote/launch/launching/OprofileRemoteLaunchConfigurationDelegate.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012, 2018 IBM Corporation - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Rafael Medeiros Teixeira <rafaelmt@linux.vnet.ibm.com> - initial API and implementation -*******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.remote.launch.launching; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages; -import org.eclipse.linuxtools.internal.oprofile.launch.launching.OprofileLaunchConfigurationDelegate; -import org.eclipse.linuxtools.profiling.launch.ProxyLaunchMessages; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyCMainTab; - - -/** - * @since 1.1 - */ -public class OprofileRemoteLaunchConfigurationDelegate extends OprofileLaunchConfigurationDelegate { - private final static String EMPTY_STRING = ""; //$NON-NLS-1$ - - @Override - protected IProject getProject() { - String name = null; - try { - name = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING); - } catch (CoreException e) { - return null; - } - if (name == null) { - return null; - } - - return ResourcesPlugin.getWorkspace().getRoot().getProject(name); - } - - @Override - protected IPath getExePath(ILaunchConfiguration config) - throws CoreException { - String pathString = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, EMPTY_STRING); - URI uri; - try { - uri = new URI(pathString); - } catch (URISyntaxException e) { - throw new CoreException(new Status(IStatus.ERROR, OprofileCorePlugin.getId() , - ProxyLaunchMessages.uri_of_executable_is_invalid)); - } - IPath path = new Path(uri.getPath()); - - return path; - } - - @Override - protected URI oprofileWorkingDirURI(ILaunchConfiguration config) throws CoreException { - String workingDirString = config.getAttribute(RemoteProxyCMainTab.ATTR_REMOTE_WORKING_DIRECTORY_NAME, EMPTY_STRING); - if(workingDirString.equals(EMPTY_STRING)){ - return getProject().getLocationURI(); - } else { - URI workingDirUri; - try { - workingDirUri = new URI(workingDirString); - } catch (URISyntaxException e) { - Status status = new Status( - IStatus.ERROR, - OprofileCorePlugin.getId(), - OprofileLaunchMessages - .getString("oprofilelaunch.error.invalidworkingdir.status_message")); //$NON-NLS-1$ - throw new CoreException(status); - } - return workingDirUri; - } - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.tests/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.tests/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7a2f00a40..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,95 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 7c5a98834..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.tests -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: %bundleProvider -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: org.eclipse.linuxtools.internal.oprofile.core.opxml, - org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata, - org.eclipse.linuxtools.internal.oprofile.core.model -Export-Package: org.eclipse.linuxtools.oprofile.tests -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0" -Bundle-ActivationPolicy: lazy -Bundle-Activator: org.eclipse.linuxtools.oprofile.tests.TestPlugin -Bundle-Localization: plugin -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.tests diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/about.html b/oprofile/org.eclipse.linuxtools.oprofile.tests/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.tests/build.properties deleted file mode 100644 index f80b4cb2d..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/build.properties +++ /dev/null @@ -1,9 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - resources/,\ - plugin.properties,\ - about.html -src.includes = resources/,\ - about.html -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.tests/plugin.properties deleted file mode 100644 index 248a2e4b1..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/plugin.properties +++ /dev/null @@ -1,14 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2009, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Kent Sebastian <ksebasti@redhat.com> - initial API and implementation -#******************************************************************************* -bundleName=OProfile Common Test Plug-in -bundleProvider=Eclipse Linux Tools diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.tests/pom.xml deleted file mode 100644 index 7ca0cae3b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.tests</artifactId> - <version>1.0.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile Tests Plug-in</name> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data.xml b/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data.xml deleted file mode 100644 index 69dffc324..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/test/path/for/image" count="205000"> - <symbols> - <symbol name="TestFunction1(int)" file="/test/path/for/src/image.cpp" line="1" count="180000"> - <sample> - <count>130000</count> - <file>/test/path/for/src/image.cpp</file> - <line>42</line> - </sample> - <sample> - <count>40000</count> - <file>/test/path/for/src/image.cpp</file> - <line>36</line> - </sample> - <sample> - <count>9999</count> - <file>/test/path/for/src/image.cpp</file> - <line>31</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image.cpp</file> - <line>39</line> - </sample> - </symbol> - <symbol name="TestFunction2(int, int)" file="/test/path/for/src/image2.cpp" line="50" count="20000"> - <sample> - <count>19998</count> - <file>/test/path/for/src/image2.cpp</file> - <line>94</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>12</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>55</line> - </sample> - </symbol> - </symbols> - <dependent count="5000"> - <image name="/no-vmlinux" count="4400"> - </image> - <image name="/lib64/ld-2.9.so" count="300"> - <symbols> - <symbol name="do_lookup_x" file="dl-lookup.c" line="0" count="299"> - <sample> - <count>299</count> - <file>dl-lookup.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_unload_cache" file="rawmemchr.c" line="0" count="1"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/usr/lib64/libstdc++.so.6.0.10" count="160"> - </image> - <image name="/lib64/libc-2.9.so" count="140"> - <symbols> - <symbol name="_IO_new_file_seekoff" file="" line="0" count="100"> - <sample> - <count>100</count> - <file></file> - <line>0</line> - </sample> - </symbol> - <symbol name="bcopy" file="" line="0" count="40"> - <sample> - <count>40</count> - <file></file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - </dependent> - </image> -</model-data> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_multiple_image.xml b/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_multiple_image.xml deleted file mode 100644 index 485a22971..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_multiple_image.xml +++ /dev/null @@ -1,239 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/no-vmlinux" count="6844"> - </image> - <image name="/bin/grep" count="2"> - </image> - <image name="/bin/gawk" count="8"> - </image> - <image name="/bin/bash" count="142"> - </image> - <image name="/lib64/libgobject-2.0.so.0.1800.3" count="61"> - </image> - <image name="/lib64/libgio-2.0.so.0.1800.3" count="2"> - </image> - <image name="/lib64/libdl-2.9.so" count="2"> - <symbols> - <symbol name="__do_global_dtors_aux" file="crtstuff.c" count="2" line="0"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/ld-2.9.so" count="36"> - <symbols> - <symbol name="_dl_start" file="rtld.c" count="1" line="0"> - <sample> - <count>1</count> - <line>0</line> - </sample> - </symbol> - <symbol name="dl_main" file="rtld.c" count="3" line="0"> - <sample> - <count>3</count> - <file>rtld.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="init_tls" file="rtld.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rtld.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="open_verify" file="dl-load.c" count="2" line="0"> - <sample> - <count>2</count> - <file>dl-load.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_setup_hash" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_init_internal" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_important_hwcaps" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="munmap" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_load_cache_lookup" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_fini" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__GI_memset" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_init_paths" file="rawmemchr.c" count="3" line="0"> - <sample> - <count>3</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__brk" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_name_match_p" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="index" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_resolve_conflicts" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_cache_libcmp" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="strcmp" file="rawmemchr.c" count="2" line="0"> - <sample> - <count>2</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_start_user" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="strlen" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_sort_fini" file="rawmemchr.c" count="1" line="0"> - <sample> - <count>1</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="_dl_map_object_deps" file="rawmemchr.c" count="4" line="0"> - <sample> - <count>4</count> - <file>rawmemchr.c</file> - <line>0</line> - </sample> - </symbol> - <symbol name="__libc_memalign" file="" count="1" line="0"> - <sample> - <count>1</count> - <file></file> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/libdbus-1.so.3.4.0" count="10"> - </image> - <image name="/lib64/libfuse.so.2.7.4" count="1"> - </image> - <image name="/lib64/libm-2.9.so" count="2"> - <symbols> - <symbol name="__dubsin" file="interp.c" count="2" line="0"> - <sample> - <count>2</count> - <line>0</line> - </sample> - </symbol> - </symbols> - </image> - <image name="/lib64/libglib-2.0.so.0.1800.3" count="107"> - </image> - <image name="/lib64/libgthread-2.0.so.0.1800.3" count="3"> - </image> - <image name="/usr/bin/which" count="1"> - </image> - <image name="/usr/bin/compiz" count="21"> - </image> - <image name="/usr/bin/Xorg" count="154"> - <dependent count="6"> - <image name="[vdso]" count="6"> - </image> - </dependent> - </image> - <image name="/usr/bin/ophelp" count="11"> - </image> - <image name="/usr/bin/qemu-kvm" count="142"> - <dependent count="1"> - <image name="[vdso]" count="1"> - </image> - </dependent> - </image> - <image name="/usr/bin/oprofiled" count="26"> - </image> - <image name="/usr/sbin/libvirtd" count="3"> - </image> - <image name="/usr/libexec/multiload-applet-2" count="1"> - </image> - <image name="/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so" count="7"> - </image> - <image name="/usr/lib64/libgtk-x11-2.0.so.0.1400.5" count="22"> - </image> - <image name="/usr/lib64/libpangocairo-1.0.so.0.2203.0" count="4"> - </image> - <image name="/usr/lib64/libXrender.so.1.3.0" count="2"> - </image> -</model-data> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_nodepimage.xml b/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_nodepimage.xml deleted file mode 100644 index 6a35c09f5..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/resources/test_model-data_nodepimage.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<model-data> - <image name="/test/path/for/image" count="200000"> - <symbols> - <symbol name="TestFunction1(int)" file="/test/path/for/src/image.cpp" line="0" count="180000"> - <sample> - <count>130000</count> - <file>/test/path/for/src/image.cpp</file> - <line>42</line> - </sample> - <sample> - <count>40000</count> - <file>/test/path/for/src/image.cpp</file> - <line>36</line> - </sample> - <sample> - <count>9999</count> - <file>/test/path/for/src/image.cpp</file> - <line>31</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image.cpp</file> - <line>39</line> - </sample> - </symbol> - <symbol name="TestFunction2(int, int)" file="/test/path/for/src/image2.cpp" line="0" count="20000"> - <sample> - <count>19998</count> - <file>/test/path/for/src/image2.cpp</file> - <line>94</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>12</line> - </sample> - <sample> - <count>1</count> - <file>/test/path/for/src/image2.cpp</file> - <line>55</line> - </sample> - </symbol> - </symbols> - </image> -</model-data> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestPlugin.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestPlugin.java deleted file mode 100644 index a36edc2c4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestPlugin.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import org.eclipse.core.runtime.Plugin; -import org.osgi.framework.BundleContext; - -public class TestPlugin extends Plugin { - - // The plug-in ID - public static final String PLUGIN_ID = "org.eclipse.linuxtools.oprofile.tests"; //$NON-NLS-1$ - - public static final String SYMBOL1_FILENAME = "/test/path/for/src/image.cpp"; //$NON-NLS-1$ - public static final String SYMBOL2_FILENAME = "/test/path/for/src/image2.cpp"; //$NON-NLS-1$ - - public static final String DEP2_SYMBOL1_FILENAME = "dl-lookup.c"; //$NON-NLS-1$ - public static final String DEP2_SYMBOL2_FILENAME = "rawmemchr.c"; //$NON-NLS-1$ - public static final String DEP4_SYMBOL_FILENAME = ""; //$NON-NLS-1$ - - // The shared instance - private static TestPlugin plugin = null; - - /** - * The constructor - */ - public TestPlugin() { - } - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static TestPlugin getDefault() { - return plugin; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent.java deleted file mode 100644 index f5b397bb7..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; - -/* - * A faked OpModelSession object of a typical image + some dependent images. - */ -public class TestingOpModelEvent extends OpModelEvent { - private static final String REL_PATH_TO_TEST_XML = "resources/test_model-data.xml"; //$NON-NLS-1$ - public static final String IMAGE_OUTPUT = "/test/path/for/image, Count: 205000, Dependent Count: 5000\nSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\tSample: Line #: 42, Count: 130000\n\tSample: Line #: 36, Count: 40000\n\tSample: Line #: 31, Count: 9999\n\tSample: Line #: 39, Count: 1\nSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\tSample: Line #: 94, Count: 19998\n\tSample: Line #: 12, Count: 1\n\tSample: Line #: 55, Count: 1\nDependent Image: /no-vmlinux, Count: 4400\nDependent Image: /lib64/ld-2.9.so, Count: 300\n\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\tSample: Line #: 0, Count: 299\n\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\tSample: Line #: 0, Count: 1\nDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\nDependent Image: /lib64/libc-2.9.so, Count: 140\n\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\tSample: Line #: 0, Count: 100\n\tSymbols: bcopy, File: , Count: 40\n\t\tSample: Line #: 0, Count: 40\n"; //$NON-NLS-1$ - public static final String IMAGE_OUTPUT_WITHTAB = "/test/path/for/image, Count: 205000, Dependent Count: 5000\n\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\tSample: Line #: 42, Count: 130000\n\t\tSample: Line #: 36, Count: 40000\n\t\tSample: Line #: 31, Count: 9999\n\t\tSample: Line #: 39, Count: 1\n\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\tSample: Line #: 94, Count: 19998\n\t\tSample: Line #: 12, Count: 1\n\t\tSample: Line #: 55, Count: 1\n\tDependent Image: /no-vmlinux, Count: 4400\n\tDependent Image: /lib64/ld-2.9.so, Count: 300\n\t\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\t\tSample: Line #: 0, Count: 299\n\t\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\t\tSample: Line #: 0, Count: 1\n\tDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\n\tDependent Image: /lib64/libc-2.9.so, Count: 140\n\t\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\t\tSample: Line #: 0, Count: 100\n\t\tSymbols: bcopy, File: , Count: 40\n\t\t\tSample: Line #: 0, Count: 40\n"; //$NON-NLS-1$ - - public TestingOpModelEvent(OpModelSession session, String name) { - super(session, name); - } - @Override - protected OpModelImage getNewImage() { - /* this code mostly taken from OpxmlRunner */ - OpModelImage parsedImage = null; - try { - XMLReader reader = null; - parsedImage = new OpModelImage(); - ModelDataProcessor.CallData image = new ModelDataProcessor.CallData(parsedImage); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(image); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(TestPlugin.getDefault().getBundle(), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (SAXException e) { - e.printStackTrace(); - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } - - return parsedImage; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent2.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent2.java deleted file mode 100644 index 62444c0a6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent2.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; - -/* - * A faked OpModelSession object of a typical image with no dependent images. - */ -public class TestingOpModelEvent2 extends OpModelEvent { - private static final String REL_PATH_TO_TEST_XML = "resources/test_model-data_nodepimage.xml"; //$NON-NLS-1$ - public static final String IMAGE_OUTPUT = "/test/path/for/image, Count: 205000, Dependent Count: 5000\nSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\tSample: Line #: 42, Count: 130000\n\tSample: Line #: 36, Count: 40000\n\tSample: Line #: 31, Count: 9999\n\tSample: Line #: 39, Count: 1\nSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\tSample: Line #: 94, Count: 19998\n\tSample: Line #: 12, Count: 1\n\tSample: Line #: 55, Count: 1\n"; //$NON-NLS-1$ - public static final String IMAGE_OUTPUT_WITHTAB = "/test/path/for/image, Count: 205000, Dependent Count: 5000\n\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\tSample: Line #: 42, Count: 130000\n\t\tSample: Line #: 36, Count: 40000\n\t\tSample: Line #: 31, Count: 9999\n\t\tSample: Line #: 39, Count: 1\n\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\tSample: Line #: 94, Count: 19998\n\t\tSample: Line #: 12, Count: 1\n\t\tSample: Line #: 55, Count: 1\n"; //$NON-NLS-1$ - - public TestingOpModelEvent2(OpModelSession session, String name) { - super(session, name); - } - @Override - protected OpModelImage getNewImage() { - /* this code mostly taken from OpxmlRunner */ - OpModelImage parsedImage = null; - try { - XMLReader reader = null; - parsedImage = new OpModelImage(); - ModelDataProcessor.CallData image = new ModelDataProcessor.CallData(parsedImage); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(image); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(TestPlugin.getDefault().getBundle(), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (SAXException e) { - e.printStackTrace(); - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } - - return parsedImage; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent3.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent3.java deleted file mode 100644 index a58629605..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent3.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.OprofileSAXHandler; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.modeldata.ModelDataProcessor; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; - -/* - * A faked OpModelSession object when there are multiple images in the session, - * simulating when the session was not created from within the eclipse plugin. - */ -public class TestingOpModelEvent3 extends OpModelEvent { - private static final String REL_PATH_TO_TEST_XML = "resources/test_model-data_multiple_image.xml"; //$NON-NLS-1$ - - public TestingOpModelEvent3(OpModelSession session, String name) { - super(session, name); - } - @Override - protected OpModelImage getNewImage() { - /* this code mostly taken from OpxmlRunner */ - OpModelImage parsedImage = null; - try { - XMLReader reader = null; - parsedImage = new OpModelImage(); - ModelDataProcessor.CallData image = new ModelDataProcessor.CallData(parsedImage); - OprofileSAXHandler handler = OprofileSAXHandler.getInstance(image); - - // Create XMLReader - SAXParserFactory factory = SAXParserFactory.newInstance(); - reader = factory.newSAXParser().getXMLReader(); - - // Set content/error handlers - reader.setContentHandler(handler); - reader.setErrorHandler(handler); - - String filePath = FileLocator.toFileURL(FileLocator.find(TestPlugin.getDefault().getBundle(), new Path(REL_PATH_TO_TEST_XML), null)).getFile(); - reader.parse(new InputSource(new FileReader(filePath))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (SAXException e) { - e.printStackTrace(); - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } - - return parsedImage; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent4.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent4.java deleted file mode 100644 index d6a5100fa..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelEvent4.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; - -/* - * A faked OpModelSession object where there is no image. - * Note: technically this shouldn't really happen in normal operation - * of the plugin unless there is a major b0rk-up with the xml parsers.. - */ -public class TestingOpModelEvent4 extends OpModelEvent { - public TestingOpModelEvent4(OpModelSession session, String name) { - super(session, name); - } - @Override - protected OpModelImage getNewImage() { - return null; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelRoot.java b/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelRoot.java deleted file mode 100644 index c0ac2ef0e..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.tests/src/org/eclipse/linuxtools/oprofile/tests/TestingOpModelRoot.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.tests; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelRoot; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; - -public class TestingOpModelRoot extends OpModelRoot { - public static final String ROOT_OUTPUT = "Session: testSession1\n\tEvent: testEvent1e1\n\t\tImage: /test/path/for/image, Count: 205000, Dependent Count: 5000\n\t\t\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\t\t\tSample: Line #: 42, Count: 130000\n\t\t\t\tSample: Line #: 36, Count: 40000\n\t\t\t\tSample: Line #: 31, Count: 9999\n\t\t\t\tSample: Line #: 39, Count: 1\n\t\t\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\t\t\tSample: Line #: 94, Count: 19998\n\t\t\t\tSample: Line #: 12, Count: 1\n\t\t\t\tSample: Line #: 55, Count: 1\n\t\t\tDependent Image: /no-vmlinux, Count: 4400\n\t\t\tDependent Image: /lib64/ld-2.9.so, Count: 300\n\t\t\t\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\t\t\t\tSample: Line #: 0, Count: 299\n\t\t\t\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\t\t\t\tSample: Line #: 0, Count: 1\n\t\t\tDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\n\t\t\tDependent Image: /lib64/libc-2.9.so, Count: 140\n\t\t\t\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\t\t\t\tSample: Line #: 0, Count: 100\n\t\t\t\tSymbols: bcopy, File: , Count: 40\n\t\t\t\t\tSample: Line #: 0, Count: 40\nSession: testSession2\n\tEvent: testEvent1e2\n\t\tImage: /test/path/for/image, Count: 205000, Dependent Count: 5000\n\t\t\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\t\t\tSample: Line #: 42, Count: 130000\n\t\t\t\tSample: Line #: 36, Count: 40000\n\t\t\t\tSample: Line #: 31, Count: 9999\n\t\t\t\tSample: Line #: 39, Count: 1\n\t\t\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\t\t\tSample: Line #: 94, Count: 19998\n\t\t\t\tSample: Line #: 12, Count: 1\n\t\t\t\tSample: Line #: 55, Count: 1\n\t\t\tDependent Image: /no-vmlinux, Count: 4400\n\t\t\tDependent Image: /lib64/ld-2.9.so, Count: 300\n\t\t\t\tSymbols: do_lookup_x, File: dl-lookup.c, Count: 299\n\t\t\t\t\tSample: Line #: 0, Count: 299\n\t\t\t\tSymbols: _dl_unload_cache, File: rawmemchr.c, Count: 1\n\t\t\t\t\tSample: Line #: 0, Count: 1\n\t\t\tDependent Image: /usr/lib64/libstdc++.so.6.0.10, Count: 160\n\t\t\tDependent Image: /lib64/libc-2.9.so, Count: 140\n\t\t\t\tSymbols: _IO_new_file_seekoff, File: , Count: 100\n\t\t\t\t\tSample: Line #: 0, Count: 100\n\t\t\t\tSymbols: bcopy, File: , Count: 40\n\t\t\t\t\tSample: Line #: 0, Count: 40\n\tEvent: testEvent2e2\n\t\tImage: /test/path/for/image, Count: 200000\n\t\t\tSymbols: TestFunction1(int), File: /test/path/for/src/image.cpp, Count: 180000\n\t\t\t\tSample: Line #: 42, Count: 130000\n\t\t\t\tSample: Line #: 36, Count: 40000\n\t\t\t\tSample: Line #: 31, Count: 9999\n\t\t\t\tSample: Line #: 39, Count: 1\n\t\t\tSymbols: TestFunction2(int, int), File: /test/path/for/src/image2.cpp, Count: 20000\n\t\t\t\tSample: Line #: 94, Count: 19998\n\t\t\t\tSample: Line #: 12, Count: 1\n\t\t\t\tSample: Line #: 55, Count: 1\n\tEvent: testEvent3e2\n\t\tImage: , Count: -1\n\tEvent: testEvent4e2\n"; //$NON-NLS-1$ - public static final String NAME_E1 = "testSession1"; //$NON-NLS-1$ - public static final String NAME_E2 = "testSession2"; //$NON-NLS-1$ - public static final String NAME_E1_S1 = "testEvent1e1"; //$NON-NLS-1$ - public static final String NAME_E2_S1 = "testEvent1e2"; //$NON-NLS-1$ - public static final String NAME_E2_S2 = "testEvent2e2"; //$NON-NLS-1$ - public static final String NAME_E2_S3 = "testEvent3e2"; //$NON-NLS-1$ - public static final String NAME_E2_S4 = "testEvent4e2"; //$NON-NLS-1$ - @Override - protected OpModelSession[] getNewSessions() { - //fake running opxml and simply return hand-made events - OpModelSession[] e = {new OpModelSession(NAME_E1), new OpModelSession(NAME_E2), null}; - e[0].setEvents(new TestingOpModelEvent[] {new TestingOpModelEvent(e[0], NAME_E1_S1)}); - e[1].setEvents(new OpModelEvent[] { - new TestingOpModelEvent(e[1], NAME_E2_S1), - new TestingOpModelEvent2(e[1], NAME_E2_S2), - new TestingOpModelEvent3(e[1], NAME_E2_S3), - new TestingOpModelEvent4(e[1], NAME_E2_S4)}); - return e; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.project b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.project deleted file mode 100644 index cebd05a8e..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.project +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.ui.tests</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <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> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index dd1cfb45b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,99 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.ui.prefs b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index a432cbf58..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,54 +0,0 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=false -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 4cbdd1716..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.ui.tests -Bundle-Version: 1.0.1.qualifier -Bundle-Vendor: %bundleProvider -Require-Bundle: org.junit;bundle-version="4.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Fragment-Host: org.eclipse.linuxtools.oprofile.ui -Bundle-ActivationPolicy: lazy -Import-Package: org.eclipse.linuxtools.oprofile.tests -Bundle-Localization: plugin -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.ui.tests diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/about.html b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/build.properties deleted file mode 100644 index d219242d5..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/build.properties +++ /dev/null @@ -1,6 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.properties -individualSourceBundles=true -src.includes = about.html diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/plugin.properties deleted file mode 100644 index a7eef039b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/plugin.properties +++ /dev/null @@ -1,14 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2009, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Kent Sebastian <ksebasti@redhat.com> - initial API and implementation -#******************************************************************************* -bundleName=OProfile Ui Tests Plug-in -bundleProvider=Eclipse Linux Tools diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/pom.xml deleted file mode 100644 index 2d63d742f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.ui.tests</artifactId> - <version>1.0.1-SNAPSHOT</version> - <packaging>eclipse-test-plugin</packaging> - - <name>Linux Tools OProfile UI Tests Plug-in</name> - - <build> - <plugins> - <plugin> - <groupId>org.eclipse.tycho</groupId> - <artifactId>tycho-source-plugin</artifactId> - </plugin> - </plugins> - </build> - -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/src/org/eclipse/linuxtools/oprofile/ui/tests/TestUiDataModel.java b/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/src/org/eclipse/linuxtools/oprofile/ui/tests/TestUiDataModel.java deleted file mode 100644 index 23c5d42cf..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui.tests/src/org/eclipse/linuxtools/oprofile/ui/tests/TestUiDataModel.java +++ /dev/null @@ -1,681 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.oprofile.tests.TestPlugin; -import org.eclipse.linuxtools.oprofile.tests.TestingOpModelRoot; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelRoot; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSample; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSession; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSymbol; -import org.junit.Before; -import org.junit.Test; - -public class TestUiDataModel { - - private static class TestingUiModelRoot extends UiModelRoot { - @Override - protected OpModelSession[] getModelDataEvents() { - TestingOpModelRoot modelRoot = new TestingOpModelRoot(); - modelRoot.refreshModel(); - return modelRoot.getSessions(); - } - } - - private static class TestingUiModelRoot2 extends UiModelRoot { - @Override - protected OpModelSession[] getModelDataEvents() { - return null; - } - } - - private TestingUiModelRoot _uiModelRoot; - private TestingUiModelRoot2 _uiModelRoot2; - - - @Before - public void setUp() { - _uiModelRoot = new TestingUiModelRoot(); - _uiModelRoot.refreshModel(); - - _uiModelRoot2 = new TestingUiModelRoot2(); - _uiModelRoot2.refreshModel(); - } - - @Test - public void testParse() { - /* test UiModelRoot */ - assertNull(_uiModelRoot2.getLabelImage()); - assertNull(_uiModelRoot2.getParent()); - assertNull(_uiModelRoot2.getLabelText()); - assertTrue(_uiModelRoot2.hasChildren()); - IUiModelElement r2_events[] = _uiModelRoot2.getChildren(); - assertNotNull(r2_events); - assertEquals(1, r2_events.length); - IUiModelElement r2_event1 = r2_events[0]; - assertFalse(r2_event1.hasChildren()); - assertNull(r2_event1.getChildren()); - assertNull(r2_event1.getParent()); - assertNotNull(r2_event1.getLabelImage()); - assertNotNull(r2_event1.getLabelText()); - - assertNull(_uiModelRoot.getLabelImage()); - assertNull(_uiModelRoot.getParent()); - assertNull(_uiModelRoot.getLabelText()); - assertTrue(_uiModelRoot.hasChildren()); - - /* test UiModelSession*/ - IUiModelElement sessions[] = _uiModelRoot.getChildren(); - assertNotNull(sessions); - assertEquals(3, sessions.length); - assertNotNull(sessions[0]); - assertNotNull(sessions[1]); - assertNotNull(sessions[2]); - - assertEquals(TestingOpModelRoot.NAME_E1, sessions[0].toString()); - assertEquals(TestingOpModelRoot.NAME_E1, sessions[0].getLabelText()); - assertTrue(sessions[0].hasChildren()); - assertNull(sessions[0].getParent()); //events are top level tree elements - assertNotNull(sessions[0].getLabelImage()); - - assertEquals(TestingOpModelRoot.NAME_E2, sessions[1].toString()); - assertEquals(TestingOpModelRoot.NAME_E2, sessions[1].getLabelText()); - assertTrue(sessions[1].hasChildren()); - assertNull(sessions[1].getParent()); //events are top level tree elements - assertNotNull(sessions[1].getLabelImage()); - - - /* test UiModelEvent */ - IUiModelElement[] e1_events = sessions[0].getChildren(), e2_events = sessions[1].getChildren(); - assertNotNull(e1_events); - assertNotNull(e2_events); - assertEquals(1, e1_events.length); - assertEquals(4, e2_events.length); - assertNotNull(e1_events[0]); - assertNotNull(e2_events[0]); - assertNotNull(e2_events[1]); - assertNotNull(e2_events[2]); - assertNotNull(e2_events[3]); - - assertEquals(TestingOpModelRoot.NAME_E1_S1, e1_events[0].toString()); - assertEquals(TestingOpModelRoot.NAME_E1_S1, e1_events[0].getLabelText()); - assertFalse(((UiModelSession)e1_events[0].getParent()).isDefaultSession()); - assertTrue(e1_events[0].hasChildren()); - assertEquals(sessions[0], e1_events[0].getParent()); - assertNotNull(e1_events[0].getLabelImage()); - - assertEquals(TestingOpModelRoot.NAME_E2_S1, e2_events[0].toString()); - assertEquals(TestingOpModelRoot.NAME_E2_S1, e2_events[0].getLabelText()); - assertFalse(((UiModelSession)e2_events[0].getParent()).isDefaultSession()); - assertTrue(e2_events[0].hasChildren()); - assertEquals(sessions[1], e2_events[0].getParent()); - assertNotNull(e2_events[0].getLabelImage()); - - assertEquals(TestingOpModelRoot.NAME_E2_S2, e2_events[1].toString()); - assertEquals(TestingOpModelRoot.NAME_E2_S2, e2_events[1].getLabelText()); - assertFalse(((UiModelSession)e2_events[1].getParent()).isDefaultSession()); - assertTrue(e2_events[1].hasChildren()); - assertEquals(sessions[1], e2_events[1].getParent()); - assertNotNull(e2_events[1].getLabelImage()); - - assertEquals(TestingOpModelRoot.NAME_E2_S3, e2_events[2].toString()); - assertEquals(TestingOpModelRoot.NAME_E2_S3, e2_events[2].getLabelText()); - assertFalse(((UiModelSession)e2_events[2].getParent()).isDefaultSession()); - assertTrue(e2_events[2].hasChildren()); - assertEquals(sessions[1], e2_events[2].getParent()); - assertNotNull(e2_events[2].getLabelImage()); - - assertEquals(TestingOpModelRoot.NAME_E2_S4, e2_events[3].toString()); - assertEquals(TestingOpModelRoot.NAME_E2_S4, e2_events[3].getLabelText()); - assertFalse(((UiModelSession)e2_events[3].getParent()).isDefaultSession()); - assertFalse(e2_events[3].hasChildren()); - assertEquals(sessions[1], e2_events[3].getParent()); - assertNotNull(e2_events[3].getLabelImage()); - - /* test UiModelImage and UiModelDependent */ - IUiModelElement[] e1_s1_images = e1_events[0].getChildren(), - e2_s1_images = e2_events[0].getChildren(), - e2_s2_images = e2_events[1].getChildren(), - e2_s3_images = e2_events[2].getChildren(), - e2_s4_images = e2_events[3].getChildren(); - - assertNotNull(e1_s1_images); - assertNotNull(e2_s1_images); - assertNotNull(e2_s2_images); - assertNotNull(e2_s3_images); - assertNotNull(e2_s4_images); - assertEquals(2, e1_s1_images.length); //#2 is a dep image - assertEquals(2, e2_s1_images.length); //#2 is a dep image - assertEquals(1, e2_s2_images.length); - assertEquals(1, e2_s3_images.length); - assertEquals(1, e2_s4_images.length); - assertNotNull(e1_s1_images[0]); - assertNotNull(e1_s1_images[1]); - assertNotNull(e2_s1_images[0]); - assertNotNull(e2_s1_images[1]); - assertNotNull(e2_s2_images[0]); - assertNotNull(e2_s3_images[0]); - assertNull(e2_s4_images[0]); - - //dont test string output -- strings are i18n'd and L10n'd - assertNotNull(e1_s1_images[0].toString()); - assertNotNull(e1_s1_images[0].getLabelText()); - assertTrue(e1_s1_images[0].hasChildren()); - assertEquals(e1_events[0], e1_s1_images[0].getParent()); - assertNotNull(e1_s1_images[0].getLabelImage()); - - assertNotNull(e1_s1_images[1].toString()); - assertNotNull(e1_s1_images[1].getLabelText()); - assertTrue(e1_s1_images[1].hasChildren()); - assertEquals(e1_events[0], e1_s1_images[1].getParent()); - assertNotNull(e1_s1_images[1].getLabelImage()); - - assertNotNull(e2_s1_images[0].toString()); - assertNotNull(e2_s1_images[0].getLabelText()); - assertTrue(e2_s1_images[0].hasChildren()); - assertEquals(e2_events[0], e2_s1_images[0].getParent()); - assertNotNull(e2_s1_images[0].getLabelImage()); - - assertNotNull(e2_s1_images[1].toString()); - assertNotNull(e2_s1_images[1].getLabelText()); - assertTrue(e2_s1_images[1].hasChildren()); - assertEquals(e2_events[0], e2_s1_images[1].getParent()); - assertNotNull(e2_s1_images[1].getLabelImage()); - - assertNotNull(e2_s2_images[0].toString()); - assertNotNull(e2_s2_images[0].getLabelText()); - assertTrue(e2_s2_images[0].hasChildren()); - assertEquals(e2_events[1], e2_s2_images[0].getParent()); - assertNotNull(e2_s2_images[0].getLabelImage()); - - assertNotNull(e2_s3_images[0].toString()); - assertNotNull(e2_s3_images[0].getLabelText()); - assertFalse(e2_s3_images[0].hasChildren()); - assertEquals(e2_events[2], e2_s3_images[0].getParent()); - assertNotNull(e2_s3_images[0].getLabelImage()); - - /* test UiModelSymbol */ - IUiModelElement[] e1_s1_i1_symbols = e1_s1_images[0].getChildren(), - e1_s1_i2_depimages = e1_s1_images[1].getChildren(), - e2_s1_i1_symbols = e2_s1_images[0].getChildren(), - e2_s1_i2_depimages = e2_s1_images[1].getChildren(), - e2_s2_i1_symbols = e2_s2_images[0].getChildren(); - - assertNotNull(e1_s1_i1_symbols); - assertNotNull(e1_s1_i2_depimages); - assertNotNull(e2_s1_i1_symbols); - assertNotNull(e2_s1_i2_depimages); - assertNotNull(e2_s2_i1_symbols); - assertEquals(2, e1_s1_i1_symbols.length); - assertEquals(4, e1_s1_i2_depimages.length); - assertEquals(2, e2_s1_i1_symbols.length); - assertEquals(4, e2_s1_i2_depimages.length); - assertEquals(2, e2_s2_i1_symbols.length); - assertNotNull(e1_s1_i1_symbols[0]); - assertNotNull(e1_s1_i1_symbols[1]); - assertNotNull(e1_s1_i2_depimages[0]); - assertNotNull(e1_s1_i2_depimages[1]); - assertNotNull(e1_s1_i2_depimages[2]); - assertNotNull(e1_s1_i2_depimages[3]); - assertNotNull(e2_s1_i1_symbols[0]); - assertNotNull(e2_s1_i1_symbols[1]); - assertNotNull(e2_s1_i2_depimages[0]); - assertNotNull(e2_s1_i2_depimages[1]); - assertNotNull(e2_s1_i2_depimages[2]); - assertNotNull(e2_s1_i2_depimages[3]); - assertNotNull(e2_s2_i1_symbols[0]); - assertNotNull(e2_s2_i1_symbols[1]); - - assertNotNull(e1_s1_i1_symbols[0].toString()); - assertNotNull(e1_s1_i1_symbols[0].getLabelText()); - assertEquals(TestPlugin.SYMBOL1_FILENAME, ((UiModelSymbol)e1_s1_i1_symbols[0]).getFileName()); - assertTrue(e1_s1_i1_symbols[0].hasChildren()); - assertEquals(e1_s1_images[0], e1_s1_i1_symbols[0].getParent()); - assertNotNull(e1_s1_i1_symbols[0].getLabelImage()); - - assertNotNull(e1_s1_i1_symbols[1].toString()); - assertNotNull(e1_s1_i1_symbols[1].getLabelText()); - assertEquals(TestPlugin.SYMBOL2_FILENAME, ((UiModelSymbol)e1_s1_i1_symbols[1]).getFileName()); - assertTrue(e1_s1_i1_symbols[1].hasChildren()); - assertEquals(e1_s1_images[0], e1_s1_i1_symbols[1].getParent()); - assertNotNull(e1_s1_i1_symbols[1].getLabelImage()); - - assertNotNull(e1_s1_i2_depimages[0].toString()); - assertNotNull(e1_s1_i2_depimages[0].getLabelText()); - assertFalse(e1_s1_i2_depimages[0].hasChildren()); - assertEquals(e1_s1_images[1], e1_s1_i2_depimages[0].getParent()); - assertNotNull(e1_s1_i2_depimages[0].getLabelImage()); - - assertNotNull(e1_s1_i2_depimages[1].toString()); - assertNotNull(e1_s1_i2_depimages[1].getLabelText()); - assertTrue(e1_s1_i2_depimages[1].hasChildren()); - assertEquals(e1_s1_images[1], e1_s1_i2_depimages[1].getParent()); - assertNotNull(e1_s1_i2_depimages[1].getLabelImage()); - - assertNotNull(e1_s1_i2_depimages[2].toString()); - assertNotNull(e1_s1_i2_depimages[2].getLabelText()); - assertFalse(e1_s1_i2_depimages[2].hasChildren()); - assertEquals(e1_s1_images[1], e1_s1_i2_depimages[2].getParent()); - assertNotNull(e1_s1_i2_depimages[2].getLabelImage()); - - assertNotNull(e1_s1_i2_depimages[3].toString()); - assertNotNull(e1_s1_i2_depimages[3].getLabelText()); - assertTrue(e1_s1_i2_depimages[3].hasChildren()); - assertEquals(e1_s1_images[1], e1_s1_i2_depimages[3].getParent()); - assertNotNull(e1_s1_i2_depimages[3].getLabelImage()); - - assertNotNull(e2_s1_i1_symbols[0].toString()); - assertNotNull(e2_s1_i1_symbols[0].getLabelText()); - assertEquals(TestPlugin.SYMBOL1_FILENAME, ((UiModelSymbol)e2_s1_i1_symbols[0]).getFileName()); - assertTrue(e2_s1_i1_symbols[0].hasChildren()); - assertEquals(e2_s1_images[0], e2_s1_i1_symbols[0].getParent()); - assertNotNull(e2_s1_i1_symbols[0].getLabelImage()); - - assertNotNull(e2_s1_i1_symbols[1].toString()); - assertNotNull(e2_s1_i1_symbols[1].getLabelText()); - assertEquals(TestPlugin.SYMBOL2_FILENAME, ((UiModelSymbol)e2_s1_i1_symbols[1]).getFileName()); - assertTrue(e2_s1_i1_symbols[1].hasChildren()); - assertEquals(e2_s1_images[0], e2_s1_i1_symbols[1].getParent()); - assertNotNull(e2_s1_i1_symbols[1].getLabelImage()); - - assertNotNull(e2_s1_i2_depimages[0].toString()); - assertNotNull(e2_s1_i2_depimages[0].getLabelText()); - assertFalse(e2_s1_i2_depimages[0].hasChildren()); - assertEquals(e2_s1_images[1], e2_s1_i2_depimages[0].getParent()); - assertNotNull(e2_s1_i2_depimages[0].getLabelImage()); - - assertNotNull(e2_s1_i2_depimages[1].toString()); - assertNotNull(e2_s1_i2_depimages[1].getLabelText()); - assertTrue(e2_s1_i2_depimages[1].hasChildren()); - assertEquals(e2_s1_images[1], e2_s1_i2_depimages[1].getParent()); - assertNotNull(e2_s1_i2_depimages[1].getLabelImage()); - - assertNotNull(e2_s1_i2_depimages[2].toString()); - assertNotNull(e2_s1_i2_depimages[2].getLabelText()); - assertFalse(e2_s1_i2_depimages[2].hasChildren()); - assertEquals(e2_s1_images[1], e2_s1_i2_depimages[2].getParent()); - assertNotNull(e2_s1_i2_depimages[2].getLabelImage()); - - assertNotNull(e2_s1_i2_depimages[3].toString()); - assertNotNull(e2_s1_i2_depimages[3].getLabelText()); - assertTrue(e2_s1_i2_depimages[3].hasChildren()); - assertEquals(e2_s1_images[1], e2_s1_i2_depimages[3].getParent()); - assertNotNull(e2_s1_i2_depimages[3].getLabelImage()); - - assertNotNull(e2_s2_i1_symbols[0].toString()); - assertNotNull(e2_s2_i1_symbols[0].getLabelText()); - assertEquals(TestPlugin.SYMBOL1_FILENAME, ((UiModelSymbol)e2_s2_i1_symbols[0]).getFileName()); - assertTrue(e2_s2_i1_symbols[0].hasChildren()); - assertEquals(e2_s2_images[0], e2_s2_i1_symbols[0].getParent()); - assertNotNull(e2_s2_i1_symbols[0].getLabelImage()); - - assertNotNull(e2_s2_i1_symbols[1].toString()); - assertNotNull(e2_s2_i1_symbols[1].getLabelText()); - assertEquals(TestPlugin.SYMBOL2_FILENAME, ((UiModelSymbol)e2_s2_i1_symbols[1]).getFileName()); - assertTrue(e2_s2_i1_symbols[1].hasChildren()); - assertEquals(e2_s2_images[0], e2_s2_i1_symbols[1].getParent()); - assertNotNull(e2_s2_i1_symbols[1].getLabelImage()); - - /* test the symbols from the dep images */ - IUiModelElement[] e1_s1_i2_dep1_symbols = e1_s1_i2_depimages[0].getChildren(), - e1_s1_i2_dep2_symbols = e1_s1_i2_depimages[1].getChildren(), - e1_s1_i2_dep3_symbols = e1_s1_i2_depimages[2].getChildren(), - e1_s1_i2_dep4_symbols = e1_s1_i2_depimages[3].getChildren(), - e2_s1_i2_dep1_symbols = e2_s1_i2_depimages[0].getChildren(), - e2_s1_i2_dep2_symbols = e2_s1_i2_depimages[1].getChildren(), - e2_s1_i2_dep3_symbols = e2_s1_i2_depimages[2].getChildren(), - e2_s1_i2_dep4_symbols = e2_s1_i2_depimages[3].getChildren(); - - assertNull(e1_s1_i2_dep1_symbols); - assertNotNull(e1_s1_i2_dep2_symbols); - assertNull(e1_s1_i2_dep3_symbols); - assertNotNull(e1_s1_i2_dep4_symbols); - assertNull(e2_s1_i2_dep1_symbols); - assertNotNull(e2_s1_i2_dep2_symbols); - assertNull(e2_s1_i2_dep3_symbols); - assertNotNull(e2_s1_i2_dep4_symbols); - assertEquals(2, e1_s1_i2_dep2_symbols.length); - assertEquals(2, e1_s1_i2_dep4_symbols.length); - assertEquals(2, e2_s1_i2_dep2_symbols.length); - assertEquals(2, e2_s1_i2_dep4_symbols.length); - assertNotNull(e1_s1_i2_dep2_symbols[0]); - assertNotNull(e1_s1_i2_dep2_symbols[1]); - assertNotNull(e1_s1_i2_dep4_symbols[0]); - assertNotNull(e1_s1_i2_dep4_symbols[1]); - assertNotNull(e2_s1_i2_dep2_symbols[0]); - assertNotNull(e2_s1_i2_dep2_symbols[1]); - assertNotNull(e2_s1_i2_dep4_symbols[0]); - assertNotNull(e2_s1_i2_dep4_symbols[1]); - - assertNotNull(e1_s1_i2_dep2_symbols[0].toString()); - assertNotNull(e1_s1_i2_dep2_symbols[0].getLabelText()); - assertEquals(TestPlugin.DEP2_SYMBOL1_FILENAME, ((UiModelSymbol)e1_s1_i2_dep2_symbols[0]).getFileName()); - assertFalse(e1_s1_i2_dep2_symbols[0].hasChildren()); - assertEquals(e1_s1_i2_depimages[1], e1_s1_i2_dep2_symbols[0].getParent()); - assertNotNull(e1_s1_i2_dep2_symbols[0].getLabelImage()); - - assertNotNull(e1_s1_i2_dep2_symbols[1].toString()); - assertNotNull(e1_s1_i2_dep2_symbols[1].getLabelText()); - assertEquals(TestPlugin.DEP2_SYMBOL2_FILENAME, ((UiModelSymbol)e1_s1_i2_dep2_symbols[1]).getFileName()); - assertFalse(e1_s1_i2_dep2_symbols[1].hasChildren()); - assertEquals(e1_s1_i2_depimages[1], e1_s1_i2_dep2_symbols[1].getParent()); - assertNotNull(e1_s1_i2_dep2_symbols[1].getLabelImage()); - - assertNotNull(e1_s1_i2_dep4_symbols[0].toString()); - assertNotNull(e1_s1_i2_dep4_symbols[0].getLabelText()); - assertEquals(TestPlugin.DEP4_SYMBOL_FILENAME, ((UiModelSymbol)e1_s1_i2_dep4_symbols[0]).getFileName()); - assertFalse(e1_s1_i2_dep4_symbols[0].hasChildren()); - assertEquals(e1_s1_i2_depimages[3], e1_s1_i2_dep4_symbols[0].getParent()); - assertNotNull(e1_s1_i2_dep4_symbols[0].getLabelImage()); - - assertNotNull(e1_s1_i2_dep4_symbols[1].toString()); - assertNotNull(e1_s1_i2_dep4_symbols[1].getLabelText()); - assertEquals(TestPlugin.DEP4_SYMBOL_FILENAME, ((UiModelSymbol)e1_s1_i2_dep4_symbols[1]).getFileName()); - assertFalse(e1_s1_i2_dep4_symbols[1].hasChildren()); - assertEquals(e1_s1_i2_depimages[3], e1_s1_i2_dep4_symbols[1].getParent()); - assertNotNull(e1_s1_i2_dep4_symbols[1].getLabelImage()); - - assertNotNull(e2_s1_i2_dep2_symbols[0].toString()); - assertNotNull(e2_s1_i2_dep2_symbols[0].getLabelText()); - assertEquals(TestPlugin.DEP2_SYMBOL1_FILENAME, ((UiModelSymbol)e2_s1_i2_dep2_symbols[0]).getFileName()); - assertFalse(e2_s1_i2_dep2_symbols[0].hasChildren()); - assertEquals(e2_s1_i2_depimages[1], e2_s1_i2_dep2_symbols[0].getParent()); - assertNotNull(e2_s1_i2_dep2_symbols[0].getLabelImage()); - - assertNotNull(e2_s1_i2_dep2_symbols[1].toString()); - assertNotNull(e2_s1_i2_dep2_symbols[1].getLabelText()); - assertEquals(TestPlugin.DEP2_SYMBOL2_FILENAME, ((UiModelSymbol)e2_s1_i2_dep2_symbols[1]).getFileName()); - assertFalse(e2_s1_i2_dep2_symbols[1].hasChildren()); - assertEquals(e2_s1_i2_depimages[1], e2_s1_i2_dep2_symbols[1].getParent()); - assertNotNull(e2_s1_i2_dep2_symbols[1].getLabelImage()); - - assertNotNull(e2_s1_i2_dep4_symbols[0].toString()); - assertNotNull(e2_s1_i2_dep4_symbols[0].getLabelText()); - assertEquals(TestPlugin.DEP4_SYMBOL_FILENAME, ((UiModelSymbol)e2_s1_i2_dep4_symbols[0]).getFileName()); - assertFalse(e2_s1_i2_dep4_symbols[0].hasChildren()); - assertEquals(e2_s1_i2_depimages[3], e2_s1_i2_dep4_symbols[0].getParent()); - assertNotNull(e2_s1_i2_dep4_symbols[0].getLabelImage()); - - assertNotNull(e2_s1_i2_dep4_symbols[1].toString()); - assertNotNull(e2_s1_i2_dep4_symbols[1].getLabelText()); - assertEquals(TestPlugin.DEP4_SYMBOL_FILENAME, ((UiModelSymbol)e2_s1_i2_dep4_symbols[1]).getFileName()); - assertFalse(e2_s1_i2_dep4_symbols[1].hasChildren()); - assertEquals(e2_s1_i2_depimages[3], e2_s1_i2_dep4_symbols[1].getParent()); - assertNotNull(e2_s1_i2_dep4_symbols[1].getLabelImage()); - - /* test UiModelSample */ - IUiModelElement[] e1_s1_i1_s1_samples = e1_s1_i1_symbols[0].getChildren(), - e1_s1_i1_s2_samples = e1_s1_i1_symbols[1].getChildren(), - e1_s1_d2_s1_samples = e1_s1_i2_dep2_symbols[0].getChildren(), - e1_s1_d2_s2_samples = e1_s1_i2_dep2_symbols[1].getChildren(), - e1_s1_d4_s1_samples = e1_s1_i2_dep4_symbols[0].getChildren(), - e1_s1_d4_s2_samples = e1_s1_i2_dep4_symbols[1].getChildren(), - e2_s1_i1_s1_samples = e2_s1_i1_symbols[0].getChildren(), - e2_s1_i1_s2_samples = e2_s1_i1_symbols[1].getChildren(), - e2_s1_d2_s1_samples = e2_s1_i2_dep2_symbols[0].getChildren(), - e2_s1_d2_s2_samples = e2_s1_i2_dep2_symbols[1].getChildren(), - e2_s1_d4_s1_samples = e2_s1_i2_dep4_symbols[0].getChildren(), - e2_s1_d4_s2_samples = e2_s1_i2_dep4_symbols[1].getChildren(), - e2_s2_i1_s1_samples = e2_s2_i1_symbols[0].getChildren(), - e2_s2_i1_s2_samples = e2_s2_i1_symbols[1].getChildren(); - - assertNotNull(e1_s1_i1_s1_samples); - assertNotNull(e1_s1_i1_s2_samples); - assertNotNull(e1_s1_d2_s1_samples); - assertNotNull(e1_s1_d2_s2_samples); - assertNotNull(e1_s1_d4_s1_samples); - assertNotNull(e1_s1_d4_s2_samples); - assertNotNull(e2_s1_i1_s1_samples); - assertNotNull(e2_s1_i1_s2_samples); - assertNotNull(e2_s1_d2_s1_samples); - assertNotNull(e2_s1_d2_s2_samples); - assertNotNull(e2_s1_d4_s1_samples); - assertNotNull(e2_s1_d4_s2_samples); - assertNotNull(e2_s2_i1_s1_samples); - assertNotNull(e2_s2_i1_s2_samples); - assertEquals(4, e1_s1_i1_s1_samples.length); - assertEquals(3, e1_s1_i1_s2_samples.length); - //0 but not null for dep images due to samples with no line # - assertEquals(0, e1_s1_d2_s1_samples.length); - assertEquals(0, e1_s1_d2_s2_samples.length); - assertEquals(0, e1_s1_d4_s1_samples.length); - assertEquals(0, e1_s1_d4_s2_samples.length); - assertEquals(4, e2_s1_i1_s1_samples.length); - assertEquals(3, e2_s1_i1_s2_samples.length); - assertEquals(0, e2_s1_d2_s1_samples.length); - assertEquals(0, e2_s1_d2_s2_samples.length); - assertEquals(0, e2_s1_d4_s1_samples.length); - assertEquals(0, e2_s1_d4_s2_samples.length); - assertEquals(4, e2_s2_i1_s1_samples.length); - assertEquals(3, e2_s2_i1_s2_samples.length); - assertNotNull(e1_s1_i1_s1_samples[0]); - assertNotNull(e1_s1_i1_s1_samples[1]); - assertNotNull(e1_s1_i1_s1_samples[2]); - assertNotNull(e1_s1_i1_s1_samples[3]); - assertNotNull(e1_s1_i1_s2_samples[0]); - assertNotNull(e1_s1_i1_s2_samples[1]); - assertNotNull(e1_s1_i1_s2_samples[2]); - - assertNotNull(e2_s1_i1_s1_samples[0]); - assertNotNull(e2_s1_i1_s1_samples[1]); - assertNotNull(e2_s1_i1_s1_samples[2]); - assertNotNull(e2_s1_i1_s1_samples[3]); - assertNotNull(e2_s1_i1_s2_samples[0]); - assertNotNull(e2_s1_i1_s2_samples[1]); - assertNotNull(e2_s1_i1_s2_samples[2]); - assertNotNull(e2_s2_i1_s1_samples[0]); - assertNotNull(e2_s2_i1_s1_samples[1]); - assertNotNull(e2_s2_i1_s1_samples[2]); - assertNotNull(e2_s2_i1_s1_samples[3]); - assertNotNull(e2_s2_i1_s2_samples[0]); - assertNotNull(e2_s2_i1_s2_samples[1]); - assertNotNull(e2_s2_i1_s2_samples[2]); - - assertNotNull(e1_s1_i1_s1_samples[0].toString()); - assertNotNull(e1_s1_i1_s1_samples[0].getLabelText()); - assertEquals(42, ((UiModelSample)e1_s1_i1_s1_samples[0]).getLine()); - assertEquals(0.6190, ((UiModelSample)e1_s1_i1_s1_samples[0]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s1_samples[0].getChildren()); - assertFalse(e1_s1_i1_s1_samples[0].hasChildren()); - assertEquals(e1_s1_i1_symbols[0], e1_s1_i1_s1_samples[0].getParent()); - assertNotNull(e1_s1_i1_s1_samples[0].getLabelImage()); - - assertNotNull(e1_s1_i1_s1_samples[1].toString()); - assertNotNull(e1_s1_i1_s1_samples[1].getLabelText()); - assertEquals(36, ((UiModelSample)e1_s1_i1_s1_samples[1]).getLine()); - assertEquals(0.1904, ((UiModelSample)e1_s1_i1_s1_samples[1]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s1_samples[1].getChildren()); - assertFalse(e1_s1_i1_s1_samples[1].hasChildren()); - assertEquals(e1_s1_i1_symbols[0], e1_s1_i1_s1_samples[1].getParent()); - assertNotNull(e1_s1_i1_s1_samples[1].getLabelImage()); - - assertNotNull(e1_s1_i1_s1_samples[2].toString()); - assertNotNull(e1_s1_i1_s1_samples[2].getLabelText()); - assertEquals(31, ((UiModelSample)e1_s1_i1_s1_samples[2]).getLine()); - assertEquals(0.0476, ((UiModelSample)e1_s1_i1_s1_samples[2]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s1_samples[2].getChildren()); - assertFalse(e1_s1_i1_s1_samples[2].hasChildren()); - assertEquals(e1_s1_i1_symbols[0], e1_s1_i1_s1_samples[2].getParent()); - assertNotNull(e1_s1_i1_s1_samples[2].getLabelImage()); - - assertNotNull(e1_s1_i1_s1_samples[3].toString()); - assertNotNull(e1_s1_i1_s1_samples[3].getLabelText()); - assertEquals(39, ((UiModelSample)e1_s1_i1_s1_samples[3]).getLine()); - assertEquals(0.0, ((UiModelSample)e1_s1_i1_s1_samples[3]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s1_samples[3].getChildren()); - assertFalse(e1_s1_i1_s1_samples[3].hasChildren()); - assertEquals(e1_s1_i1_symbols[0], e1_s1_i1_s1_samples[3].getParent()); - assertNotNull(e1_s1_i1_s1_samples[3].getLabelImage()); - - assertNotNull(e1_s1_i1_s2_samples[0].toString()); - assertNotNull(e1_s1_i1_s2_samples[0].getLabelText()); - assertEquals(94, ((UiModelSample)e1_s1_i1_s2_samples[0]).getLine()); - assertEquals(0.0952, ((UiModelSample)e1_s1_i1_s2_samples[0]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s2_samples[0].getChildren()); - assertFalse(e1_s1_i1_s2_samples[0].hasChildren()); - assertEquals(e1_s1_i1_symbols[1], e1_s1_i1_s2_samples[0].getParent()); - assertNotNull(e1_s1_i1_s2_samples[0].getLabelImage()); - - assertNotNull(e1_s1_i1_s2_samples[1].toString()); - assertNotNull(e1_s1_i1_s2_samples[1].getLabelText()); - assertEquals(12, ((UiModelSample)e1_s1_i1_s2_samples[1]).getLine()); - assertEquals(0.0, ((UiModelSample)e1_s1_i1_s2_samples[1]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s2_samples[1].getChildren()); - assertFalse(e1_s1_i1_s2_samples[1].hasChildren()); - assertEquals(e1_s1_i1_symbols[1], e1_s1_i1_s2_samples[1].getParent()); - assertNotNull(e1_s1_i1_s2_samples[1].getLabelImage()); - - assertNotNull(e1_s1_i1_s2_samples[2].toString()); - assertNotNull(e1_s1_i1_s2_samples[2].getLabelText()); - assertEquals(55, ((UiModelSample)e1_s1_i1_s2_samples[2]).getLine()); - assertEquals(0.0, ((UiModelSample)e1_s1_i1_s2_samples[2]).getCountPercentage(), 0.0001); - assertNull(e1_s1_i1_s2_samples[2].getChildren()); - assertFalse(e1_s1_i1_s2_samples[2].hasChildren()); - assertEquals(e1_s1_i1_symbols[1], e1_s1_i1_s2_samples[2].getParent()); - assertNotNull(e1_s1_i1_s2_samples[2].getLabelImage()); - - assertNotNull(e2_s1_i1_s1_samples[0].toString()); - assertNotNull(e2_s1_i1_s1_samples[0].getLabelText()); - assertEquals(42, ((UiModelSample)e2_s1_i1_s1_samples[0]).getLine()); - assertEquals(0.6190, ((UiModelSample)e2_s1_i1_s1_samples[0]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s1_samples[0].getChildren()); - assertFalse(e2_s1_i1_s1_samples[0].hasChildren()); - assertEquals(e2_s1_i1_symbols[0], e2_s1_i1_s1_samples[0].getParent()); - assertNotNull(e2_s1_i1_s1_samples[0].getLabelImage()); - - assertNotNull(e2_s1_i1_s1_samples[1].toString()); - assertNotNull(e2_s1_i1_s1_samples[1].getLabelText()); - assertEquals(36, ((UiModelSample)e2_s1_i1_s1_samples[1]).getLine()); - assertEquals(0.1904, ((UiModelSample)e2_s1_i1_s1_samples[1]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s1_samples[1].getChildren()); - assertFalse(e2_s1_i1_s1_samples[1].hasChildren()); - assertEquals(e2_s1_i1_symbols[0], e2_s1_i1_s1_samples[1].getParent()); - assertNotNull(e2_s1_i1_s1_samples[1].getLabelImage()); - - assertNotNull(e2_s1_i1_s1_samples[2].toString()); - assertNotNull(e2_s1_i1_s1_samples[2].getLabelText()); - assertEquals(31, ((UiModelSample)e2_s1_i1_s1_samples[2]).getLine()); - assertEquals(0.0476, ((UiModelSample)e2_s1_i1_s1_samples[2]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s1_samples[2].getChildren()); - assertFalse(e2_s1_i1_s1_samples[2].hasChildren()); - assertEquals(e2_s1_i1_symbols[0], e2_s1_i1_s1_samples[2].getParent()); - assertNotNull(e2_s1_i1_s1_samples[2].getLabelImage()); - - assertNotNull(e2_s1_i1_s1_samples[3].toString()); - assertNotNull(e2_s1_i1_s1_samples[3].getLabelText()); - assertEquals(39, ((UiModelSample)e2_s1_i1_s1_samples[3]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s1_i1_s1_samples[3]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s1_samples[3].getChildren()); - assertFalse(e2_s1_i1_s1_samples[3].hasChildren()); - assertEquals(e2_s1_i1_symbols[0], e2_s1_i1_s1_samples[3].getParent()); - assertNotNull(e2_s1_i1_s1_samples[3].getLabelImage()); - - assertNotNull(e2_s1_i1_s2_samples[0].toString()); - assertNotNull(e2_s1_i1_s2_samples[0].getLabelText()); - assertEquals(94, ((UiModelSample)e2_s1_i1_s2_samples[0]).getLine()); - assertEquals(0.0952, ((UiModelSample)e2_s1_i1_s2_samples[0]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s2_samples[0].getChildren()); - assertFalse(e2_s1_i1_s2_samples[0].hasChildren()); - assertEquals(e2_s1_i1_symbols[1], e2_s1_i1_s2_samples[0].getParent()); - assertNotNull(e2_s1_i1_s2_samples[0].getLabelImage()); - - assertNotNull(e2_s1_i1_s2_samples[1].toString()); - assertNotNull(e2_s1_i1_s2_samples[1].getLabelText()); - assertEquals(12, ((UiModelSample)e2_s1_i1_s2_samples[1]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s1_i1_s2_samples[1]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s2_samples[1].getChildren()); - assertFalse(e2_s1_i1_s2_samples[1].hasChildren()); - assertEquals(e2_s1_i1_symbols[1], e2_s1_i1_s2_samples[1].getParent()); - assertNotNull(e2_s1_i1_s2_samples[1].getLabelImage()); - - assertNotNull(e2_s1_i1_s2_samples[2].toString()); - assertNotNull(e2_s1_i1_s2_samples[2].getLabelText()); - assertEquals(55, ((UiModelSample)e2_s1_i1_s2_samples[2]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s1_i1_s2_samples[2]).getCountPercentage(), 0.0001); - assertNull(e2_s1_i1_s2_samples[2].getChildren()); - assertFalse(e2_s1_i1_s2_samples[2].hasChildren()); - assertEquals(e2_s1_i1_symbols[1], e2_s1_i1_s2_samples[2].getParent()); - assertNotNull(e2_s1_i1_s2_samples[2].getLabelImage()); - - assertNotNull(e2_s2_i1_s1_samples[0].toString()); - assertNotNull(e2_s2_i1_s1_samples[0].getLabelText()); - assertEquals(42, ((UiModelSample)e2_s2_i1_s1_samples[0]).getLine()); - assertEquals(0.65, ((UiModelSample)e2_s2_i1_s1_samples[0]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s1_samples[0].getChildren()); - assertFalse(e2_s2_i1_s1_samples[0].hasChildren()); - assertEquals(e2_s2_i1_symbols[0], e2_s2_i1_s1_samples[0].getParent()); - assertNotNull(e2_s2_i1_s1_samples[0].getLabelImage()); - - assertNotNull(e2_s2_i1_s1_samples[1].toString()); - assertNotNull(e2_s2_i1_s1_samples[1].getLabelText()); - assertEquals(36, ((UiModelSample)e2_s2_i1_s1_samples[1]).getLine()); - assertEquals(0.2, ((UiModelSample)e2_s2_i1_s1_samples[1]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s1_samples[1].getChildren()); - assertFalse(e2_s2_i1_s1_samples[1].hasChildren()); - assertEquals(e2_s2_i1_symbols[0], e2_s2_i1_s1_samples[1].getParent()); - assertNotNull(e2_s2_i1_s1_samples[1].getLabelImage()); - - assertNotNull(e2_s2_i1_s1_samples[2].toString()); - assertNotNull(e2_s2_i1_s1_samples[2].getLabelText()); - assertEquals(31, ((UiModelSample)e2_s2_i1_s1_samples[2]).getLine()); - assertEquals(0.05, ((UiModelSample)e2_s2_i1_s1_samples[2]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s1_samples[2].getChildren()); - assertFalse(e2_s2_i1_s1_samples[2].hasChildren()); - assertEquals(e2_s2_i1_symbols[0], e2_s2_i1_s1_samples[2].getParent()); - assertNotNull(e2_s2_i1_s1_samples[2].getLabelImage()); - - assertNotNull(e2_s2_i1_s1_samples[3].toString()); - assertNotNull(e2_s2_i1_s1_samples[3].getLabelText()); - assertEquals(39, ((UiModelSample)e2_s2_i1_s1_samples[3]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s2_i1_s1_samples[3]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s1_samples[3].getChildren()); - assertFalse(e2_s2_i1_s1_samples[3].hasChildren()); - assertEquals(e2_s2_i1_symbols[0], e2_s2_i1_s1_samples[3].getParent()); - assertNotNull(e2_s2_i1_s1_samples[3].getLabelImage()); - - assertNotNull(e2_s2_i1_s2_samples[0].toString()); - assertNotNull(e2_s2_i1_s2_samples[0].getLabelText()); - assertEquals(94, ((UiModelSample)e2_s2_i1_s2_samples[0]).getLine()); - assertEquals(0.1, ((UiModelSample)e2_s2_i1_s2_samples[0]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s2_samples[0].getChildren()); - assertFalse(e2_s2_i1_s2_samples[0].hasChildren()); - assertEquals(e2_s2_i1_symbols[1], e2_s2_i1_s2_samples[0].getParent()); - assertNotNull(e2_s2_i1_s2_samples[0].getLabelImage()); - - assertNotNull(e2_s2_i1_s2_samples[1].toString()); - assertNotNull(e2_s2_i1_s2_samples[1].getLabelText()); - assertEquals(12, ((UiModelSample)e2_s2_i1_s2_samples[1]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s2_i1_s2_samples[1]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s2_samples[1].getChildren()); - assertFalse(e2_s2_i1_s2_samples[1].hasChildren()); - assertEquals(e2_s2_i1_symbols[1], e2_s2_i1_s2_samples[1].getParent()); - assertNotNull(e2_s2_i1_s2_samples[1].getLabelImage()); - - assertNotNull(e2_s2_i1_s2_samples[2].toString()); - assertNotNull(e2_s2_i1_s2_samples[2].getLabelText()); - assertEquals(55, ((UiModelSample)e2_s2_i1_s2_samples[2]).getLine()); - assertEquals(0.0, ((UiModelSample)e2_s2_i1_s2_samples[2]).getCountPercentage(), 0.0001); - assertNull(e2_s2_i1_s2_samples[2].getChildren()); - assertFalse(e2_s2_i1_s2_samples[2].hasChildren()); - assertEquals(e2_s2_i1_symbols[1], e2_s2_i1_s2_samples[2].getParent()); - assertNotNull(e2_s2_i1_s2_samples[2].getLabelImage()); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/.classpath b/oprofile/org.eclipse.linuxtools.oprofile.ui/.classpath deleted file mode 100644 index 43b986286..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/.gitignore b/oprofile/org.eclipse.linuxtools.oprofile.ui/.gitignore deleted file mode 100644 index 8d94ef8de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin -@dot -javaCompiler...args -build.xml -target diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/.project b/oprofile/org.eclipse.linuxtools.oprofile.ui/.project deleted file mode 100644 index bbab7b20c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/.project +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.linuxtools.oprofile.ui</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> - </natures> -</projectDescription> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.core.prefs b/oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7dfe74003..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,117 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.doc.comment.support=enabled -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning -org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag -org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/META-INF/MANIFEST.MF b/oprofile/org.eclipse.linuxtools.oprofile.ui/META-INF/MANIFEST.MF deleted file mode 100644 index 3af48a0ae..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/META-INF/MANIFEST.MF +++ /dev/null @@ -1,25 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %bundleName -Bundle-SymbolicName: org.eclipse.linuxtools.oprofile.ui;singleton:=true -Bundle-Version: 2.2.0.qualifier -Bundle-Vendor: %bundleProvider -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0", - org.eclipse.ui;bundle-version="3.4.0", - org.eclipse.linuxtools.profiling.launch;bundle-version="0.10.0", - org.eclipse.core.filesystem;bundle-version="1.3.100", - org.eclipse.debug.ui -Bundle-Activator: org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin -Bundle-ActivationPolicy: lazy -Bundle-Localization: plugin -Export-Package: org.eclipse.linuxtools.internal.oprofile.ui, - org.eclipse.linuxtools.oprofile.ui.model, - org.eclipse.linuxtools.internal.oprofile.ui.view -Import-Package: org.eclipse.core.resources, - org.eclipse.jface.text, - org.eclipse.linuxtools.internal.oprofile.core, - org.eclipse.linuxtools.internal.oprofile.core.model, - org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions, - org.eclipse.linuxtools.profiling.ui -Automatic-Module-Name: org.eclipse.linuxtools.oprofile.ui diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/about.html b/oprofile/org.eclipse.linuxtools.oprofile.ui/about.html deleted file mode 100644 index 164f781a8..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/about.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> -<title>About</title> -</head> -<body lang="EN-US"> - <h2>About This Content</h2> - - <p>November 30, 2017</p> - <h3>License</h3> - - <p> - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>. - For purposes of the EPL, "Program" will mean the Content. - </p> - - <p> - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at <a - href="http://www.eclipse.org/">http://www.eclipse.org</a>. - </p> - -</body> -</html> \ No newline at end of file diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/build.properties b/oprofile/org.eclipse.linuxtools.oprofile.ui/build.properties deleted file mode 100644 index 783b22fa3..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/build.properties +++ /dev/null @@ -1,10 +0,0 @@ -source.. = src/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - plugin.properties,\ - icons/,\ - about.html -src.includes = about.html,\ - icons/ -individualSourceBundles=true diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/annotate.png b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/annotate.png deleted file mode 100644 index 6cef6c72c3eafdebf70c5a92d1957d56a995a5b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMffdHQn*T0`8{{1}v-&3W3Pn5sk zR{r<g_1~L<?OPTcJ-qenb-9B(8W+uNczRI$)d{slb6Zy|?zy^A_R&H8g|ljQ&rq8= zq3HMB=E?18b0!wdpHi}I{p|k6xP{Xy+e&?Vszc{ZD45%u)8CT!|NnoWZ8QRp-|u4s z8m&|k<QELI2tQ!py>Pe?sG2d!+ug<9F4>?I$l)yTh%5%u9$@TtGTRQw$n|t_43W5; zd;YahlY#*2gXE}=hUsfd76(=SpROaLl60s3{>+<mZ3}KbnD299&4it9X%kua-<PC5 zT0ePlu6l&v@dJ1AopfxJcOCHf67})()0~%oT^>!|`0%UZk6q;#?_Et}*G!GfSo?dQ dW!CFE?9;O(r@TG9uLfu_gQu&X%Q~loCIIC3w3q+@ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dependent.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dependent.gif deleted file mode 100644 index 122bada5ffde2e46901b19cd3e1626c318568aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmZ?wbhEHb6krfwSZc%o1kTRRxoM91=??iB&IK8c#hLaM*|xQLwoL`r9mSS?rRIHQ z=94STrc{{Es4|^fWiY$We14tr(k7FoO{UA63|BQ9oLdofZbkI@7139=<lR2dbo<%& zdoO_K$Aect9=-Yg^zF~*?|;1d@bk^5U++Kv`t<ep=WoBifY6^W-+zDo{^#3|-`{@x z`Tq0IkDtGP{QUFt*Ps7H1I3>#j9d)%3_2j6fc(V3*6Gk)VDU$?-`+dtWKW`wM>4C} zihWFazRQH>ZehBwpS^fzz=TP`rW3dpglUPg{4}`v{s+gVK&~&VYgJYGJa|+X+dDf{ zxEb8JlsmFJRT%o*IF)A2o;__I1BYVvq9uyc+!)vu7+0@dqrg6$flWSp>vnlIcLrt| a+5HFh%dzfeI(Ga76U*+vvmOkN4AubKE5io> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dump.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/dump.gif deleted file mode 100644 index d5b800141e2957c0ba1d33c54604cd2ac1e32cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmZ?wbhEHb6krfwXkh>YjwzOwQBF=yUS1qgQBf@||EEk5Sh{rS-fGLeb1bhN)4Vsw z^8a4T|M#N)|9ATTf6j*wAN~^!6o0ZXGBC(9=zwej*~!3K^gvzAL2=#+4UPupHJVx) z6CP_g*)Rz(DfCWS_jD42R8M%%lMjZITG<uMvK53`A17%gtA<Z{`|Zo*30&PD61^WV z@iBNt?6ugkQ~tm=hwaR4npOGPbq(@t8cpo2>K&a0xoz!ieJKT#<Qdr*4Vf#{=O{8* F0{|*+bOrzb diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/error.png b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/error.png deleted file mode 100644 index 7d94eb1176de39953ef0ea0ee2933f1eb5cdf984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmV-=0fqjFP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#32;bRa{vGf6951U69E94oEQKA0Ut?3K~y-6-I6^{12GVVzYuNs5rIftU>j-< zkiygC9^@P;HaW@WCh-<~1S$&LB7ta-g5u&)IGcoJBWP%Nl4W^j-sc(F@E4MFCF$%p zwY{!jSrp2>2iO45!R&3iSls;xkkt2PFBapdiG?g900Gw1s=8<cPPWDq0B`ncF^;Hf zm}GF9k>_CElf!xGoH_x(uq+B$jMq#u@E+zK9wRJ0Bmj9D@1qOAcIKqzJneOzV6)ji z=l!Xq%Qj%MD+sL~56$~@zYU0As_y3;Q{Fl^fSX`O$g*TMgYh`EU)P5(k#aEXq?gXU zOVX2byQS4iTCG$%r^2~4fTTg=`Sy`Y=hSX<d;5BE>>o6eG?-RZFPISkzi<1Y%luFD Y2@bM^A*ha_)c^nh07*qoM6N<$f`{XwR{#J2 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/event.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/event.gif deleted file mode 100644 index c91f254ab1728df3d6555002c789ef4519693eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmZ?wbhEHb6krfwIK}`1%*@QJER6Q{@oK^K2I2LhDcg(_x<ymB#m2^pXYPoPkC({a zZI{|3mAl72W0Fk%9+`r@a>WNyQ|mJ_G8D=VDOVm*t39S!d(@!jh<5!k&BhZ3jmK+i zYn}Vf*iAU+IQ7#0dV9BNmwaYk4q0>~YT@;Y`THy9@83V)e!+qzP0NqAt~`E!zJ2kA zdvo_*nZNhS)ML-59eY0G_>2Gh?U$Z=z3bM;UAI3Sy7TV;{rFQ)zMgvW?d+4U7oL1L z|Log^XJ4<s_<Zfvk87`gU4QfI#+zTa-u$@p=Eu#qzwW;Map&FdyFm2*_r3SO@4x^3 z@cqw+?|(i1@axHkACEr%dHnIu(~p0ieEReB)1PObem(pA=LHab`Sa@Q-`C&%zWMg| z?YF=0zW;sy{qLur|Nj4<|Nr*~a8Oa7Q2fcl$i-04paU`*6ekSq#~SLJ>V;Zcn>(7s zC3H=#&2;5eI_t%h9pYltV&eVe6gs6`^&&&~Lxc6*Wjgo_;%oxFc)f${;|+zHc`Tzt zyqs8_eZphyM4JU%)Pp?CSscAWwR}%BaoGlhc(Yr%9T8#RZsstG3l8-5^br<jv;d}n zCZ#a#$e@sLW{pG(3yo)gI|G<bi|eXcF>p*~a_EwL#FBf$;W4KK!+(YjMuTQn1{Wb7 nkBEkiirivMLIFZY^4*RLFokWBVK}h3VTKXwL>YAr0S0RTR(c5A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/image.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/image.gif deleted file mode 100644 index 8aa0162df05c16227da66fddaa907c9b6cf28e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmZ?wbhEHb6krfwSZc`N?ChMI=9r)Eke}gPkl|RIX<w0TTbpOwRAAjvY}r?8-dAQm zxx#Eph53vs)45d!v+K;~*BLKuGFjSWy1dD7RkOjl6;bC_M4w*~ePv7D?E_7>pMAgg z0*HP*c=hAao9|EG{(S!a$Ey!N-+cP@{`0R-Uw?o8_WKJ6{rU3!_t)=#zWw<9?Z=<* zKmYvr`TNJuKR<u{`A-T^{K>+|#bD2%!vF*zKQXX19q1~s_#@fBpDX8NORScM@>A9o zyBOB;v<Xe!z;OS)*W`^p69j`r8<^&Vth~bfQsd_P3XVyROkY;ls;KaKa4R#kcXlXq zd2lLqWOpiadT=Ptm^q8XgIyte{z3(I4>oy*<ttanvw5(}WpCId$Lhf(EwgjiPFWTY S#sdcrF){}pJMQMlU=09`nZ#cJ diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/oprofile_view.png b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/oprofile_view.png deleted file mode 100644 index 4f8488f1c0c23bdc8703856b2a3baae022046332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;z9%{{UP0v71Ez000SaNLh0L02rG902rGANp*vi0005+Nkl<ZI1!~% zy^9l35dZDxt$Q(1&J*uIa@d3*2q_eVloAf?Y_3wc+Qz@e&i*XytfHcYe}N(*cS1n0 zFbgIj`;ojaXI`=!!{tEmy`6b8vopV){k;MHb2(h!>-GF*v-zx6s~u>qjZz9EMrj4D z7JeDm6wiy|OPZ!H`u)D~sTl2c`z6UEE)+soky5T~LAG4R>HRi|<2W7q_EVob*txdz zFi8@eygh+icQM^dF;C_wRE~nSrfq2R6Z{Nt)Hy;Jh7Y*br#8^-b`>YYyD_{Q9>!0m za6UQ^KLj#2vjCjTOXku7k*V2tS<zC9gEU1{joiys<RW7QK%G?p#oi3=Z{l{#@_SJ+ z$El2dffbC=#0t{g6r=lN#HTTeOEc8(Ud8o;eT4oNNeIvQ_<HuqmXNX?EC7}rM574% zuVYNFr10)Z$V}q<t8Z%@1X)l5*bWvPa0j$p;le9Ci|ySEke_B{@}_f*1M5^-IpAzN zkcp^58;rj=SQ0Y+HMU*w)y<yIA<hV(yr&XjL`Ks(D}do}_>Ly=@$untHHAEh@)n7m zKt7jpTSC(x=Xw5yVeDN+QB-fWS|1vXM#mTfntLmoY>rJPllOzc;E?j>)n(Ic`}Fb- qfmSrzM$fB)LZ3<2c{`u?Z;?OB0TZGI2?9z00000<MNUMnLSTY=brB^1 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/sample.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/sample.gif deleted file mode 100644 index 061161ae1c9e6435863ba173c0b3fed6a239f745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmZ?wbhEHb6krfwc*el+`Rnf=KmR0GEr0jv*Qc+)fByRO<LB?Vvc+k2E3%r_<hHCW z?ATb`xv6H-j=IUadKMi1@a1>o^gS)J_IJ)ZIC1ImdoO<6eg6Iai|<d~{CxiI=i5)e zK7adt2PpFL$GsQdAHMqW>ch`(KYl-Z_w&Qo-=Dty{`%wh_n*IO3hb)#?5gtZDnX=u zYpG3bK2XHItK7P=&~`$VWp}yt(iW4YttJbaOlQ}d&8|0}R%7wtME|BPgLNH-tJ;jO zY|6N@Df8CenyZ^K|NsBbFl2$^PZmZ721f=RkPkp{!oc3w;MmmM(%NFx(b>_~WX0M) z!Op73T8)uy8l%0#<W?J15kW3?MN4~In^t2MX%%S(>5bARt)|K%{6f4uoJ<0yt!7eE z%!iLjnYUUf?AW!3Nx`DkP)YLI^{a-h`Vwb%@0BoW)scVt?3qrhfvkuyA2)}%oTx#o fx{Qq2&!4|^TlKVqR&Zz-v~r8|2=Q^TFjxZs;4`*T diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/session.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/session.gif deleted file mode 100644 index c2b41bda923b87ab63ee4564d9bf7ff6385404e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmZ?wbhEHb6krfwSZc@s1gtEKtgI}&-0b%D@%=%Pv9Yo7@$vKGW#`2!<mV*MOH*H( zqf%C!y*5W>RiVM!BJH(B`t?<%O;z>nwe?%-jrP<V?XS1r(`t0M)$DM$+5Y+V3l=Q7 zKi~ewhJptND*o@c|9Gz9#f6R^7b<>SX!voV@xzS?KW=pVxG~}X{rDdbX8d@t;Kz#@ zKVEG3@!`b(|MUO<{_vj^p!k!8k&D5eK?md$ke?XXCLXx&?|g-$-(#Wju^!7wCwRJ3 zg=%eP=7@C`R_;&WxpYZu_Ib{f)T42(_dfjKZ(8LZ^1~)h<foyZx?n@IIxjO9zY~YD zph};Ls;~%?CIbtLJ*%MdoH>dt()ya3(lhM2SF99b(3fG5QD9&XuxD7zV8Eat%dmxg h+d5fUMz$^X3lw&XGaft6!mx+&%vt;Wo1GjPtO1Uau~+~A diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/symbol.gif b/oprofile/org.eclipse.linuxtools.oprofile.ui/icons/symbol.gif deleted file mode 100644 index 6ae4604cdba44133c67384abbac46e9035200142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmZ?wbhEHb6krfwSjfZx1T8Hs|G_}<CkrDN0~3P|NE9T`z@#;$f92{2J$IVZ<N_8S lNxId`8Y3FB`0CtMY1{IuIszkmKg6of@%{QQUxR_c8UQ}rAyEJT diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.properties b/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.properties deleted file mode 100644 index c50ac740c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.properties +++ /dev/null @@ -1,31 +0,0 @@ -#******************************************************************************* -# Copyright (c) 2004, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat, Inc. - initial API and implementation -#******************************************************************************* -bundleName=OProfile UI Plug-in -bundleProvider=Eclipse Linux Tools - -view.groupname=C/C++ Profiling -view.name=OProfile -OcountView.name=OCount - -view.annotate.toggle.label=Toggle Annotation -view.annotate.toggle.tooltip=Toggle Annotation - -annotateCommand.name=Annotate -lt.min.pct.label=OProfile Annotation: <0.01% -lt.05.pct.label=OProfile Annotation: 0.01% - 4.99% -lt.10.pct.label=OProfile Annotation: 05% - 9.99% -lt.20.pct.label=OProfile Annotation: 10% - 19.99% -lt.30.pct.label=OProfile Annotation: 20% - 29.99% -lt.40.pct.label=OProfile Annotation: 30% - 39.99% -lt.50.pct.label=OProfile Annotation: 40% - 49.99% -gt.50.pct.label=OProfile Annotation: >50% diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.xml b/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.xml deleted file mode 100644 index f48cf9664..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/plugin.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.2"?> -<plugin> - <extension - point="org.eclipse.ui.views"> - <view - category="org.eclipse.linuxtools.profiling.ui" - class="org.eclipse.linuxtools.internal.oprofile.ui.view.OprofileView" - icon="icons/oprofile_view.png" - id="org.eclipse.linuxtools.oprofile.ui.OProfileView" - name="%view.name" - restorable="true"> - </view> - <view - category="org.eclipse.linuxtools.profiling.ui" - class="org.eclipse.linuxtools.internal.oprofile.ui.view.OcountView" - icon="icons/oprofile_view.png" - id="org.eclipse.linuxtools.oprofile.ui.OCountView" - name="%OcountView.name" - restorable="false"> - </view> - </extension> -</plugin> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/pom.xml b/oprofile/org.eclipse.linuxtools.oprofile.ui/pom.xml deleted file mode 100644 index 2a201db0f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <artifactId>linuxtools-oprofile-parent</artifactId> - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <version>7.4.0</version> - </parent> - - <artifactId>org.eclipse.linuxtools.oprofile.ui</artifactId> - <version>2.2.0-SNAPSHOT</version> - <packaging>eclipse-plugin</packaging> - - <name>Linux Tools OProfile UI Plug-in</name> -</project> diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiMessages.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiMessages.java deleted file mode 100644 index 222e0fd62..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiMessages.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.ui; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public final class OprofileUiMessages { - - private static final String BUNDLE_NAME = "org.eclipse.linuxtools.internal.oprofile.ui.oprofileui"; //$NON-NLS-1$ - - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); - - private OprofileUiMessages() { - } - - public static String getString(String key) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (MissingResourceException e) { - return '!' + key + '!'; - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiPlugin.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiPlugin.java deleted file mode 100644 index a25b43338..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/OprofileUiPlugin.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Keith Seitz <keiths@redhat.com> - initial API and implementation - * Kent Sebastian <ksebasti@redhat.com> - - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.oprofile.ui; - -import java.text.DecimalFormat; -import java.text.NumberFormat; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.linuxtools.internal.oprofile.ui.view.OcountView; -import org.eclipse.linuxtools.internal.oprofile.ui.view.OprofileView; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - - -/** - * The main plugin class to be used in the desktop. - */ -public class OprofileUiPlugin extends AbstractUIPlugin { - //The shared instance. - private static OprofileUiPlugin plugin; - - private OprofileView oprofileview = null; - private OcountView ocountview = null; - - public static final String PLUGIN_ID = "org.eclipse.linuxtools.oprofile.ui"; //$NON-NLS-1$ - public static final String ID_OPROFILE_VIEW = PLUGIN_ID + ".OProfileView"; //$NON-NLS-1$ - public static final String ID_OCOUNT_VIEW = PLUGIN_ID + ".OCountView"; //$NON-NLS-1$ - - private static final String ICON_PATH = "icons/"; //$NON-NLS-1$ - public static final String SESSION_ICON = ICON_PATH + "session.gif"; //$NON-NLS-1$ - public static final String EVENT_ICON = ICON_PATH + "event.gif"; //$NON-NLS-1$ - public static final String IMAGE_ICON = ICON_PATH + "image.gif"; //$NON-NLS-1$ - public static final String DEPENDENT_ICON = ICON_PATH + "dependent.gif"; //$NON-NLS-1$ - public static final String SYMBOL_ICON = ICON_PATH + "symbol.gif"; //$NON-NLS-1$ - public static final String SAMPLE_ICON = ICON_PATH + "sample.gif"; //$NON-NLS-1$ - public static final String ERROR_ICON = ICON_PATH + "error.png"; //$NON-NLS-1$ - - public static final double MINIMUM_SAMPLE_PERCENTAGE = 0.0001; - - public static final String ANNOTATION_TYPE_LT_MIN_PERCENTAGE = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.min.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_05 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.05.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_10 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.10.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_20 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.20.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_30 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.30.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_40 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.40.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_LT_50 = "org.eclipse.linuxtools.oprofile.ui.annotation.lt.50.pct"; //$NON-NLS-1$ - public static final String ANNOTATION_TYPE_GT_50 = "org.eclipse.linuxtools.oprofile.ui.annotation.gt.50.pct"; //$NON-NLS-1$ - - /** - * The constructor. - */ - public OprofileUiPlugin() { - } - - /** - * This method is called upon plug-in activation - */ - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /** - * This method is called when the plug-in is stopped - */ - @Override - public void stop(BundleContext context) throws Exception { - super.stop(context); - plugin = null; - } - - - /** - * Returns the shared instance. - */ - public static OprofileUiPlugin getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given - * plug-in relative path - * - * @param path the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } - - public OprofileView getOprofileView() { - return oprofileview; - } - - public void setOprofileView(OprofileView oprofileview) { - this.oprofileview = oprofileview; - } - - public OcountView getOcountView() { - return ocountview; - } - - public void setOcountView(OcountView ocountview) { - this.ocountview = ocountview; - } - - public static IWorkbenchWindow getActiveWorkbenchWindow() { - return getDefault().getWorkbench().getActiveWorkbenchWindow(); - } - - public static Shell getActiveWorkbenchShell() { - IWorkbenchWindow window = getActiveWorkbenchWindow(); - if (window != null) { - return window.getShell(); - } - return null; - } - - public static String getPercentageString(double percentage) { - NumberFormat nf = NumberFormat.getPercentInstance(); - if (nf instanceof DecimalFormat) { - nf.setMinimumFractionDigits(2); - nf.setMaximumFractionDigits(2); - } - - if (percentage < OprofileUiPlugin.MINIMUM_SAMPLE_PERCENTAGE) { - return "<" + nf.format(OprofileUiPlugin.MINIMUM_SAMPLE_PERCENTAGE); //$NON-NLS-1$ - } else { - return nf.format(percentage); - } - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/oprofileui.properties b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/oprofileui.properties deleted file mode 100644 index 270bbaf98..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/oprofileui.properties +++ /dev/null @@ -1,51 +0,0 @@ -###################################################################### -# Copyright (c) 2004, 2018 Red Hat, Inc. -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Keith Seitz <keiths@redhat.com> - initial implementation -# Kent Sebastian <ksebasti@redhat.com> -###################################################################### -savedialog.title=Save Session -savedialog.message=Enter the new name of the default session -savedialog.initial= -savedialog.validator.invalidChar={0} is an invalid character in session name \"{1}\". -savedialog.validator.containsWhitespace=Session name \"{0}\" cannot contain whitespace. -savedialog.validator.exists=Session \"{0}\" already exists. - -defaultsessiondialog.nodefaultsession.title=Error Saving Default Session -defaultsessiondialog.nodefaultsession.message=No default session exists. - -view.dialog.parsing.text=Parsing OProfile Data -view.actions.refresh.label=Refresh View -view.actions.logreader.label=Open OProfile Daemon Log -view.actions.savedefaultsession.label=Save Default Session -view.menu.sortby.label=Sort By -view.actions.default.label=Default -view.actions.event.label=Event -view.actions.session.label=Session -view.actions.function.label=Function -view.actions.lib.label=Library -view.actions.line.label=Line number - - -oprofiled.logreader.dialog.title=OProfiled Log -oprofiled.logreader.error.fileNotFound=Log file empty or does not exist. -oprofiled.logreader.error.io=Error reading log file. - -uimodel.percentage.in=in -uimodel.sample.on.line=on line -uimodel.dependent.dependent.images=dependent images -UiModelSession_current=current - -opxmlParse.error.multipleImages=Error: samples not created from Eclipse-OProfile plugin. Please remove this session. - -annotation.text.from=from event -annotation.text.in=in session - -root.error.nosamples=No profiling data is on the system. diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OcountView.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OcountView.java deleted file mode 100644 index 148b822b9..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OcountView.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat Inc - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.TextViewer; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; - -/** - * Simple View to show text output of OCount - * @author jjohnstn - * - */ -public class OcountView extends ViewPart { - - String text = ""; //$NON-NLS-1$ - TextViewer viewer; - Composite parent; - - @Override - public void createPartControl(Composite parent) { - viewer = new TextViewer(parent, SWT.V_SCROLL | SWT.H_SCROLL); - viewer.setEditable(false); - viewer.getTextWidget().setFont(JFaceResources.getFont(IDebugUIConstants.PREF_DETAIL_PANE_FONT)); - Control control=viewer.getControl(); - GridData gd=new GridData(GridData.FILL_BOTH); - control.setLayoutData(gd); - Document d = new Document(text); - viewer.setDocument(d); - viewer.refresh(); - OprofileUiPlugin.getDefault().setOcountView(this); - this.parent = parent; - } - - public void setText(String text) { - Document d = new Document(text); - viewer.setDocument(d); - } - /** - * Refresh the view or open a new instance if it was closed. - */ - public void refreshView() { - // Need to create another view object if it was closed. - if(parent == null || parent.isDisposed()) { - try { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(OprofileUiPlugin.ID_OCOUNT_VIEW); - String currentText = viewer.getDocument().get(); - OprofileUiPlugin.getDefault().getOcountView().setText(currentText); - return; - } catch (PartInitException e2) { - e2.printStackTrace(); - } - } - viewer.refresh(); - } - /** - * Get the Text Viewer - * - * @return the text viewer for this View - */ - public TextViewer getViewer() { - return viewer; - } - - @Override - public void setFocus() { - // TODO Auto-generated method stub - - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileView.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileView.java deleted file mode 100755 index f313a05e4..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileView.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ITreeSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelRoot; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelRoot; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSession; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; - -/** - * The view for the OProfile plugin. Shows the elements gathered by the data model - * in a tree viewer, parsed by the ui model (in the model package). The hierarchy - * (as it is displayed) looks like: - * - * UiModelRoot (not shown in the view) - * \_ UiModelEvent - * \_ ... - * \_ UiModelEvent - * \_ UiModelSession - * \_ ... - * \_ UiModelSession - * \_ UiModelImage - * | \_ UiModelSymbol - * | \_ ... - * | \_ UiModelSymbol - * | \_ UiModelSample - * | \_ ... - * | \_ UiModelSample - * \_ UiModelDependent - * \_ UiModelImage - * | \_ ... (see above) - * \_ ... - * - * The refreshView() function takes care of launching the data model parsing and - * ui model parsing in a separate thread. - */ -public class OprofileView extends ViewPart implements ISelectionChangedListener { - private TreeViewer viewer; - private IAction deleteSessionAction; - private IAction saveDefaultSessionAction; - - @Override - public void createPartControl(Composite parent) { - createTreeViewer(parent); - createActionMenu(); - - OprofileUiPlugin.getDefault().setOprofileView(this); - } - - private void createTreeViewer(Composite parent) { - viewer = new TreeViewer(parent, SWT.SINGLE); - viewer.setContentProvider(new OprofileViewContentProvider()); - viewer.setLabelProvider(new OprofileViewLabelProvider()); - viewer.addDoubleClickListener(new OprofileViewDoubleClickListener()); - viewer.addSelectionChangedListener(this); - } - - private void createActionMenu() { - IMenuManager manager = getViewSite().getActionBars().getMenuManager(); - - manager.add(new OprofileViewLogReaderAction()); - manager.add(new OprofileViewRefreshAction()); - saveDefaultSessionAction = new OprofileViewSaveDefaultSessionAction(); - manager.add(saveDefaultSessionAction); - deleteSessionAction = new OprofileViewDeleteSessionAction(getTreeViewer()); - manager.add(deleteSessionAction); - - MenuManager sortMenu = new MenuManager( - OprofileUiMessages.getString("view.menu.sortby.label")); //$NON-NLS-1$ - - for (UiModelRoot.SortType s : UiModelRoot.SortType.values()) { - sortMenu.add(new OprofileViewSortAction(s, - OprofileViewSortAction.sortTypeMap.get(s))); - } - manager.add(sortMenu); - - } - - private TreeViewer getTreeViewer() { - return viewer; - } - - /** - * Extremely convoluted way of getting the running and parsing to happen in - * a separate thread, with a progress monitor. In most cases and on fast - * machines this will probably only be a blip. - */ - public void refreshView() { - try { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(OprofileUiPlugin.ID_OPROFILE_VIEW); - } catch (PartInitException e) { - e.printStackTrace(); - } - - IRunnableWithProgress refreshRunner = monitor -> { - monitor.beginTask(OprofileUiMessages.getString("view.dialog.parsing.text"), 2); //$NON-NLS-1$ - - OpModelRoot dataModelRoot = OpModelRoot.getDefault(); - dataModelRoot.refreshModel(); - monitor.worked(1); - - final UiModelRoot UiRoot = UiModelRoot.getDefault(); - UiRoot.refreshModel(); - - Display.getDefault().asyncExec(() -> OprofileUiPlugin.getDefault().getOprofileView().getTreeViewer().setInput(UiRoot)); - monitor.worked(1); - monitor.done(); - }; - - ProgressMonitorDialog dialog = new ProgressMonitorDialog(null); - try { - dialog.run(true, false, refreshRunner); - } catch (InvocationTargetException|InterruptedException e) { - e.printStackTrace(); - } - } - - @Override - public void selectionChanged(SelectionChangedEvent event) { - ITreeSelection tsl = viewer.getStructuredSelection(); - if (tsl.getFirstElement() instanceof UiModelSession) { - if (!deleteSessionAction.isEnabled()) { - deleteSessionAction.setEnabled(true); - } - - if (((UiModelSession) tsl.getFirstElement()).isDefaultSession()) { - if (!saveDefaultSessionAction.isEnabled()) { - saveDefaultSessionAction.setEnabled(true); - } - } - } else { - deleteSessionAction.setEnabled(false); - saveDefaultSessionAction.setEnabled(false); - - } - - } - - @Override - public void setFocus() { - // TODO Auto-generated method stub - } - - @Override - public void dispose() { - super.dispose(); - viewer.removeSelectionChangedListener(this); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewContentProvider.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewContentProvider.java deleted file mode 100644 index 781dc34a6..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewContentProvider.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation, - * adapted from Keith Seitz's ProfileContentProvider - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; - -/** - * Content provider for the OprofileView's tree viewer. - */ -public class OprofileViewContentProvider implements ITreeContentProvider { - - @Override - public Object[] getChildren(Object element) { - Assert.isLegal(element instanceof IUiModelElement, "in OprofileViewContentProvider"); //$NON-NLS-1$ - return ((IUiModelElement) element).getChildren(); - } - - @Override - public Object getParent(Object element) { - Assert.isLegal(element instanceof IUiModelElement, "in OprofileViewContentProvider"); //$NON-NLS-1$ - return ((IUiModelElement) element).getParent(); - } - - @Override - public boolean hasChildren(Object element) { - Assert.isLegal(element instanceof IUiModelElement, "in OprofileViewContentProvider"); //$NON-NLS-1$ - return ((IUiModelElement) element).hasChildren(); - } - - @Override - public Object[] getElements(Object parentElement) { - return getChildren(parentElement); - } - - @Override - public void dispose() { - // TODO Auto-generated method stub - } - - @Override - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // TODO Auto-generated method stub - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDeleteSessionAction.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDeleteSessionAction.java deleted file mode 100755 index 36bcbcc3f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDeleteSessionAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ITreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionManager; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSession; - -public class OprofileViewDeleteSessionAction extends Action { - - private TreeViewer treeViewer; - - public OprofileViewDeleteSessionAction(TreeViewer tree) { - super("Delete Session"); //$NON-NLS-1$ - treeViewer = tree; - setEnabled(false); - } - - @Override - public void run() { - ITreeSelection tsl = treeViewer.getStructuredSelection(); - if (tsl.getFirstElement() instanceof UiModelSession) { - UiModelSession sess = (UiModelSession) tsl.getFirstElement(); - deleteSession(sess); - } - - OprofileUiPlugin.getDefault().getOprofileView().refreshView(); - } - - /** - * Delete the session with the specified name for the specified event - * @param sessionName The name of the session to delete - * @param eventName The name of the event containing the session - */ - private void deleteSession(UiModelSession sess) { - String sessionName = sess.getLabelText(); - IUiModelElement[] modelEvents = sess.getChildren(); - - for (int i = 0; i < modelEvents.length; i++) { - SessionManager.deleteSession(sessionName, modelEvents[i].getLabelText()); - } - // clear out collected data by this session - // check if profile is done through operf or oprofile - if (Oprofile.OprofileProject.getProfilingBinary().equals(Oprofile.OprofileProject.OPERF_BINARY)) { - // delete operf_data folder - deleteOperfDataFolder(Oprofile.OprofileProject.getProject().getFolder(Oprofile.OprofileProject.OPERF_DATA)); - } - } - - public static void deleteOperfDataFolder(IFolder operfData) { - if(operfData.exists()) { - try { - operfData.delete(true,null); - } catch (CoreException e) { - OprofileCorePlugin.showErrorDialog("opcontrolProvider", e); //$NON-NLS-1$ - } - } - - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDoubleClickListener.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDoubleClickListener.java deleted file mode 100644 index 96c7d9593..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewDoubleClickListener.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ITreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelEvent; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelImage; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSample; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSession; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSymbol; -import org.eclipse.linuxtools.profiling.ui.ProfileUIUtils; -import org.eclipse.ui.PartInitException; - -/** - * Listener for the oprofile view when a user double clicks on an element in the tree. - * - * Different things occur based on the event: - * - * UiModelEvent - nothing (?) - * UiModelSession - save the session to a different name - * UiModelImage - nothing (?) - * UiModelSymbol - nothing (?) - * UiModelSample - go to line number in appropriate file - */ -public class OprofileViewDoubleClickListener implements IDoubleClickListener { - @Override - public void doubleClick(DoubleClickEvent event) { - TreeViewer tv = (TreeViewer) event.getSource(); - ITreeSelection tsl = tv.getStructuredSelection(); - IUiModelElement element = (IUiModelElement) tsl.getFirstElement(); - - try { - if (element instanceof UiModelEvent) { - // UiModelEvent event = (UiModelEvent)element; - - } else if (element instanceof UiModelSession) { - /* moved into an action menu */ - } else if (element instanceof UiModelImage) { - // UiModelImage image = (UiModelImage)element; - - } else if (element instanceof UiModelSymbol) { - final UiModelSymbol symbol = (UiModelSymbol) element; - final String fileName = symbol.getFileName(); - int line = symbol.getLineNumber(); - - ProfileUIUtils.openEditorAndSelect(fileName, line); - - } else if (element instanceof UiModelSample) { - // jump to line number in the appropriate file - UiModelSample sample = (UiModelSample) element; - int line = sample.getLine(); - - // get file name from the parent sample - final String fileName = sample.getFile(); - ProfileUIUtils.openEditorAndSelect(fileName, line, getProject()); - } - } catch (BadLocationException e1) { - e1.printStackTrace(); - } catch (PartInitException e2) { - e2.printStackTrace(); - } catch (CoreException e) { - e.printStackTrace(); - } - } - - /** - * return the project - * @since 2.1 - */ - protected IProject getProject() { - return Oprofile.OprofileProject.getProject(); - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLabelProvider.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLabelProvider.java deleted file mode 100644 index 9bbaba26c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLabelProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation, - * adapted from Keith Seitz's ProfileLabelProvider - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; -import org.eclipse.swt.graphics.Image; - -/** - * Content provider for OprofileView's tree viewer. - */ -public class OprofileViewLabelProvider extends LabelProvider { - - @Override - public Image getImage(Object element) { - Assert.isLegal(element instanceof IUiModelElement, "in OprofileViewLabelProvider"); //$NON-NLS-1$ - return ((IUiModelElement) element).getLabelImage(); - } - - @Override - public String getText(Object element) { - Assert.isLegal(element instanceof IUiModelElement, "in OprofileViewLabelProvider"); //$NON-NLS-1$ - return ((IUiModelElement) element).getLabelText(); - } - - @Override - public boolean isLabelProperty(Object element, String property) { - return false; - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLogReaderAction.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLogReaderAction.java deleted file mode 100644 index 2ae73d4bd..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewLogReaderAction.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * Keith Seitz <keiths@redhat.com> - much of the code in the LogReader class - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Layout; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; - -/** - * Log reader action. Reads /var/lib/oprofile/samples/oprofiled.log and displays - * it in a nice dialog. Although the log is of dubious utility, it might be useful - * to some. - */ -public class OprofileViewLogReaderAction extends Action { - public OprofileViewLogReaderAction() { - super(OprofileUiMessages.getString("view.actions.logreader.label")); //$NON-NLS-1$ - } - - @Override - public void run() { - Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - LogReader log = new LogReader(); - - try { - new ProgressMonitorDialog(activeShell).run(true, false, log); - } catch (InvocationTargetException|InterruptedException e) { - e.printStackTrace(); - } - - //open custom log dialog - OprofiledLogDialog odlg = new OprofiledLogDialog(activeShell, log.getLogContents()); - odlg.open(); - } -} - -/** - * A Runnable to read oprofiled's logfile - */ -class LogReader implements Runnable, IRunnableWithProgress { - private static long lastModified = -1; - private static String contents = null; - - @Override - public void run() { - try { - IRemoteFileProxy proxy = RemoteProxyManager.getInstance().getFileProxy( - Oprofile.OprofileProject.getProject()); - IFileStore fileStore = proxy.getResource(Oprofile.getLogFile()); - if (fileStore.fetchInfo().exists()) { - long modified = fileStore.fetchInfo().getLastModified(); - - // only reread it if it has been modified since the last run - if (modified != lastModified) { - lastModified = modified; - contents = ""; //$NON-NLS-1$ - } - try (InputStream is = fileStore.openInputStream(EFS.NONE, - new NullProgressMonitor()); - BufferedReader bi = new BufferedReader( - new InputStreamReader(is))) { - String line; - while ((line = bi.readLine()) != null) { - contents += line + "\n"; //$NON-NLS-1$ - } - bi.close(); - } - } - } catch (FileNotFoundException e) { - // The file doesn't exist or was erased. Try again next time. - contents = OprofileUiMessages - .getString("oprofiled.logreader.error.fileNotFound"); //$NON-NLS-1$ - } catch (IOException e) { - // Error reading log. Try again next time. - lastModified = 0; - contents = OprofileUiMessages - .getString("oprofiled.logreader.error.io"); //$NON-NLS-1$ - } catch (CoreException e) { - e.printStackTrace(); - } - } - - public String getLogContents() { - return contents; - } - - - @Override - public void run(IProgressMonitor monitor) { - this.run(); - } -} - -/** - * A custom dialog box to display the oprofiled log file. - */ -class OprofiledLogDialog extends MessageDialog { - //string to contain the log file - private String textContent = null; - - public static final int GRID_WIDTH = 350; - public static final int GRID_HEIGHT = 400; - - public OprofiledLogDialog (Shell parentShell, String dialogMessage) { - super(parentShell, OprofileUiMessages.getString("oprofiled.logreader.dialog.title"), null, null, MessageDialog.NONE, new String[] { IDialogConstants.OK_LABEL }, 0); //$NON-NLS-1$ - textContent = dialogMessage; - } - - @Override - protected Control createCustomArea(Composite parent) { - Composite area = new Composite(parent, 0); - Layout layout = new GridLayout(1, true); - GridData gd = new GridData(GRID_WIDTH, GRID_HEIGHT); - - area.setLayout(layout); - area.setLayoutData(gd); - - Text txt = new Text(area, SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - //Check if the textContent isn't null - if (textContent != null){ - txt.setText(textContent); - } - txt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - return area; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewRefreshAction.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewRefreshAction.java deleted file mode 100644 index 867b82344..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewRefreshAction.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import org.eclipse.jface.action.Action; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; - -/** - * Refresh menu item. - */ -public class OprofileViewRefreshAction extends Action { - public OprofileViewRefreshAction() { - super(OprofileUiMessages.getString("view.actions.refresh.label")); //$NON-NLS-1$ - } - - @Override - public void run() { - OprofileUiPlugin.getDefault().getOprofileView().refreshView(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSaveDefaultSessionAction.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSaveDefaultSessionAction.java deleted file mode 100755 index ca8e3509c..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSaveDefaultSessionAction.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - * Keith Seitz <keiths@redhat.com> - SaveSessionValidator code - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import java.text.MessageFormat; - -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.IInputValidator; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.window.Window; -import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; -import org.eclipse.linuxtools.internal.oprofile.core.opxml.sessions.SessionManager; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.linuxtools.oprofile.ui.model.IUiModelElement; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelError; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelRoot; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelSession; -import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; -import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; - -/** - * Menu item to save the default session. Moved from a double-click in the view - * on the default session for consistency (since non-default sessions can't be - * saved). - */ -public class OprofileViewSaveDefaultSessionAction extends Action { - private IRemoteFileProxy proxy; - - public OprofileViewSaveDefaultSessionAction() { - super(OprofileUiMessages - .getString("view.actions.savedefaultsession.label")); //$NON-NLS-1$ - } - - @Override - public void run() { - boolean defaultSessionExists = false; - UiModelRoot modelRoot = UiModelRoot.getDefault(); - String defaultSessionName = null; - IUiModelElement[] modelEvents = null; - - if (modelRoot.hasChildren()) { - IUiModelElement[] sessions = modelRoot.getChildren(); - for (IUiModelElement e : sessions) { - if (e instanceof UiModelError) - break; - - if (e instanceof UiModelSession) { - - if (((UiModelSession) e).isDefaultSession()) { - defaultSessionExists = true; - defaultSessionName = e.getLabelText(); - modelEvents = ((UiModelSession) e).getChildren(); - break; - } - - if (defaultSessionExists) - break; - } - } - - if (defaultSessionExists) { - // the following code was originially written by Keith Seitz - InputDialog dialog = new InputDialog( - OprofileUiPlugin.getActiveWorkbenchShell(), - OprofileUiMessages.getString("savedialog.title"), //$NON-NLS-1$ - OprofileUiMessages.getString("savedialog.message"), //$NON-NLS-1$ - OprofileUiMessages.getString("savedialog.initial"), //$NON-NLS-1$ - new SaveSessionValidator()); - - int result = dialog.open(); - if (result == Window.OK) { - SessionManager.saveSession(dialog.getValue()); - - // remove the default session - for (int i = 0; i < modelEvents.length; i++) { - SessionManager.deleteSession(defaultSessionName, modelEvents[i].getLabelText()); - } - - if (Oprofile.OprofileProject.OPERF_BINARY.equals(Oprofile.OprofileProject.getProfilingBinary())) { - // remove oprofile_data so current event no longer - // be there - OprofileViewDeleteSessionAction.deleteOperfDataFolder( - Oprofile.OprofileProject.getProject().getFolder(Oprofile.OprofileProject.OPERF_DATA)); - } - OprofileUiPlugin.getDefault().getOprofileView().refreshView(); - } - } else { - MessageDialog - .openError( - OprofileUiPlugin.getActiveWorkbenchShell(), - OprofileUiMessages - .getString("defaultsessiondialog.nodefaultsession.title"), //$NON-NLS-1$ - OprofileUiMessages - .getString("defaultsessiondialog.nodefaultsession.message")); //$NON-NLS-1$ - } - } - } - - // Original author: Keith Seitz <keiths@redhat.com> - private class SaveSessionValidator implements IInputValidator { - - private SessionManager session = null; - - public SaveSessionValidator() { - session = new SessionManager(SessionManager.SESSION_LOCATION); - } - - @Override - public String isValid(String newText) { - // Sanity check - if (newText.length() == 0) { - return ""; //$NON-NLS-1$ - } - - // Cannot contain invalid characters - int index = newText.indexOf('/'); - if (index == -1) { - index = newText.indexOf('\\'); - } - - if (index != -1) { - String format = OprofileUiMessages - .getString("savedialog.validator.invalidChar"); //$NON-NLS-1$ - return MessageFormat.format(format, newText.substring(index, index + 1), newText); - } - - // Cannot contain whitespace - if (newText.contains(" ") || newText.contains("\t")) { //$NON-NLS-1$ //$NON-NLS-2$ - String format = OprofileUiMessages - .getString("savedialog.validator.containsWhitespace"); //$NON-NLS-1$ - return MessageFormat.format(format, newText); - } - - if (session.existsSession(newText)) { - String format = OprofileUiMessages - .getString("savedialog.validator.exists"); //$NON-NLS-1$ - return MessageFormat.format(format, newText); - } - - // Must not already exist (opcontrol doesn't allow it) - - try { - proxy = RemoteProxyManager.getInstance().getFileProxy( - Oprofile.OprofileProject.getProject()); - } catch (CoreException e) { - e.printStackTrace(); - } - - IFileStore fileStore = proxy.getResource(Oprofile - .getDefaultSamplesDirectory() + newText); - if (fileStore.fetchInfo().exists()) { - String format = OprofileUiMessages - .getString("savedialog.validator.exists"); //$NON-NLS-1$ - return MessageFormat.format(format, newText); - } - - // Everything OK - return null; - } - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSortAction.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSortAction.java deleted file mode 100644 index 6c63d7258..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/internal/oprofile/ui/view/OprofileViewSortAction.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014, 2018 IBM Corporation. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Brajesh K Rathore <brrathor@linux.vnet.ibm.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.internal.oprofile.ui.view; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.jface.action.Action; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.linuxtools.oprofile.ui.model.UiModelRoot; - -/** - * - * Action handler for tree sorting. - * tree can be sort by session,event,Lib,function and line number. - * @since 3.0 - * - */ -public class OprofileViewSortAction extends Action { - - public static Map<UiModelRoot.SortType, String> sortTypeMap = new HashMap<>(); - static{ - sortTypeMap.put(UiModelRoot.SortType.DEFAULT, OprofileUiMessages.getString("view.actions.default.label")); //$NON-NLS-1$ - sortTypeMap.put(UiModelRoot.SortType.SESSION, OprofileUiMessages.getString("view.actions.session.label")); //$NON-NLS-1$ - sortTypeMap.put(UiModelRoot.SortType.EVENT, OprofileUiMessages.getString("view.actions.event.label")); //$NON-NLS-1$ - sortTypeMap.put(UiModelRoot.SortType.LIB, OprofileUiMessages.getString("view.actions.lib.label")); //$NON-NLS-1$ - sortTypeMap.put(UiModelRoot.SortType.FUNCTION, OprofileUiMessages.getString("view.actions.function.label")); //$NON-NLS-1$ - sortTypeMap.put(UiModelRoot.SortType.LINE_NO, OprofileUiMessages.getString("view.actions.line.label")); //$NON-NLS-1$ - } - private UiModelRoot.SortType sortType; - - public OprofileViewSortAction(UiModelRoot.SortType sortType, String text) { - super(text); - this.sortType = sortType; - } - - @Override - public void run() { - UiModelRoot.setSortingType(sortType); - OprofileUiPlugin.getDefault().getOprofileView().refreshView(); - } - -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/IUiModelElement.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/IUiModelElement.java deleted file mode 100644 index 2baf6fe3b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/IUiModelElement.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import org.eclipse.swt.graphics.Image; - -/** - * Interface for all model elements to ease use with the tree viewer. - * @since 1.1 - */ -public interface IUiModelElement { - /** - * Returns the text to display in the tree viewer as required by the label provider. - * @return text describing this element - */ - String getLabelText(); - - /** - * Returns the children of this element. - * @return an array of IUiModelElements - */ - IUiModelElement[] getChildren(); - - /** - * Returns if this element has any children. Unless there is no data in - * a session, only samples should not have any children. - * @return true if children, false if no children - */ - boolean hasChildren(); - - /** - * Returns the parent element. - * @return the parent element - */ - IUiModelElement getParent(); - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - Image getLabelImage(); -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelDependent.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelDependent.java deleted file mode 100644 index 86486a27f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelDependent.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.util.Arrays; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * @since 1.1 - */ -public class UiModelDependent implements IUiModelElement { - private IUiModelElement parent; - private OpModelImage dataModelDependents[]; - private UiModelImage dependents[]; - private int totalCount; - private int depCount; - - /** - * Constructor to this UiModelDependent class - * @param parent The parent element - * @param dependents The dependent images - * @param totalCount The total count of samples for the parent session - * @param depCount The count for all dependent images - */ - public UiModelDependent(IUiModelElement parent, OpModelImage dependents[], int totalCount, int depCount) { - this.parent = parent; - this.dataModelDependents = dependents; - this.dependents = null; - this.totalCount = totalCount+depCount; - this.depCount = depCount; - refreshModel(); - } - - private void refreshModel() { - dependents = new UiModelImage[dataModelDependents.length]; - - for (int i = 0; i < dataModelDependents.length; i++) { - dependents[i] = new UiModelImage(this, dataModelDependents[i], totalCount, 0); - } - } - - @Override - public String toString() { - double countPercentage = (double)depCount / (double)totalCount; - String percentage = OprofileUiPlugin.getPercentageString(countPercentage); - - return percentage + " " + OprofileUiMessages.getString("uimodel.percentage.in")+" " + OprofileUiMessages.getString("uimodel.dependent.dependent.images"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return toString(); - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - - if (UiModelRoot.SortType.LIB == UiModelRoot.getSortingType()) { - Arrays.sort(dependents, UiModelSorting.getInstance()); - return dependents; - } - - return dependents; - } - - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return true; //must have children, or this object wouldn't be created - } - - /** - * Returns the parent element. - * @return the parent element or null - */ - @Override - public IUiModelElement getParent() { - return parent; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.DEPENDENT_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelError.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelError.java deleted file mode 100644 index b203d525b..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelError.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * This is an error element - * @since 1.1 - */ -public class UiModelError implements IUiModelElement { - public static final UiModelError NO_SAMPLES_ERROR = new UiModelError(OprofileUiMessages.getString("root.error.nosamples")); //$NON-NLS-1$ - - private String errorMessage; - - /** - * Constructor to the UiModelError class - * @param message Error message - */ - public UiModelError(String message) { - errorMessage = message; - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return errorMessage; - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - return null; - } - - /** - * Return whether the element has any children - * @return true if the element has any children, false otherwise - */ - @Override - public boolean hasChildren() { - return false; - } - - /** - * Returns the element's parent. - * @return The parent element or null - */ - @Override - public IUiModelElement getParent() { - return null; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * In this case it is an error icon. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.ERROR_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelEvent.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelEvent.java deleted file mode 100644 index e2d9fa8ea..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelEvent.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * Top level elements displayed in the view -- events that oprofile - * has profiled. Must have children sessions. - * @since 1.1 - */ -public class UiModelEvent implements IUiModelElement { - private IUiModelElement parent = null; //parent node -- necessary? - private OpModelEvent event; //the node in the data model - - private UiModelImage image; //this node's child - private UiModelDependent dependent; //dependent images of the OpModelImage - - public UiModelEvent(IUiModelElement parent, OpModelEvent event) { - this.parent = parent; - this.event = event; - this.image = null; - this.dependent = null; - refreshModel(); - } - - /** - * Create the ui sessions from the data model. - */ - private void refreshModel() { - OpModelImage dataModelImage = event.getImage(); - if (dataModelImage != null) { - image = new UiModelImage(this, dataModelImage, dataModelImage.getCount(), dataModelImage.getDepCount()); - - if (dataModelImage.hasDependents()) { - dependent = new UiModelDependent(this, dataModelImage.getDependents(), dataModelImage.getCount(), dataModelImage.getDepCount()); - } - } - } - - @Override - public String toString() { - return (event == null ? "" : event.getName()); //$NON-NLS-1$ - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return toString(); - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - if (dependent != null) { - return new IUiModelElement[] {image, dependent}; - } else { - return new IUiModelElement[] {image}; - } - } - - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return (image != null); - } - - /** - * Returns the element's parent. - * @return parent The parent element or null - */ - @Override - public IUiModelElement getParent() { - return parent; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.EVENT_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelImage.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelImage.java deleted file mode 100644 index aa488079e..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelImage.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.util.Arrays; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelImage; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSymbol; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * Children of sessions in the view -- the binary which was profiled. - * May or may not have child symbols. Note that although the dependent - * images are children of OpModelImages in the data model, for usability's - * sake they are children of the parent session in the tree. - * @since 1.1 - */ -public class UiModelImage implements IUiModelElement { - private IUiModelElement parent; //parent element, may be UiModelSession or UiModelDependent - private OpModelImage image; //the node in the data model - private UiModelSymbol symbols[]; //this node's child (symbols) - private int totalCount; //total number of samples - - /** - * Constructor to the UiModelImage class - * @param parent The parent element - * @param image The image node object in the data model - * @param totalCount The total number of samples - * @param depCount The number of samples from dependent images - */ - public UiModelImage(IUiModelElement parent, OpModelImage image, int totalCount, int depCount) { - this.parent = parent; - this.image = image; - this.symbols = null; - this.totalCount = totalCount+depCount;//totalCount; - refreshModel(); - } - /** - * Create the ui symbols from the data model. - */ - private void refreshModel() { - OpModelSymbol[] dataModelSymbols = image.getSymbols(); - - //dependent images may not have symbols - if (dataModelSymbols != null) { - symbols = new UiModelSymbol[dataModelSymbols.length]; - - for (int i = 0; i < dataModelSymbols.length; i++) { - symbols[i] = new UiModelSymbol(this, dataModelSymbols[i], totalCount); - } - } - } - - @Override - public String toString() { - if (image.getCount() == OpModelImage.IMAGE_PARSE_ERROR) { - return OprofileUiMessages.getString("opxmlParse.error.multipleImages"); //$NON-NLS-1$ - } else { - double countPercentage = (double)(image.getCount() ) / (double)totalCount; - String percentage = OprofileUiPlugin.getPercentageString(countPercentage); - - return percentage + " " + OprofileUiMessages.getString("uimodel.percentage.in")+" " + image.getName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return toString(); - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - IUiModelElement children[] = null; - - if (symbols != null) { - children = new IUiModelElement[symbols.length]; - - for (int i = 0; i < symbols.length; i++) { - children[i] = symbols[i]; - } - } - if (UiModelRoot.SortType.FUNCTION == UiModelRoot.getSortingType()) { - Arrays.sort(children, UiModelSorting.getInstance()); - return children; - } - return children; - } - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return (symbols == null || symbols.length == 0 ? false : true); - } - - /** - * Returns the element's parent. - * @return parent The parent element or null - */ - @Override - public IUiModelElement getParent() { - return parent; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.IMAGE_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelRoot.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelRoot.java deleted file mode 100644 index 6d92dbecc..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelRoot.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.util.Arrays; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelRoot; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.swt.graphics.Image; - -/** - * Convenience class for creating the UI model from the oprofile data model, - * via a single point of access. - * @since 1.1 - */ -public class UiModelRoot implements IUiModelElement { - private static UiModelRoot uiModelRoot = new UiModelRoot(); //singleton - - private UiModelError rootError; - private UiModelSession[] session; //this node's children - - /** constructor, private for singleton use **/ - protected UiModelRoot() { - session = null; - rootError = null; - } - - /** - * Get the instance of this ui model root. - * @return the ui model root object - */ - public static UiModelRoot getDefault() { - return uiModelRoot; - } - - /** - * Kick off creating the UI model from the data model. Meant to - * be called from UI code. The refreshModel() method is called for - * the child elements from their constructor. - */ - public void refreshModel() { - OpModelSession dataModelEvents[] = getModelDataEvents(); - - - rootError = null; - session = null; - - if (dataModelEvents == null || dataModelEvents.length == 0) { - rootError = UiModelError.NO_SAMPLES_ERROR; - } else { - session = new UiModelSession[dataModelEvents.length]; - for (int i = 0; i < dataModelEvents.length; i++) { - session[i] = new UiModelSession(dataModelEvents[i]); - } - } - } - - protected OpModelSession[] getModelDataEvents() { - OpModelRoot modelRoot = OpModelRoot.getDefault(); - return modelRoot.getSessions(); - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return null; - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - if (session != null && session.length != 0) { - if (UiModelRoot.SortType.SESSION == UiModelRoot.getSortingType()) { - Arrays.sort(session, UiModelSorting.getInstance()); - return session; - } - - else { - return session; - } - - } else - return new IUiModelElement[] { rootError }; - } - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return true; - } - - /** - * Returns the element's parent. - * @return The parent element or null - */ - @Override - public IUiModelElement getParent() { - return null; - } - - @Override - public Image getLabelImage() { - return null; - } - - /** - * - * Adding sorting feature in tree. - * @since 3.0 - * - */ - public static enum SortType{DEFAULT,SESSION,EVENT,LIB,FUNCTION,LINE_NO} - private static SortType sortType; - public static void setSortingType(SortType sortType) { - UiModelRoot.sortType = sortType; - } - - public static SortType getSortingType() { - return UiModelRoot.sortType; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSample.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSample.java deleted file mode 100644 index e7807bd1e..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSample.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSample; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * @since 1.1 - */ -public class UiModelSample implements IUiModelElement { - private IUiModelElement parent; //parent element - private OpModelSample sample; //the node in the data model - private int totalCount; //total sample count for the parent session - - /** - * Constructor to the UiModelSample class - * @param parent The parent element - * @param sample Oprofile sample node in the data model - * @param totalCount The total sample count for the parent session - */ - public UiModelSample(IUiModelElement parent, OpModelSample sample, int totalCount) { - this.parent = parent; - this.sample = sample; - this.totalCount = totalCount; - } - - @Override - public String toString() { - double countPercentage = (double)sample.getCount() / (double)totalCount; - String percentage = OprofileUiPlugin.getPercentageString(countPercentage); - - return percentage + " " + OprofileUiMessages.getString("uimodel.sample.on.line")+" " + Integer.toString(sample.getLine()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - /** - * Return the sample line - * @return the sample line - */ - public int getLine() { - return sample.getLine(); - } - - /** - * Return the path to the sample node - * @return node path - */ - public String getFile(){ - return sample.getFilePath(); - } - - /** - * Returns the count percentage for the sample node - * @return count percentage for the sample node - */ - public double getCountPercentage() { - return (double)sample.getCount() / (double)totalCount; - } - - /** IUiModelElement functions **/ - @Override - public String getLabelText() { - return toString(); - } - - /** - * Returns the children of this element. - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - return null; - } - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return false; //bottom level element - } - - /** - * Returns the element's parent. - * @return parent The parent element - */ - @Override - public IUiModelElement getParent() { - return parent; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.SAMPLE_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSession.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSession.java deleted file mode 100644 index 588077e3f..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSession.java +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.util.Arrays; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelEvent; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * Children of events in the view -- sessions containing images/symbols - * for its parent event. Must have a child image. May also have dependent - * images, which are children of the Image in the data model, but are - * displayed as children of the session in the view. - * @since 1.1 - */ -public class UiModelSession implements IUiModelElement { - private OpModelSession session; //the node in the data model - - private UiModelEvent events[]; - - //OProfile's default session name - private static final String DEFAULT_SESSION_NAME = "current"; //$NON-NLS-1$ - - /** - * Constructor to the UiModelSession class - * @param session Oprofile session node in the data model - */ - public UiModelSession(OpModelSession session) { - if (session != null) { - this.session = session; - refreshModel(); - } - } - - private void refreshModel() { - - OpModelEvent dataModelEvents[] = session.getEvents(); - events = new UiModelEvent[dataModelEvents.length]; - for (int i = 0; i < dataModelEvents.length; i++) { - events[i] = new UiModelEvent(this, dataModelEvents[i]); - } - - } - - @Override - public String toString() { - return session.getName(); - } - - /** - * Check if this is Oprofile's default session name - * @return true whether this is Oprofile's default session, false otherwise - */ - public boolean isDefaultSession() { - return session.getName().equalsIgnoreCase(DEFAULT_SESSION_NAME); - } - - /** IUiModelElement functions - * Returns the text to display in the tree viewer as required by the label provider. - * @return text Text string describing this element - */ - @Override - public String getLabelText() { - if (session.getName().equals(DEFAULT_SESSION_NAME)){ - return OprofileUiMessages.getString("UiModelSession_current"); //$NON-NLS-1$ - } - return toString(); - } - - /** - * Returns the children of this element. - * @return An array of child elements - */ - @Override - public IUiModelElement[] getChildren() { - if (UiModelRoot.SortType.EVENT == UiModelRoot.getSortingType()) { - Arrays.sort(events, UiModelSorting.getInstance()); - return events; - } - - return events; - } - - /** - * Returns if the element has any children. - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return (events == null || events.length == 0 ? false : true); - } - - /** - * Returns the element's parent. - * @return parent The parent element - */ - @Override - public IUiModelElement getParent() { - return null; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin.getImageDescriptor(OprofileUiPlugin.SESSION_ICON).createImage(); - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSorting.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSorting.java deleted file mode 100644 index ddc9a4f23..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSorting.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014, 2018 IBM Corporation and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Brajesh K Rathore <brrathor@linux.vnet.ibm.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.text.Collator; -import java.util.Comparator; - -/** - * Comparator for sorting tree elements. - * - * @since 3.0 - */ -public class UiModelSorting implements Comparator<IUiModelElement> { - private static UiModelSorting instance = new UiModelSorting(); - - private Collator collator; - - private UiModelSorting() { - collator = Collator.getInstance(); - } - - public static UiModelSorting getInstance() { - return instance; - } - - @Override - public int compare(IUiModelElement o1, IUiModelElement o2) { - - // compare line no. - if (o1 instanceof UiModelSample && o2 instanceof UiModelSample) { - return ((UiModelSample) o1).getLine() - - ((UiModelSample) o2).getLine(); - } else if (o1 instanceof UiModelSymbol && o2 instanceof UiModelSymbol) { - // compare function name - return collator.compare(((UiModelSymbol) o1).getFunctionName(), - ((UiModelSymbol) o2).getFunctionName()); - } else if (o1 instanceof UiModelImage && o2 instanceof UiModelImage) { - // comapre lib name - return collator.compare(getLibraryName(o1.getLabelText()), - getLibraryName(o2.getLabelText())); - } - // default comparison based on display label - return collator.compare(o1.getLabelText(), o2.getLabelText()); - } - - private String getLibraryName(String lib) { - // /lib64/libc-2.12.so - libc-2.12.s0 - String libName = ""; //$NON-NLS-1$ - int index = 0; - if (null != lib && lib.trim().length() != 0) { - index = lib.lastIndexOf('/'); - if (index != -1) { - libName = lib.substring(index + 1, lib.length()); - } - - } - return libName; - } -} diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSymbol.java b/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSymbol.java deleted file mode 100644 index 1da6901de..000000000 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/src/org/eclipse/linuxtools/oprofile/ui/model/UiModelSymbol.java +++ /dev/null @@ -1,173 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation - *******************************************************************************/ -package org.eclipse.linuxtools.oprofile.ui.model; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; - -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSample; -import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSymbol; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiMessages; -import org.eclipse.linuxtools.internal.oprofile.ui.OprofileUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * Children of images in the view -- a function name in the profiled image's - * source code. May or may not have child samples. - * - * @since 1.1 - */ -public class UiModelSymbol implements IUiModelElement { - private IUiModelElement parent; // parent element - private OpModelSymbol symbol; // the node in the data model - private UiModelSample samples[]; // this node's children - private int totalCount; // total count of samples for the parent session - - /** - * Constructor to the UiModelSymbol class - * - * @param parent - * The parent element - * @param symbol - * The debugging symbol node object in the data model - * @param totalCount - * The total count of samples for the parent session - */ - public UiModelSymbol(IUiModelElement parent, OpModelSymbol symbol, - int totalCount) { - this.parent = parent; - this.symbol = symbol; - this.samples = null; - this.totalCount = totalCount; - refreshModel(); - } - - /** - * Creates the ui samples from the data model - */ - private void refreshModel() { - ArrayList<UiModelSample> sampleList = new ArrayList<>(); - OpModelSample dataModelSamples[] = symbol.getSamples(); - - for (int i = 0; i < dataModelSamples.length; i++) { - // dont display samples with line number of 0, meaning no line - // number - // was correlated, more likely that no source file exists - if (dataModelSamples[i].getLine() != 0) { - sampleList.add(new UiModelSample(this, dataModelSamples[i], - totalCount)); - } - } - - samples = new UiModelSample[sampleList.size()]; - sampleList.toArray(samples); - } - - @Override - public String toString() { - double countPercentage = (double) symbol.getCount() - / (double) totalCount; - String percentage = OprofileUiPlugin - .getPercentageString(countPercentage); - - // a hack to get `basename` type functionality - String fileName = (new File(symbol.getFilePath())).getName(); - - return percentage - + " " + OprofileUiMessages.getString("uimodel.percentage.in") + " " + symbol.getName() + (fileName.length() == 0 ? "" : " [" + fileName + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ - } - - /** - * Return the file path for the current debugging symbol - * - * @return the file path - */ - public String getFileName() { - return symbol.getFilePath(); - } - - /** - * Return the debugging symbol function name - * - * @return the function name - */ - public String getFunctionName() { - return symbol.getName(); - } - - /** - * Return the debugging symbol line number - * - * @return the line number - */ - public int getLineNumber() { - return symbol.getLine(); - } - - /** - * IUiModelElement functions Returns the text to display in the tree viewer - * as required by the label provider. - * - * @return text describing this element - */ - @Override - public String getLabelText() { - return toString(); - } - - /** - * Returns the children of this element. - * - * @return An array of child elements or null - */ - @Override - public IUiModelElement[] getChildren() { - if (UiModelRoot.SortType.LINE_NO == UiModelRoot.getSortingType()) { - Arrays.sort(samples, UiModelSorting.getInstance()); - return samples; - } - return samples; - } - - /** - * Returns if the element has any children. - * - * @return true if the element has children, false otherwise - */ - @Override - public boolean hasChildren() { - return (samples == null || samples.length == 0 ? false : true); - } - - /** - * Returns the element's parent. - * - * @return parent The parent element - */ - @Override - public IUiModelElement getParent() { - return parent; - } - - /** - * Returns the Image to display next to the text in the tree viewer. - * - * @return an Image object of the icon - */ - @Override - public Image getLabelImage() { - return OprofileUiPlugin - .getImageDescriptor(OprofileUiPlugin.SYMBOL_ICON).createImage(); - } -} diff --git a/oprofile/pom.xml b/oprofile/pom.xml deleted file mode 100644 index e691e506c..000000000 --- a/oprofile/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2011, 2018 Red Hat, Inc. - - This program and the accompanying materials are made - available under the terms of the Eclipse Public License 2.0 - which is available at https://www.eclipse.org/legal/epl-2.0/ - - SPDX-License-Identifier: EPL-2.0 ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.eclipse.linuxtools</groupId> - <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> - </parent> - - <groupId>org.eclipse.linuxtools.oprofile</groupId> - <artifactId>linuxtools-oprofile-parent</artifactId> - <packaging>pom</packaging> - - <name>Linux Tools OProfile Parent</name> - - <modules> - <module>org.eclipse.linuxtools.oprofile.core</module> - <module>org.eclipse.linuxtools.oprofile.core.tests</module> - <module>org.eclipse.linuxtools.oprofile.doc</module> - <module>org.eclipse.linuxtools.oprofile-feature</module> - <module>org.eclipse.linuxtools.oprofile.remote-feature</module> - <module>org.eclipse.linuxtools.oprofile.launch</module> - <module>org.eclipse.linuxtools.oprofile.remote.launch</module> - <module>org.eclipse.linuxtools.oprofile.launch.tests</module> - <module>org.eclipse.linuxtools.oprofile.tests</module> - <module>org.eclipse.linuxtools.oprofile.ui</module> - <module>org.eclipse.linuxtools.oprofile.ui.tests</module> - </modules> - -</project> diff --git a/perf/org.eclipse.linuxtools.perf-feature/feature.xml b/perf/org.eclipse.linuxtools.perf-feature/feature.xml index 28e2b4ede..b5a218cc2 100644 --- a/perf/org.eclipse.linuxtools.perf-feature/feature.xml +++ b/perf/org.eclipse.linuxtools.perf-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.perf.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%provider" os="linux" license-feature="org.eclipse.license" diff --git a/perf/org.eclipse.linuxtools.perf-feature/pom.xml b/perf/org.eclipse.linuxtools.perf-feature/pom.xml index 1155ca750..1b5272731 100644 --- a/perf/org.eclipse.linuxtools.perf-feature/pom.xml +++ b/perf/org.eclipse.linuxtools.perf-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-perf-parent</artifactId> <groupId>org.eclipse.linuxtools.perf-parent</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.perf.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Perf Integration Feature</name> diff --git a/perf/org.eclipse.linuxtools.perf.doc/pom.xml b/perf/org.eclipse.linuxtools.perf.doc/pom.xml index 083f99d5a..7aa66f1eb 100644 --- a/perf/org.eclipse.linuxtools.perf.doc/pom.xml +++ b/perf/org.eclipse.linuxtools.perf.doc/pom.xml @@ -16,7 +16,7 @@ <parent> <artifactId>linuxtools-perf-parent</artifactId> <groupId>org.eclipse.linuxtools.perf-parent</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.perf.doc</artifactId> diff --git a/perf/org.eclipse.linuxtools.perf.remote-feature/feature.xml b/perf/org.eclipse.linuxtools.perf.remote-feature/feature.xml index 550d3a4c7..9d6a14d3a 100644 --- a/perf/org.eclipse.linuxtools.perf.remote-feature/feature.xml +++ b/perf/org.eclipse.linuxtools.perf.remote-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.perf.remote.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%provider" os="linux" license-feature="org.eclipse.license" diff --git a/perf/org.eclipse.linuxtools.perf.remote-feature/pom.xml b/perf/org.eclipse.linuxtools.perf.remote-feature/pom.xml index ef4a3fea2..74521df3d 100644 --- a/perf/org.eclipse.linuxtools.perf.remote-feature/pom.xml +++ b/perf/org.eclipse.linuxtools.perf.remote-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-perf-parent</artifactId> <groupId>org.eclipse.linuxtools.perf-parent</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.perf.remote.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Remote Perf Integration Feature</name> diff --git a/perf/org.eclipse.linuxtools.perf.swtbot.tests/.classpath b/perf/org.eclipse.linuxtools.perf.swtbot.tests/.classpath index 43b986286..a621c21ac 100644 --- a/perf/org.eclipse.linuxtools.perf.swtbot.tests/.classpath +++ b/perf/org.eclipse.linuxtools.perf.swtbot.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/perf/org.eclipse.linuxtools.perf.swtbot.tests/.settings/org.eclipse.jdt.core.prefs b/perf/org.eclipse.linuxtools.perf.swtbot.tests/.settings/org.eclipse.jdt.core.prefs index 9a0f142d6..624ca8aa1 100644 --- a/perf/org.eclipse.linuxtools.perf.swtbot.tests/.settings/org.eclipse.jdt.core.prefs +++ b/perf/org.eclipse.linuxtools.perf.swtbot.tests/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -97,4 +99,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/perf/org.eclipse.linuxtools.perf.swtbot.tests/META-INF/MANIFEST.MF b/perf/org.eclipse.linuxtools.perf.swtbot.tests/META-INF/MANIFEST.MF index 7d6b69e58..b5577a805 100644 --- a/perf/org.eclipse.linuxtools.perf.swtbot.tests/META-INF/MANIFEST.MF +++ b/perf/org.eclipse.linuxtools.perf.swtbot.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor Bundle-SymbolicName: org.eclipse.linuxtools.perf.swtbot.tests Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.perf diff --git a/perf/org.eclipse.linuxtools.perf.tests/.classpath b/perf/org.eclipse.linuxtools.perf.tests/.classpath index 43b986286..a621c21ac 100644 --- a/perf/org.eclipse.linuxtools.perf.tests/.classpath +++ b/perf/org.eclipse.linuxtools.perf.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/perf/org.eclipse.linuxtools.perf.tests/.settings/org.eclipse.jdt.core.prefs b/perf/org.eclipse.linuxtools.perf.tests/.settings/org.eclipse.jdt.core.prefs index b2f17a8d4..25624d12a 100644 --- a/perf/org.eclipse.linuxtools.perf.tests/.settings/org.eclipse.jdt.core.prefs +++ b/perf/org.eclipse.linuxtools.perf.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/perf/org.eclipse.linuxtools.perf.tests/META-INF/MANIFEST.MF b/perf/org.eclipse.linuxtools.perf.tests/META-INF/MANIFEST.MF index 559dee6e5..9b421ab8e 100644 --- a/perf/org.eclipse.linuxtools.perf.tests/META-INF/MANIFEST.MF +++ b/perf/org.eclipse.linuxtools.perf.tests/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.linuxtools.perf.tests Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Fragment-Host: org.eclipse.linuxtools.perf Require-Bundle: diff --git a/perf/org.eclipse.linuxtools.perf.tests/pom.xml b/perf/org.eclipse.linuxtools.perf.tests/pom.xml index 814874951..165a52d5e 100644 --- a/perf/org.eclipse.linuxtools.perf.tests/pom.xml +++ b/perf/org.eclipse.linuxtools.perf.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-perf-parent</artifactId> <groupId>org.eclipse.linuxtools.perf-parent</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.perf.tests</artifactId> diff --git a/perf/org.eclipse.linuxtools.perf/.classpath b/perf/org.eclipse.linuxtools.perf/.classpath index 43b986286..1db08c6b4 100644 --- a/perf/org.eclipse.linuxtools.perf/.classpath +++ b/perf/org.eclipse.linuxtools.perf/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/perf/org.eclipse.linuxtools.perf/.settings/org.eclipse.jdt.core.prefs b/perf/org.eclipse.linuxtools.perf/.settings/org.eclipse.jdt.core.prefs index 60d805a02..cab8e0287 100644 --- a/perf/org.eclipse.linuxtools.perf/.settings/org.eclipse.jdt.core.prefs +++ b/perf/org.eclipse.linuxtools.perf/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -97,4 +99,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/perf/org.eclipse.linuxtools.perf/META-INF/MANIFEST.MF b/perf/org.eclipse.linuxtools.perf/META-INF/MANIFEST.MF index 4aa324617..ca715ea40 100644 --- a/perf/org.eclipse.linuxtools.perf/META-INF/MANIFEST.MF +++ b/perf/org.eclipse.linuxtools.perf/META-INF/MANIFEST.MF @@ -19,7 +19,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.linuxtools.profiling.ui;bundle-version="0.9.0", org.eclipse.ui.ide, org.eclipse.team.ui;bundle-version="3.7.1" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.compare, org.eclipse.compare.structuremergeviewer, diff --git a/perf/org.eclipse.linuxtools.perf/pom.xml b/perf/org.eclipse.linuxtools.perf/pom.xml index 6b4699767..d8e6d0756 100644 --- a/perf/org.eclipse.linuxtools.perf/pom.xml +++ b/perf/org.eclipse.linuxtools.perf/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-perf-parent</artifactId> <groupId>org.eclipse.linuxtools.perf-parent</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.perf</artifactId> diff --git a/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfCore.java b/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfCore.java index 10b36a489..0697d7e55 100644 --- a/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfCore.java +++ b/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfCore.java @@ -182,7 +182,7 @@ public class PerfCore { try { // Process list of events. Each line is of the form <event>\s+<category>. while (( line = input.readLine()) != null){ - if (line.contains("[")) { //$NON-NLS-1$ + if (line.matches("\\s*\\S+\\s*\\[.*\\]")) { //$NON-NLS-1$ String event; String category; if (line.contains(PerfPlugin.STRINGS_HWBREAKPOINTS)) { diff --git a/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfPlugin.java b/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfPlugin.java index 713f8994d..81339d447 100644 --- a/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfPlugin.java +++ b/perf/org.eclipse.linuxtools.perf/src/org/eclipse/linuxtools/internal/perf/PerfPlugin.java @@ -28,6 +28,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.perf.model.TreeParent; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; @@ -256,7 +257,7 @@ public class PerfPlugin extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } /** diff --git a/perf/pom.xml b/perf/pom.xml index f231984c7..4dae07df6 100644 --- a/perf/pom.xml +++ b/perf/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.perf-parent</groupId> diff --git a/pom.xml b/pom.xml index c852e30d8..7e942bed3 100644 --- a/pom.xml +++ b/pom.xml @@ -17,11 +17,11 @@ <modelVersion>4.0.0</modelVersion> <prerequisites> - <maven>3.3.9</maven> + <maven>3.6.3</maven> </prerequisites> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> <packaging>pom</packaging> <name>Eclipse Linux Tools Parent</name> @@ -48,12 +48,11 @@ </distributionManagement> <properties> - <mirror-repo-name>update-7.4.0</mirror-repo-name> - <mirror-docker-repo-name>update-docker-4.4.0</mirror-docker-repo-name> - <mirror-mylyn-repo-name>updates-mylyn-2.4.0</mirror-mylyn-repo-name> - <tycho-version>1.4.0</tycho-version> - <tycho-extras-version>1.4.0</tycho-extras-version> - <target-platform>linuxtools-e4.13</target-platform> + <mirror-repo-name>update-8.1.0</mirror-repo-name> + <mirror-docker-repo-name>update-docker-5.1.0</mirror-docker-repo-name> + <mirror-mylyn-repo-name>update-mylyn-3.1.0</mirror-mylyn-repo-name> + <tycho-version>2.1.0</tycho-version> + <target-platform>linuxtools-e4.18</target-platform> <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin> <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> <sonar.jacoco.reportPath>${project.basedir}/../../target/jacoco.exec</sonar.jacoco.reportPath> @@ -118,12 +117,12 @@ <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> - <version>3.3.0.603</version> + <version>3.7.0.1746</version> </plugin> <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-pack200b-plugin</artifactId> - <version>${tycho-extras-version}</version> + <version>${tycho-version}</version> <executions> <execution> <id>pack200-pack</id> @@ -269,7 +268,7 @@ <dependency> <groupId>org.eclipse.mylyn.docs</groupId> <artifactId>org.eclipse.mylyn.wikitext.mediawiki.ant</artifactId> - <version>3.0.33</version> + <version>3.0.38</version> </dependency> </dependencies> </plugin> @@ -288,7 +287,6 @@ <module>libhover</module> <module>javadocs</module> <module>man</module> - <module>oprofile</module> <module>perf</module> <module>rpm</module> <module>systemtap</module> @@ -338,7 +336,7 @@ <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-source-feature-plugin</artifactId> - <version>${tycho-extras-version}</version> + <version>${tycho-version}</version> <configuration> <includeBinaryFeature>false</includeBinaryFeature> </configuration> @@ -368,7 +366,7 @@ <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> - <version>0.8.4</version> + <version>0.8.5</version> <executions> <execution> <id>pre-test</id> @@ -444,22 +442,22 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> - <version>1.8</version> + <version>3.0.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> - <version>3.8.2</version> + <version>3.9.1</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> - <version>3.0.0</version> + <version>3.1.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> - <version>3.1.1</version> + <version>3.2.0</version> <configuration> <excludePackageNames>org.eclipse.linuxtools.internal.*:*.test*:org.eclipse.linuxtools.docker.reddeer*</excludePackageNames> </configuration> diff --git a/profiling/org.eclipse.linuxtools.binutils/.classpath b/profiling/org.eclipse.linuxtools.binutils/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.binutils/.classpath +++ b/profiling/org.eclipse.linuxtools.binutils/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.core.prefs index a2ad975f8..02a000188 100644 --- a/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -111,4 +113,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.ui.prefs b/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.ui.prefs similarity index 84% rename from oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.ui.prefs rename to profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.ui.prefs index 0dd4c10d8..690dcacd3 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.core/.settings/org.eclipse.jdt.ui.prefs +++ b/profiling/org.eclipse.linuxtools.binutils/.settings/org.eclipse.jdt.ui.prefs @@ -13,11 +13,11 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false +sp_cleanup.format_source_code_changes_only=true sp_cleanup.insert_inferred_type_arguments=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false @@ -28,16 +28,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_type_arguments=false -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=true @@ -49,12 +53,13 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_lambda=false +sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true -sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false diff --git a/profiling/org.eclipse.linuxtools.binutils/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.binutils/META-INF/MANIFEST.MF index 1bd00fc18..4f7449d3a 100644 --- a/profiling/org.eclipse.linuxtools.binutils/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.binutils/META-INF/MANIFEST.MF @@ -19,6 +19,6 @@ Require-Bundle: org.eclipse.ui, Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.binutils.link2source, org.eclipse.linuxtools.binutils.utils -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Automatic-Module-Name: org.eclipse.linuxtools.binutils diff --git a/profiling/org.eclipse.linuxtools.binutils/pom.xml b/profiling/org.eclipse.linuxtools.binutils/pom.xml index f752b734d..5295b5eab 100644 --- a/profiling/org.eclipse.linuxtools.binutils/pom.xml +++ b/profiling/org.eclipse.linuxtools.binutils/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.binutils</artifactId> diff --git a/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STCSourceNotFoundEditorInput.java b/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STCSourceNotFoundEditorInput.java index f05a6a70c..b613fcd75 100644 --- a/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STCSourceNotFoundEditorInput.java +++ b/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STCSourceNotFoundEditorInput.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,10 +15,10 @@ package org.eclipse.linuxtools.binutils.link2source; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.Activator; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * Editor Input used for source not found @@ -49,7 +49,7 @@ public class STCSourceNotFoundEditorInput implements IEditorInput { @Override public ImageDescriptor getImageDescriptor() { - return AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/c_file_obj.gif"); //$NON-NLS-1$ + return ResourceLocator.imageDescriptorFromBundle(Activator.PLUGIN_ID, "icons/c_file_obj.gif").get(); //$NON-NLS-1$ } @Override diff --git a/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STLink2SourceSupport.java b/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STLink2SourceSupport.java index 15c41a46f..8b6a5bcfe 100644 --- a/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STLink2SourceSupport.java +++ b/profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/link2source/STLink2SourceSupport.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * Copyright (c) 2009, 2019 STMicroelectronics and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -66,16 +66,15 @@ public final class STLink2SourceSupport { } /** - * Open a C Editor at the given location. - * - * @param binaryLoc A path to a binary file. - * @param sourceLoc The location of the source file. - * @param lineNumber The line to open at. - * @return <code>true</code> if the link-to-source was successful, <code>false</code> otherwise - */ + * Open a C Editor at the given location. + * + * @param binaryLoc A path to a binary file. + * @param sourceLoc The location of the source file. + * @param lineNumber The line to open at. + * @return <code>true</code> if the link-to-source was successful, + * <code>false</code> otherwise + */ private static boolean openSourceFileAtLocation(IPath binaryLoc, IPath sourceLoc, int lineNumber) { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - //FIXME EK-LINUXTOOLS: IFile binary = root.getFileForLocation(binaryLoc); IFile binary = STSymbolManager.sharedInstance.findFileFromPath(binaryLoc); IProject project = null; if (binary != null) { @@ -237,7 +236,7 @@ public final class STLink2SourceSupport { public IResource getResource() { return resource; } - + @Override public boolean visit(IResourceProxy proxy) { // To correctly find a file in a linked directory, we cannot just look at the isLinked() attribute @@ -255,7 +254,7 @@ public final class STLink2SourceSupport { } } - + private static IFile getFileForPathImpl(IPath path, IProject project) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); if (path.isAbsolute()) { @@ -294,7 +293,7 @@ public final class STLink2SourceSupport { } } } - + // no match found...try and see if we are dealing with a link IPath realPath = project.getLocation().append(path).makeAbsolute(); URI realURI = URIUtil.toURI(realPath.toString()); diff --git a/profiling/org.eclipse.linuxtools.dataviewers-feature/feature.xml b/profiling/org.eclipse.linuxtools.dataviewers-feature/feature.xml index 49eb12bb7..c80a48113 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers-feature/feature.xml +++ b/profiling/org.eclipse.linuxtools.dataviewers-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.dataviewers.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> @@ -35,8 +35,7 @@ <import plugin="org.eclipse.cdt.ui"/> <import plugin="org.eclipse.cdt.core"/> <import plugin="org.eclipse.core.resources" version="3.4.2" match="greaterOrEqual"/> - <import plugin="com.ibm.icu"/> - <import plugin="org.swtchart"/> + <import plugin="org.eclipse.swtchart"/> </requires> <plugin diff --git a/profiling/org.eclipse.linuxtools.dataviewers-feature/pom.xml b/profiling/org.eclipse.linuxtools.dataviewers-feature/pom.xml index 0c989f768..1ecd052b3 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers-feature/pom.xml +++ b/profiling/org.eclipse.linuxtools.dataviewers-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.dataviewers.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Dataviewers Feature</name> diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/.classpath b/profiling/org.eclipse.linuxtools.dataviewers.charts/.classpath index 43b986286..1db08c6b4 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/.classpath +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.core.prefs index fcac9d2a7..44fccc8cb 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -79,6 +80,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.ui.prefs b/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 000000000..ea88167dd --- /dev/null +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,72 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=true +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=true +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.dataviewers.charts/META-INF/MANIFEST.MF index d75627384..b268386aa 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/META-INF/MANIFEST.MF @@ -2,17 +2,19 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.dataviewers.charts;singleton:=true -Bundle-Version: 6.0.0.qualifier +Bundle-Version: 7.0.0.qualifier Bundle-Activator: org.eclipse.linuxtools.internal.dataviewers.charts.Activator Bundle-Vendor: %bundleProvider Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.linuxtools.dataviewers;bundle-version="4.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.dataviewers.charts.actions, org.eclipse.linuxtools.dataviewers.charts.provider Import-Package: org.eclipse.linuxtools.dataviewers.piechart, - org.swtchart + org.eclipse.linuxtools.internal.dataviewers.piechart, + org.eclipse.swtchart, + org.eclipse.swtchart.extensions.charts Bundle-Localization: plugin Automatic-Module-Name: org.eclipse.linuxtools.dataviewers.charts diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/pom.xml b/profiling/org.eclipse.linuxtools.dataviewers.charts/pom.xml index ee138686d..f8db8a1d8 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/pom.xml +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/pom.xml @@ -15,11 +15,11 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.dataviewers.charts</artifactId> - <version>6.0.0-SNAPSHOT</version> + <version>7.0.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> <name>Linux Tools Data Viewers Charts Plug-in</name> diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/ChartAction.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/ChartAction.java index 0bc979ef8..c1fe9793f 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/ChartAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/ChartAction.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -13,23 +13,25 @@ package org.eclipse.linuxtools.dataviewers.charts.actions; import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.Dialog; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.internal.dataviewers.charts.Activator; import org.eclipse.linuxtools.internal.dataviewers.charts.Messages; -import org.eclipse.linuxtools.internal.dataviewers.charts.dialogs.ChartDialog; +import org.eclipse.linuxtools.internal.dataviewers.charts.dialogs.ChartDialog2; import org.eclipse.linuxtools.internal.dataviewers.charts.view.ChartView; import org.eclipse.swt.widgets.Shell; -import org.swtchart.Chart; /** * An action that open a chart dialog from an <code>AbstractSTViewer</code>. * * @see AbstractSTViewer + * @deprecated Functionality to be moved to Eclipse.org SWTChart project. */ +@Deprecated public class ChartAction extends Action { /** The dialog */ - private final ChartDialog dialog; + private final Dialog dialog; /** * The constructor. @@ -41,7 +43,7 @@ public class ChartAction extends Action { */ public ChartAction(Shell shell, AbstractSTViewer viewer) { super(Messages.ChartConstants_CREATE_CHART, Activator.getImageDescriptor("icons/chart_icon.png")); //$NON-NLS-1$ - dialog = new ChartDialog(shell, viewer); + dialog = new ChartDialog2(shell, viewer); setEnabled(!viewer.getViewer().getSelection().isEmpty()); viewer.getViewer().addSelectionChangedListener(event -> setEnabled(!event.getSelection().isEmpty())); } @@ -49,10 +51,6 @@ public class ChartAction extends Action { @Override public void run() { dialog.open(); - Chart chart = dialog.getValue(); - if (chart != null) { - ChartView.createChartView(chart); - - } + ChartView.createChartView(); } } diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/SaveChartAction.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/SaveChartAction.java deleted file mode 100755 index 3e9d85001..000000000 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/actions/SaveChartAction.java +++ /dev/null @@ -1,228 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014, 2018 Red Hat, Inc. and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation - * Red Hat (various) - ongoing maintenance - *******************************************************************************/ -package org.eclipse.linuxtools.dataviewers.charts.actions; - -import java.io.File; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.linuxtools.internal.dataviewers.charts.Activator; -import org.eclipse.linuxtools.internal.dataviewers.charts.Messages; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.ImageLoader; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; -import org.swtchart.Chart; - -/** - * An action to save any {@link Composite} (typically a {@link Chart}) as an image (jpeg/jpg, bmp, png). - * - * @since 6.0 - */ -public class SaveChartAction extends Action { - - private static final String[] EXTENSIONS = - { "*.png", "*.bmp", "*.jpg", "*.jpeg", "*.*" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - private static final String DEFAULT_EXT = "png"; //$NON-NLS-1$ - private static final String DEFAULT_TITLE = "newChart"; //$NON-NLS-1$ - private static final Map<String, Integer> EXTENSION_MAP = new HashMap<>(); - - private Composite contents = null; - private String title = null; - - static { - EXTENSION_MAP.put("png", SWT.IMAGE_PNG); //$NON-NLS-1$ - EXTENSION_MAP.put("bmp", SWT.IMAGE_BMP); //$NON-NLS-1$ - EXTENSION_MAP.put("jpeg", SWT.IMAGE_JPEG); //$NON-NLS-1$ - EXTENSION_MAP.put("jpg", SWT.IMAGE_JPEG); //$NON-NLS-1$ - } - - public SaveChartAction() { - super(Messages.ChartConstants_SAVE_CHART_AS, Activator.getImageDescriptor("icons/chart-save.png")); //$NON-NLS-1$ - this.setEnabled(false); - } - - /** - * Sets the image plugin on the contents and enables the action if contents are not null. - * Also, a default title for the file to be saved is generated. - * @param contents The image contents to be saved. - */ - public void setChart(Composite contents) { - setChart(contents, null); - } - - /** - * The same as {@link #setChart(Composite)}, but allows specification of a custom default - * title for the image file to be saved. - * @param contents The image contents to be saved. - * @param title The default title of the image file when it is saved. Set this to <code>null</code> - * if a title should be generated from the {@link #contents}. - */ - public void setChart(Composite contents, String title) { - this.contents = contents; - if (contents != null) { - this.title = title != null ? title : getDefaultName(); - setEnabled(true); - } else { - setEnabled(false); - } - } - - private String getDefaultName() { - if (contents instanceof Chart) { - return ((Chart) contents).getTitle().getText().replaceAll(" ", "_"); //$NON-NLS-1$ //$NON-NLS-2$ - } else { - return DEFAULT_TITLE; - } - } - - /** - * Open a dialog with which to save the contents at a user-specified path. - */ - @Override - public void run() { - if (problemExists()) { - return; - } - File file = askForAndPrepareFile(); - if (file == null) { - return; // Cancelled - } - generateImageFile(file); - } - - /** - * Save the previously-set contents as an image without the need for user input. - * @param path The path to save the image to. - */ - public void run(String path) { - if (problemExists()) { - return; - } - File file = new File(makePathWithVerifiedExt(path)); - if (shouldOverwrite(file, null)) { - generateImageFile(new File(path)); - } - } - - private boolean problemExists() { - IStatus status = null; - if (!isEnabled()) { - status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, - Messages.ChartConstants_ERROR_CHART_CLOSED); - } else if (contents.isDisposed()) { - status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, - Messages.ChartConstants_ERROR_CHART_DISPOSED); - } - - if (status != null) { - ErrorDialog.openError(getWorkbenchShell(), - Messages.ChartConstants_ERROR_SAVING_CHART, - Messages.ChartConstants_ERROR_SAVING_CHART_MESSAGE, status); - return true; - } - return false; - } - - /** - * Ask the user for the path to save the file at, and check if this path overwrites any existing file. - * (Note that using dialog.setOverwrite(true) is insufficient, as the path name may be appended with a - * file extension after the standard overwrite checks occur.) - * @return A file with the specified pathname, appended with an appropriate extension. - */ - private File askForAndPrepareFile() { - final Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - final FileDialog dialog = new FileDialog(shell, SWT.SAVE); - dialog.setFilterExtensions(EXTENSIONS); - dialog.setText(Messages.ChartConstants_SAVE_CHART_DIALOG_TEXT); - dialog.setFileName(title); - - do { - String path = dialog.open(); - if (path == null) { - return null; // Cancelled - } - - path = makePathWithVerifiedExt(path); - - File file = new File(path); - if (shouldOverwrite(file, shell)) { - return file; - } - // If not overwriting, bring up dialog again (loop) - dialog.setFileName(file.getName()); - } while (true); - } - - private boolean shouldOverwrite(File file, Shell shell) { - if (!file.exists()) { - return true; - } - if (MessageDialog.openQuestion(shell != null ? shell : - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - Messages.ChartConstants_CONFIRM_OVERWRITE_TITLE, - MessageFormat.format(Messages.ChartConstants_CONFIRM_OVERWRITE_MSG, file))) { - file.delete(); - return true; - } - return false; - } - - /** - * Checks if the provided path has a valid file extension supported by {@link ImageLoader#save(String, int)}. - * If not, a copy of the path is returned, with its extension replaced with a default one. - */ - private String makePathWithVerifiedExt(String path) { - String pathExt = Path.fromOSString(path).getFileExtension(); - if (pathExt == null) { - return path.concat('.' + DEFAULT_EXT); - } - if (EXTENSION_MAP.containsKey(pathExt)) { - return path; - } - return path.replaceAll(pathExt.concat("$"), DEFAULT_EXT); //$NON-NLS-1$ - } - - private void generateImageFile(File file) { - // Extension is chosen based on the file name, not the dialog filter selection. - int extension = EXTENSION_MAP.get(Path.fromOSString(file.getName()).getFileExtension()); - - Display dsp = Display.getCurrent(); - GC gc = new GC(contents); - Image img = new Image(dsp, contents.getSize().x, contents.getSize().y); - gc.copyArea(img, 0, 0); - gc.dispose(); - ImageLoader imageLoader = new ImageLoader(); - imageLoader.data = new ImageData[] { img.getImageData() }; - imageLoader.save(file.getAbsolutePath(), extension); - } - - private Shell getWorkbenchShell() { - return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - } - -} diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/IChartField.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/IChartField.java index 20918970e..38e2e28d8 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/IChartField.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/IChartField.java @@ -16,7 +16,9 @@ import org.eclipse.linuxtools.dataviewers.abstractviewers.ISTDataViewersField; /** * The interface used by the charts to get a <code>Number</code> data from a field. + * */ +@Deprecated public interface IChartField extends ISTDataViewersField { /** diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/Activator.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/Activator.java index 9d1cba282..478c2d847 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/Activator.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/Activator.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.internal.dataviewers.charts; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -57,7 +58,7 @@ public class Activator extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } /** diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog2.java old mode 100755 new mode 100644 similarity index 97% rename from profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog.java rename to profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog2.java index b344d3a97..a009c8637 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/dialogs/ChartDialog2.java @@ -23,10 +23,10 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.ISTDataViewersField; -import org.eclipse.linuxtools.dataviewers.charts.provider.ChartFactory; import org.eclipse.linuxtools.dataviewers.charts.provider.IChartField; import org.eclipse.linuxtools.internal.dataviewers.charts.Activator; import org.eclipse.linuxtools.internal.dataviewers.charts.Messages; +import org.eclipse.linuxtools.internal.dataviewers.charts.view.ChartFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -41,12 +41,12 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; -import org.swtchart.Chart; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; /** * The dialog used to customize the chart before creating it. */ -public class ChartDialog extends Dialog { +public class ChartDialog2 extends Dialog { /** The section name of the viewer's dialog settings where the chart dialog save its state */ private static final String TAG_SECTION_CHARTS_STATE = "charts_section"; //$NON-NLS-1$ @@ -68,7 +68,7 @@ public class ChartDialog extends Dialog { private static final boolean DEFAULT_VERTICAL_BARS_BUTTON = false; private final AbstractSTViewer stViewer; - private Chart chart; + private InteractiveChart chart; private Text errorMessageText; private Button verticalBarsButton; @@ -83,7 +83,7 @@ public class ChartDialog extends Dialog { * @param shell Parent shell. * @param stViewer The viewer this dialog fetch data from. */ - public ChartDialog(Shell shell, AbstractSTViewer stViewer) { + public ChartDialog2(Shell shell, AbstractSTViewer stViewer) { super(shell); this.stViewer = stViewer; } @@ -304,7 +304,7 @@ public class ChartDialog extends Dialog { * * @return the chart */ - public Chart getValue() { + public InteractiveChart getValue() { return chart; } @@ -356,7 +356,7 @@ public class ChartDialog extends Dialog { * * @return a new chart */ - private Chart produceChart() { + private InteractiveChart produceChart() { IStructuredSelection selection = stViewer.getViewer().getStructuredSelection(); if (selection == StructuredSelection.EMPTY) return null; diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/ChartFactory.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartFactory.java similarity index 88% rename from profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/ChartFactory.java rename to profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartFactory.java index e304cbf38..028d50713 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/provider/ChartFactory.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartFactory.java @@ -10,29 +10,30 @@ * Contributors: * Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation *******************************************************************************/ -package org.eclipse.linuxtools.dataviewers.charts.provider; +package org.eclipse.linuxtools.internal.dataviewers.charts.view; import java.util.List; import org.eclipse.linuxtools.dataviewers.abstractviewers.ISTDataViewersField; -import org.eclipse.linuxtools.dataviewers.piechart.PieChart; +import org.eclipse.linuxtools.dataviewers.charts.provider.IChartField; import org.eclipse.linuxtools.internal.dataviewers.charts.Activator; -import org.eclipse.linuxtools.internal.dataviewers.charts.view.ChartView; +import org.eclipse.linuxtools.internal.dataviewers.piechart.PieChart; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.IBarSeries; +import org.eclipse.swtchart.ISeries.SeriesType; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.LineStyle; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; -import org.swtchart.Chart; -import org.swtchart.IAxis; -import org.swtchart.IBarSeries; -import org.swtchart.ISeries.SeriesType; -import org.swtchart.ITitle; -import org.swtchart.LineStyle; /** * A utility class that handles the charts creation (pie chart and bar chart) + * */ public final class ChartFactory { @@ -50,7 +51,7 @@ public final class ChartFactory { * @param title Title of the chart. * @return a new pie chart */ - public static Chart producePieChart(Object[] objects, ISTDataViewersField nameField, + public static InteractiveChart producePieChart(Object[] objects, ISTDataViewersField nameField, List<IChartField> valFields, String title) { ChartView view; @@ -64,7 +65,7 @@ public final class ChartFactory { PieChart chart = new PieChart(view.getParent(), SWT.NONE); chart.setBackground(WHITE); - chart.setBackgroundInPlotArea(GRAD); + chart.getPlotArea().setBackground(GRAD); chart.getTitle().setText(title); chart.getTitle().setForeground(BLACK); @@ -115,7 +116,7 @@ public final class ChartFactory { * @return a new 2D bar chart */ - public static Chart produceBarChart(Object[] objects, final ISTDataViewersField nameField, + public static InteractiveChart produceBarChart(Object[] objects, final ISTDataViewersField nameField, List<IChartField> valFields, String title, boolean horizontal) { ChartView view; try { @@ -125,13 +126,14 @@ public final class ChartFactory { view = (ChartView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .showView(ChartView.VIEW_ID, String.valueOf(ChartView.getSecId()), IWorkbenchPage.VIEW_ACTIVATE); - Chart chart = new Chart(view.getParent(), SWT.NONE); + InteractiveChart chart = new InteractiveChart(view.getParent(), SWT.NONE); chart.setBackground(WHITE); - chart.setBackgroundInPlotArea(GRAD); + chart.getPlotArea().setBackground(GRAD); chart.getTitle().setText(title); chart.getTitle().setForeground(BLACK); + chart.setProposedSaveAsFilename(title.replace(' ', '_')); // this is correct (refers to orientation of x-axis, not bars) if (horizontal) { diff --git a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartView.java b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartView.java index 6389c3fd8..29c557818 100755 --- a/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartView.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/internal/dataviewers/charts/view/ChartView.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 STMicroelectronics and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,16 +15,12 @@ package org.eclipse.linuxtools.internal.dataviewers.charts.view; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.linuxtools.dataviewers.charts.actions.SaveChartAction; import org.eclipse.linuxtools.internal.dataviewers.charts.Activator; import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; -import org.swtchart.Chart; /** * The chart view. @@ -47,8 +43,6 @@ public class ChartView extends ViewPart { private Composite parent; - private SaveChartAction saveChartAction; - /** * Create and open a new chart view <br/> * <br/> @@ -56,15 +50,13 @@ public class ChartView extends ViewPart { * thread execution is synchronized on internal Integer SEC_ID which is the secondary id of the chart view. Each new * chart view has a secondary id equal to SEC_ID++. * - * @param chart The chart to create view for. */ - public static void createChartView(final Chart chart) { + public static void createChartView() { PlatformUI.getWorkbench().getDisplay().syncExec(() -> { try { synchronized (lock) { - ChartView view = (ChartView) PlatformUI.getWorkbench().getActiveWorkbenchWindow() + PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getActivePage().showView(VIEW_ID, String.valueOf(SEC_ID++), IWorkbenchPage.VIEW_ACTIVATE); - view.setChart(chart); } } catch (PartInitException e) { @@ -78,18 +70,6 @@ public class ChartView extends ViewPart { @Override public void createPartControl(Composite parent) { this.parent = parent; - createActions(); - IActionBars actionBars = getViewSite().getActionBars(); - initToolBar(actionBars.getToolBarManager()); - } - - private void createActions() { - saveChartAction = new SaveChartAction(); - } - - protected void initToolBar(IToolBarManager manager) { - manager.add(saveChartAction); - manager.update(true); } @Override @@ -99,15 +79,6 @@ public class ChartView extends ViewPart { } } - /** - * Set the chart in this view - * - * @param chart - */ - private void setChart(Chart chart) { - saveChartAction.setChart(chart); - } - public Composite getParent() { return parent; } diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/.classpath b/profiling/org.eclipse.linuxtools.dataviewers.piechart/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/.classpath +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.dataviewers.piechart/.settings/org.eclipse.jdt.core.prefs index c6519a5b6..9d8a94bc9 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -19,6 +19,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -75,6 +76,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -106,4 +108,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.dataviewers.piechart/META-INF/MANIFEST.MF index 2a7436f46..d61033c44 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/META-INF/MANIFEST.MF @@ -2,12 +2,13 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.linuxtools.dataviewers.piechart -Bundle-Version: 2.0.1.qualifier +Bundle-Version: 3.0.0.qualifier Bundle-Vendor: %bundleProvider Bundle-Localization: plugin Require-Bundle: org.eclipse.ui, - org.swtchart -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 + org.eclipse.swtchart +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.linuxtools.dataviewers.piechart +Export-Package: org.eclipse.linuxtools.dataviewers.piechart, org.eclipse.linuxtools.internal.dataviewers.piechart;x-internal:=true Automatic-Module-Name: org.eclipse.linuxtools.dataviewers.piechart +Import-Package: org.eclipse.swtchart.extensions.charts diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/pom.xml b/profiling/org.eclipse.linuxtools.dataviewers.piechart/pom.xml index 3f4356fb1..45bd15d8b 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/pom.xml +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/pom.xml @@ -15,11 +15,11 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.dataviewers.piechart</artifactId> - <version>2.0.1-SNAPSHOT</version> + <version>3.0.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> <name>Linux Tools PieChart plug-in</name> diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChart.java similarity index 92% rename from profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java rename to profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChart.java index 4ae832feb..814325b50 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChart.java @@ -10,23 +10,24 @@ * Contributors: * IBM Corporation - Renato Stoffalette Joao <rsjoao@br.ibm.com> *******************************************************************************/ -package org.eclipse.linuxtools.dataviewers.piechart; +package org.eclipse.linuxtools.internal.dataviewers.piechart; import java.util.ArrayList; import java.util.List; +import org.eclipse.linuxtools.dataviewers.piechart.IColorsConstants; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.swtchart.Chart; -import org.swtchart.IAxis; -import org.swtchart.IBarSeries; -import org.swtchart.ISeries; -import org.swtchart.ITitle; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.IBarSeries; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; -public class PieChart extends Chart { +public class PieChart extends InteractiveChart { protected List<RGB> colorList = new ArrayList<>(); private Color[] customColors = null; @@ -38,7 +39,7 @@ public class PieChart extends Chart { for (IAxis axis : getAxisSet().getAxes()) { axis.getTitle().setVisible(false); } - getPlotArea().setVisible(false); + getPlotArea().getControl().setVisible(false); // Make the title draw after the pie-chart itself so we can modify the title // to center over the pie-chart area ITitle title = getTitle(); @@ -61,7 +62,7 @@ public class PieChart extends Chart { @Override public void addPaintListener(PaintListener listener) { - if (!listener.getClass().getName().startsWith("org.swtchart.internal.axis")) { //$NON-NLS-1$ + if (!listener.getClass().getName().startsWith("org.eclipse.swtchart.internal.axis")) { //$NON-NLS-1$ super.addPaintListener(listener); } } diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChartPaintListener.java similarity index 97% rename from profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java rename to profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChartPaintListener.java index b47f787eb..09e4ae637 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/internal/dataviewers/piechart/PieChartPaintListener.java @@ -10,7 +10,7 @@ * Contributors: * IBM Corporation - Renato Stoffalette Joao <rsjoao@br.ibm.com> *******************************************************************************/ -package org.eclipse.linuxtools.dataviewers.piechart; +package org.eclipse.linuxtools.internal.dataviewers.piechart; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; @@ -22,10 +22,10 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.swtchart.IBarSeries; -import org.swtchart.ISeries; -import org.swtchart.ITitle; -import org.swtchart.Range; +import org.eclipse.swtchart.IBarSeries; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.Range; public class PieChartPaintListener implements PaintListener { @@ -53,7 +53,7 @@ public class PieChartPaintListener implements PaintListener { */ public PieChartPaintListener(PieChart chart) { this.chart = chart; - this.plotArea = chart.getPlotArea(); + this.plotArea = chart.getPlotArea().getControl(); } @Override diff --git a/profiling/org.eclipse.linuxtools.dataviewers/.classpath b/profiling/org.eclipse.linuxtools.dataviewers/.classpath index 18afde316..bad53d2e5 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/.classpath +++ b/profiling/org.eclipse.linuxtools.dataviewers/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"> <accessrules> <accessrule kind="accessible" pattern="*"/> diff --git a/profiling/org.eclipse.linuxtools.dataviewers/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.dataviewers/.settings/org.eclipse.jdt.core.prefs index c49b94164..f40c3ed16 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.dataviewers/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -111,4 +113,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.dataviewers/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.dataviewers/META-INF/MANIFEST.MF index 96ebfa0bb..6fedb465c 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.dataviewers/META-INF/MANIFEST.MF @@ -17,6 +17,6 @@ Export-Package: org.eclipse.linuxtools.dataviewers, org.eclipse.linuxtools.dataviewers.actions, org.eclipse.linuxtools.dataviewers.dialogs, org.eclipse.linuxtools.dataviewers.listeners -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Automatic-Module-Name: org.eclipse.linuxtools.dataviewers diff --git a/profiling/org.eclipse.linuxtools.dataviewers/pom.xml b/profiling/org.eclipse.linuxtools.dataviewers/pom.xml index 6bf976b18..fc0063cd8 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/pom.xml +++ b/profiling/org.eclipse.linuxtools.dataviewers/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.dataviewers</artifactId> diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseAllTreeAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseAllTreeAction.java index 2aee7a723..576d7a671 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseAllTreeAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseAllTreeAction.java @@ -13,10 +13,10 @@ package org.eclipse.linuxtools.dataviewers.actions; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTTreeViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action collapse all the tree @@ -33,10 +33,9 @@ public class STCollapseAllTreeAction extends Action { * the stViewer to collapse */ public STCollapseAllTreeAction(AbstractSTTreeViewer stViewer) { - super(STDataViewersMessages.collapseAllAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/collapse_all.gif")); //$NON-NLS-1$ - this.stViewer = stViewer; + super(STDataViewersMessages.collapseAllAction_title, ResourceLocator + .imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/collapse_all.gif").get()); //$NON-NLS-1$ + this.stViewer = stViewer; } @Override diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseSelectionAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseSelectionAction.java index 933825996..b9fc0a6b0 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseSelectionAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STCollapseSelectionAction.java @@ -15,13 +15,13 @@ package org.eclipse.linuxtools.dataviewers.actions; import java.util.Iterator; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTTreeViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action collapse the selected items of the tree @@ -38,9 +38,8 @@ public class STCollapseSelectionAction extends Action { * the stViewer to collapse */ public STCollapseSelectionAction(AbstractSTTreeViewer stViewer) { - super(STDataViewersMessages.collapseSelectionAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/collapse_all.gif")); //$NON-NLS-1$ + super(STDataViewersMessages.collapseSelectionAction_title, ResourceLocator + .imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/collapse_all.gif").get()); //$NON-NLS-1$ this.stViewer = stViewer; } diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STDataViewersSortAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STDataViewersSortAction.java index 0abcafba7..0f0713d8d 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STDataViewersSortAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STDataViewersSortAction.java @@ -13,13 +13,13 @@ package org.eclipse.linuxtools.dataviewers.actions; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.window.Window; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; import org.eclipse.linuxtools.dataviewers.dialogs.STDataViewersSortDialog; import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action allows the user to sort the data in the viewer @@ -36,9 +36,8 @@ public class STDataViewersSortAction extends Action { * @param stViewer The AbstractSTViewer to create the action for. */ public STDataViewersSortAction(AbstractSTViewer stViewer) { - super(STDataViewersMessages.sortAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/sort.gif")); //$NON-NLS-1$ + super(STDataViewersMessages.sortAction_title, + ResourceLocator.imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/sort.gif").get()); //$NON-NLS-1$ super.setToolTipText(STDataViewersMessages.sortAction_tooltip); this.stViewer = stViewer; diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandAllTreeAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandAllTreeAction.java index aa459b67e..3c2226359 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandAllTreeAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandAllTreeAction.java @@ -13,10 +13,10 @@ package org.eclipse.linuxtools.dataviewers.actions; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTTreeViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action expands all the tree @@ -33,10 +33,9 @@ public class STExpandAllTreeAction extends Action { * the stViewer to expand */ public STExpandAllTreeAction(AbstractSTTreeViewer stViewer) { - super(STDataViewersMessages.expandAllAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/expand_all.gif")); //$NON-NLS-1$ - this.stViewer = stViewer; + super(STDataViewersMessages.expandAllAction_title, ResourceLocator + .imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/expand_all.gif").get()); //$NON-NLS-1$ + this.stViewer = stViewer; } @Override diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandSelectionAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandSelectionAction.java index 34a04600b..15601b2ca 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandSelectionAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExpandSelectionAction.java @@ -15,13 +15,13 @@ package org.eclipse.linuxtools.dataviewers.actions; import java.util.Iterator; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTTreeViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action expands the selected items of the tree @@ -38,9 +38,8 @@ public class STExpandSelectionAction extends Action { * the stViewer to expand */ public STExpandSelectionAction(AbstractSTTreeViewer stViewer) { - super(STDataViewersMessages.expandSelectionAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/expand_all.gif")); //$NON-NLS-1$ + super(STDataViewersMessages.expandSelectionAction_title, ResourceLocator + .imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/expand_all.gif").get()); //$NON-NLS-1$ this.stViewer = stViewer; } diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExportToCSVAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExportToCSVAction.java index 6614c25d4..fd03092b1 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExportToCSVAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STExportToCSVAction.java @@ -17,13 +17,13 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.window.Window; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersCSVExporter; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; import org.eclipse.linuxtools.dataviewers.dialogs.STDataViewersExportToCSVDialog; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action export the STViewers data to CSV format file @@ -47,9 +47,8 @@ public class STExportToCSVAction extends Action { * the stViewer to export */ public STExportToCSVAction(AbstractSTViewer stViewer) { - super(STDataViewersMessages.exportToCSVAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/export.gif")); //$NON-NLS-1$ + super(STDataViewersMessages.exportToCSVAction_title, + ResourceLocator.imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/export.gif").get()); //$NON-NLS-1$ this.stViewer = stViewer; this.exporter = new STDataViewersCSVExporter(stViewer); diff --git a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STHideShowColAction.java b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STHideShowColAction.java index a13b07b5d..cebb4f43f 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STHideShowColAction.java +++ b/profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/actions/STHideShowColAction.java @@ -13,12 +13,12 @@ package org.eclipse.linuxtools.dataviewers.actions; import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.window.Window; import org.eclipse.linuxtools.dataviewers.STDataViewersActivator; import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer; import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages; import org.eclipse.linuxtools.dataviewers.dialogs.STDataViewersHideShowColumnsDialog; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This action allows the user to hide/show some columns. @@ -32,12 +32,11 @@ public class STHideShowColAction extends Action { * * @param stViewer The AbstractSTViewer to create the action for. */ - public STHideShowColAction(AbstractSTViewer stViewer) { - super(STDataViewersMessages.hideshowAction_title, - AbstractUIPlugin.imageDescriptorFromPlugin(STDataViewersActivator.PLUGIN_ID, - "icons/prop_edt.gif")); //$NON-NLS-1$ - this.stViewer = stViewer; - setEnabled(true); + public STHideShowColAction(AbstractSTViewer stViewer) { + super(STDataViewersMessages.hideshowAction_title, ResourceLocator + .imageDescriptorFromBundle(STDataViewersActivator.PLUGIN_ID, "icons/prop_edt.gif").get()); //$NON-NLS-1$ + this.stViewer = stViewer; + setEnabled(true); } @Override diff --git a/profiling/org.eclipse.linuxtools.profiling-feature/feature.xml b/profiling/org.eclipse.linuxtools.profiling-feature/feature.xml index 965078983..404fcdb4b 100644 --- a/profiling/org.eclipse.linuxtools.profiling-feature/feature.xml +++ b/profiling/org.eclipse.linuxtools.profiling-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.profiling" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/profiling/org.eclipse.linuxtools.profiling-feature/pom.xml b/profiling/org.eclipse.linuxtools.profiling-feature/pom.xml index d1f504e54..59362706a 100644 --- a/profiling/org.eclipse.linuxtools.profiling-feature/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Profiling Framework Feature</name> diff --git a/profiling/org.eclipse.linuxtools.profiling.docs/pom.xml b/profiling/org.eclipse.linuxtools.profiling.docs/pom.xml index 083726799..5442861d3 100644 --- a/profiling/org.eclipse.linuxtools.profiling.docs/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.docs/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.profiling</groupId> <artifactId>linuxtools-profiling-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.docs</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.classpath b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.settings/org.eclipse.jdt.core.prefs index ef45da681..169586ce8 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -19,6 +19,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -75,6 +76,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -106,4 +108,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/META-INF/MANIFEST.MF index 171fdc64a..3c1b5a7ea 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/META-INF/MANIFEST.MF @@ -11,6 +11,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.remote.core;bundle-version="2.0.0", org.eclipse.remote.ui;bundle-version="2.0.0", org.eclipse.linuxtools.profiling.launch;bundle-version="1.2.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Automatic-Module-Name: org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy diff --git a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/pom.xml b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/pom.xml index 7305dfa33..737d50b57 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy/pom.xml @@ -16,7 +16,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.launch.ui.rdt.proxy</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/.classpath b/profiling/org.eclipse.linuxtools.profiling.launch/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.launch/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.launch/.settings/org.eclipse.jdt.core.prefs index e26ebfbfe..fe1be6217 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.profiling.launch/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -79,6 +80,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.launch/META-INF/MANIFEST.MF index 469d23ffa..5689f1f5a 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.launch/META-INF/MANIFEST.MF @@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.swt;bundle-version="3.106.0", org.eclipse.core.expressions Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.cdt.debug.core, org.eclipse.cdt.ui, org.eclipse.cdt.ui.newui, diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/plugin.xml b/profiling/org.eclipse.linuxtools.profiling.launch/plugin.xml index 974de4555..1f1376af6 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/plugin.xml +++ b/profiling/org.eclipse.linuxtools.profiling.launch/plugin.xml @@ -456,7 +456,7 @@ id="org.eclipse.linuxtools.profiling.launch.profileApplicationLaunch.mainTab" group="org.eclipse.cdt.launch.applicationProfileLaunchTabGroup" name="%MainTab.name" - class="org.eclipse.cdt.launch.ui.CMainTab"> + class="org.eclipse.cdt.launch.ui.CMainTab2"> <associatedDelegate delegate="org.eclipse.linuxtools.profiling.launch.profilingDelegate"/> </tab> <tab diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/pom.xml b/profiling/org.eclipse.linuxtools.profiling.launch/pom.xml index 34248da68..392486203 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.launch/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.launch</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/CProfilingOptionsTab.java b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/CProfilingOptionsTab.java index ed2ab8eb3..dc85e184f 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/CProfilingOptionsTab.java +++ b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/CProfilingOptionsTab.java @@ -14,9 +14,9 @@ package org.eclipse.linuxtools.internal.profiling.launch; import java.util.SortedMap; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.profiling.launch.provider.launch.ProviderFramework; import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.plugin.AbstractUIPlugin; // Special profiling options tab to use with the org.eclipse.cdt.launch.profilingProvider extension // to extend the Local C/C++ Application configuration to handle profiling. We do not rename @@ -74,8 +74,8 @@ public class CProfilingOptionsTab extends AbstractProfilingOptionsTab { @Override public Image getImage() { if (img == null) - img = AbstractUIPlugin.imageDescriptorFromPlugin(ProfileLaunchPlugin.PLUGIN_ID, - "icons/time_obj.gif").createImage(); //$NON-NLS-1$ + img = ResourceLocator.imageDescriptorFromBundle(ProfileLaunchPlugin.PLUGIN_ID, + "icons/time_obj.gif").get().createImage(); //$NON-NLS-1$ return img; } } diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/ProfileLaunchPlugin.java b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/ProfileLaunchPlugin.java index 62f8f5d74..a4b854854 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/ProfileLaunchPlugin.java +++ b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/internal/profiling/launch/ProfileLaunchPlugin.java @@ -16,6 +16,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -74,7 +75,7 @@ public class ProfileLaunchPlugin extends AbstractUIPlugin { } public static Shell getActiveWorkbenchShell() { - IWorkbenchWindow window = getDefault().getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { return window.getShell(); } @@ -85,7 +86,7 @@ public class ProfileLaunchPlugin extends AbstractUIPlugin { if (getActiveWorkbenchShell() != null) { return getActiveWorkbenchShell(); } - IWorkbenchWindow[] windows = getDefault().getWorkbench().getWorkbenchWindows(); + IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); return windows[0].getShell(); } diff --git a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/profiling/launch/RemoteProxyCMainTab.java b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/profiling/launch/RemoteProxyCMainTab.java index ebbaa00b9..4b1231f7f 100644 --- a/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/profiling/launch/RemoteProxyCMainTab.java +++ b/profiling/org.eclipse.linuxtools.profiling.launch/src/org/eclipse/linuxtools/profiling/launch/RemoteProxyCMainTab.java @@ -59,6 +59,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.TwoPaneElementSelector; @@ -132,15 +133,10 @@ public class RemoteProxyCMainTab extends CAbstractMainTab { Composite comp = new Composite(parent, SWT.NONE); setControl(comp); - ProfileLaunchPlugin - .getDefault() - .getWorkbench() - .getHelpSystem() - .setHelp( - getControl(), - ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_MAIN_TAB); + PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), + ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_MAIN_TAB); - GridLayout topLayout = new GridLayout(); + GridLayout topLayout = new GridLayout(); comp.setLayout(topLayout); createVerticalSpacer(comp, 1); diff --git a/profiling/org.eclipse.linuxtools.profiling.provider.tests/.classpath b/profiling/org.eclipse.linuxtools.profiling.provider.tests/.classpath index 43b986286..a621c21ac 100644 --- a/profiling/org.eclipse.linuxtools.profiling.provider.tests/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.provider.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.profiling.provider.tests/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.provider.tests/.settings/org.eclipse.jdt.core.prefs index 59a1463b4..388b95fe1 100644 --- a/profiling/org.eclipse.linuxtools.profiling.provider.tests/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.profiling.provider.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.profiling.provider.tests/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.provider.tests/META-INF/MANIFEST.MF index 09b5dd0a2..b92ae51a1 100644 --- a/profiling/org.eclipse.linuxtools.profiling.provider.tests/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.provider.tests/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.linuxtools.profiling.provider.tests;singleton:=true Bundle-Version: 1.2.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.profiling.launch Require-Bundle: org.junit;bundle-version="4.0.0", org.hamcrest.core, diff --git a/profiling/org.eclipse.linuxtools.profiling.provider.tests/pom.xml b/profiling/org.eclipse.linuxtools.profiling.provider.tests/pom.xml index 6415758a7..f2c1a0be0 100644 --- a/profiling/org.eclipse.linuxtools.profiling.provider.tests/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.provider.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.provider.tests</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.remote-feature/feature.xml b/profiling/org.eclipse.linuxtools.profiling.remote-feature/feature.xml index 9f1a2c7ae..b97592163 100644 --- a/profiling/org.eclipse.linuxtools.profiling.remote-feature/feature.xml +++ b/profiling/org.eclipse.linuxtools.profiling.remote-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.profiling.remote" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/profiling/org.eclipse.linuxtools.profiling.remote-feature/pom.xml b/profiling/org.eclipse.linuxtools.profiling.remote-feature/pom.xml index 4c76c4f22..3a41a22a3 100644 --- a/profiling/org.eclipse.linuxtools.profiling.remote-feature/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.remote-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.remote</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Profiling Remote Capabilities Feature</name> diff --git a/profiling/org.eclipse.linuxtools.profiling.tests/.classpath b/profiling/org.eclipse.linuxtools.profiling.tests/.classpath index 43b986286..a621c21ac 100644 --- a/profiling/org.eclipse.linuxtools.profiling.tests/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.profiling.tests/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.tests/.settings/org.eclipse.jdt.core.prefs index 373593c6d..ca17ceef4 100644 --- a/profiling/org.eclipse.linuxtools.profiling.tests/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.profiling.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.profiling.tests/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.tests/META-INF/MANIFEST.MF index f907ad313..2f52d2aed 100644 --- a/profiling/org.eclipse.linuxtools.profiling.tests/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.tests/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.ide, org.eclipse.remote.core;bundle-version="2.0.0", org.eclipse.remote.jsch.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Export-Package: diff --git a/profiling/org.eclipse.linuxtools.profiling.tests/pom.xml b/profiling/org.eclipse.linuxtools.profiling.tests/pom.xml index 90295fd69..fe0ba8bab 100644 --- a/profiling/org.eclipse.linuxtools.profiling.tests/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.tests</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.ui.capability/.classpath b/profiling/org.eclipse.linuxtools.profiling.ui.capability/.classpath index 323b07b35..8d4e5e848 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui.capability/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.ui.capability/.classpath @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.profiling.ui.capability/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.ui.capability/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c6b9e9181..000000000 --- a/profiling/org.eclipse.linuxtools.profiling.ui.capability/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,95 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/profiling/org.eclipse.linuxtools.profiling.ui.capability/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.ui.capability/META-INF/MANIFEST.MF index 3cf34ad57..0a3466b43 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui.capability/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.ui.capability/META-INF/MANIFEST.MF @@ -6,7 +6,6 @@ Bundle-Version: 1.0.0.qualifier Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Automatic-Module-Name: org.eclipse.linuxtools.profiling.ui.capability diff --git a/profiling/org.eclipse.linuxtools.profiling.ui.capability/pom.xml b/profiling/org.eclipse.linuxtools.profiling.ui.capability/pom.xml index c574cd454..3f8f7d1f8 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui.capability/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.ui.capability/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.ui.capability</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/.classpath b/profiling/org.eclipse.linuxtools.profiling.ui/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/.classpath +++ b/profiling/org.eclipse.linuxtools.profiling.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.profiling.ui/.settings/org.eclipse.jdt.core.prefs index 4e96af845..d4e1a82b6 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.profiling.ui/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -111,4 +113,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.profiling.ui/META-INF/MANIFEST.MF index 80a8698d3..e5be77a81 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.profiling.ui/META-INF/MANIFEST.MF @@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.cdt.managedbuilder.core, org.eclipse.cdt.autotools.core, org.eclipse.cdt.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Export-Package: org.eclipse.linuxtools.profiling.ui diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/pom.xml b/profiling/org.eclipse.linuxtools.profiling.ui/pom.xml index e68b3a84c..209ded1c6 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/pom.xml +++ b/profiling/org.eclipse.linuxtools.profiling.ui/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.profiling.ui</artifactId> diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/internal/profiling/ui/ProfileUIPlugin.java b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/internal/profiling/ui/ProfileUIPlugin.java index 7a0937706..678557016 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/internal/profiling/ui/ProfileUIPlugin.java +++ b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/internal/profiling/ui/ProfileUIPlugin.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. + * Copyright (c) 2008, 2019 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -14,6 +14,7 @@ package org.eclipse.linuxtools.internal.profiling.ui; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -56,7 +57,7 @@ public class ProfileUIPlugin extends AbstractUIPlugin { } public static Shell getActiveWorkbenchShell() { - IWorkbenchWindow window = getDefault().getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { return window.getShell(); } diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/CProjectBuildHelpers.java b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/CProjectBuildHelpers.java index 29d25fc51..12147ce0f 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/CProjectBuildHelpers.java +++ b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/CProjectBuildHelpers.java @@ -118,6 +118,9 @@ public class CProjectBuildHelpers { } IConfiguration defaultConfiguration = helperGetActiveConfiguration(project); + if (defaultConfiguration == null) { + return ProjectBuildType.OTHER; + } IBuilder builder = defaultConfiguration.getBuilder(); Boolean projIsManaged = builder.isManagedBuildOn(); diff --git a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/ProfileUIUtils.java b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/ProfileUIUtils.java index b3794f8ca..0dd150804 100644 --- a/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/ProfileUIUtils.java +++ b/profiling/org.eclipse.linuxtools.profiling.ui/src/org/eclipse/linuxtools/profiling/ui/ProfileUIUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. + * Copyright (c) 2008, 2019 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -48,13 +48,13 @@ import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; -import org.eclipse.linuxtools.internal.profiling.ui.ProfileUIPlugin; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; @@ -73,7 +73,7 @@ public class ProfileUIUtils { Path p = new Path(path); if (p.toFile().exists()) { - IWorkbenchPage activePage = ProfileUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IFileStore file = EFS.getLocalFileSystem().getStore(p); IEditorPart editor = IDE.openEditorOnFileStore(activePage, file); @@ -103,7 +103,7 @@ public class ProfileUIUtils { * @since 3.1 */ public static void openEditorAndSelect(String path, int line, IProject project) throws PartInitException, BadLocationException, CoreException { - IWorkbenchPage activePage = ProfileUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IRemoteFileProxy proxy = null; proxy = RemoteProxyManager.getInstance().getFileProxy(project); IFileStore file = proxy.getResource(path); @@ -135,7 +135,7 @@ public class ProfileUIUtils { */ public static void openEditorAndSelect(IFile file, int line) throws PartInitException, BadLocationException { if (file.exists()) { - IWorkbenchPage activePage = ProfileUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IEditorPart editor = IDE.openEditor(activePage, file); if (editor instanceof ITextEditor) { @@ -189,7 +189,7 @@ public class ProfileUIUtils { } if (input != null && editorID != null) { // Open the editor - IWorkbenchPage activePage = ProfileUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IEditorPart editor = IDE.openEditor(activePage, input, editorID); // Select the line @@ -219,7 +219,7 @@ public class ProfileUIUtils { Path p = new Path (path); if (p.toFile().exists()) { - IWorkbenchPage activePage = ProfileUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IFileStore fileStore = EFS.getLocalFileSystem().getStore(p); IEditorPart editor = IDE.openEditorOnFileStore(activePage, fileStore); diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.classpath b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.classpath index eca7bdba8..a42a828e0 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.classpath +++ b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/META-INF/MANIFEST.MF index 6769d877b..c13a80278 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.rdt.proxy.tests Bundle-Version: 1.0.0.qualifier Bundle-Vendor: Eclipse Linux Tools Fragment-Host: org.eclipse.linuxtools.rdt.proxy;bundle-version="2.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit;bundle-version="4.12.0", org.eclipse.linuxtools.remote.proxy.tests;bundle-version="1.0.0", org.eclipse.ptp.rdt.sync.core;bundle-version="5.0.0", diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/pom.xml b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/pom.xml index 576e6bcc5..3b23c5eaa 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/pom.xml +++ b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rdt.proxy.tests</artifactId> diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/src/org/eclipse/linuxtools/rdt/proxy/tests/AllTests.java b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/src/org/eclipse/linuxtools/rdt/proxy/tests/AllTests.java index 14b31fb96..7f2c9b23c 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy.tests/src/org/eclipse/linuxtools/rdt/proxy/tests/AllTests.java +++ b/profiling/org.eclipse.linuxtools.rdt.proxy.tests/src/org/eclipse/linuxtools/rdt/proxy/tests/AllTests.java @@ -9,9 +9,6 @@ *******************************************************************************/ package org.eclipse.linuxtools.rdt.proxy.tests; -import org.eclipse.linuxtools.rdt.proxy.tests.CommandLauncherProxyTest; -import org.eclipse.linuxtools.rdt.proxy.tests.FileProxyTest; -import org.eclipse.linuxtools.rdt.proxy.tests.RemoteProxyManagerTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy/.classpath b/profiling/org.eclipse.linuxtools.rdt.proxy/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy/.classpath +++ b/profiling/org.eclipse.linuxtools.rdt.proxy/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.rdt.proxy/.settings/org.eclipse.jdt.core.prefs index ecff7d582..479172bc6 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.rdt.proxy/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.rdt.proxy/META-INF/MANIFEST.MF index 2d8890193..dbb96078f 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.rdt.proxy/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources;bundle-version="3.7.100", org.eclipse.core.filesystem;bundle-version="1.3.100" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Bundle-Vendor: %provider Import-Package: org.eclipse.cdt.utils.pty diff --git a/profiling/org.eclipse.linuxtools.rdt.proxy/pom.xml b/profiling/org.eclipse.linuxtools.rdt.proxy/pom.xml index a7feb26d0..d488daef6 100644 --- a/profiling/org.eclipse.linuxtools.rdt.proxy/pom.xml +++ b/profiling/org.eclipse.linuxtools.rdt.proxy/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rdt.proxy</artifactId> diff --git a/profiling/org.eclipse.linuxtools.remote.proxy.tests/.classpath b/profiling/org.eclipse.linuxtools.remote.proxy.tests/.classpath index 43b986286..a621c21ac 100644 --- a/profiling/org.eclipse.linuxtools.remote.proxy.tests/.classpath +++ b/profiling/org.eclipse.linuxtools.remote.proxy.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.remote.proxy.tests/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.remote.proxy.tests/.settings/org.eclipse.jdt.core.prefs index fc262faca..e60dd8dd4 100644 --- a/profiling/org.eclipse.linuxtools.remote.proxy.tests/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.remote.proxy.tests/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -98,4 +100,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.remote.proxy.tests/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.remote.proxy.tests/META-INF/MANIFEST.MF index b8f75d5e7..d1b1571f1 100644 --- a/profiling/org.eclipse.linuxtools.remote.proxy.tests/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.remote.proxy.tests/META-INF/MANIFEST.MF @@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.filesystem, org.eclipse.ptp.rdt.sync.core, org.eclipse.ptp.rdt.sync.git.core;bundle-version="2.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.remote.proxy.tests; x-friends:="org.eclipse.linuxtools.tools.launch.core.tests, diff --git a/profiling/org.eclipse.linuxtools.remote.proxy.tests/pom.xml b/profiling/org.eclipse.linuxtools.remote.proxy.tests/pom.xml index 24a35dd21..81b2b4a6c 100644 --- a/profiling/org.eclipse.linuxtools.remote.proxy.tests/pom.xml +++ b/profiling/org.eclipse.linuxtools.remote.proxy.tests/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.remote.proxy.tests</artifactId> diff --git a/profiling/org.eclipse.linuxtools.remote.proxy.tests/src/org/eclipse/linuxtools/remote/proxy/tests/AbstractProxyTest.java b/profiling/org.eclipse.linuxtools.remote.proxy.tests/src/org/eclipse/linuxtools/remote/proxy/tests/AbstractProxyTest.java index d3f5fb4b7..076c63ef0 100644 --- a/profiling/org.eclipse.linuxtools.remote.proxy.tests/src/org/eclipse/linuxtools/remote/proxy/tests/AbstractProxyTest.java +++ b/profiling/org.eclipse.linuxtools.remote.proxy.tests/src/org/eclipse/linuxtools/remote/proxy/tests/AbstractProxyTest.java @@ -21,7 +21,7 @@ import org.eclipse.ptp.rdt.sync.core.SyncConfigManager; import org.eclipse.ptp.rdt.sync.core.SyncFlag; import org.eclipse.ptp.rdt.sync.core.SyncManager; import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.utils.Platform; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; diff --git a/profiling/org.eclipse.linuxtools.ssh.proxy/.classpath b/profiling/org.eclipse.linuxtools.ssh.proxy/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.ssh.proxy/.classpath +++ b/profiling/org.eclipse.linuxtools.ssh.proxy/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.ssh.proxy/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.ssh.proxy/.settings/org.eclipse.jdt.core.prefs index d95d6765a..b4c66793c 100644 --- a/profiling/org.eclipse.linuxtools.ssh.proxy/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.ssh.proxy/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -79,6 +80,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.ssh.proxy/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.ssh.proxy/META-INF/MANIFEST.MF index 0cb264145..abeb783a0 100644 --- a/profiling/org.eclipse.linuxtools.ssh.proxy/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.ssh.proxy/META-INF/MANIFEST.MF @@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.ui, com.jcraft.jsch;bundle-version="0.1.44", org.eclipse.remote.jsch.core Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Bundle-Vendor: %provider Import-Package: org.eclipse.cdt.utils.pty diff --git a/profiling/org.eclipse.linuxtools.ssh.proxy/pom.xml b/profiling/org.eclipse.linuxtools.ssh.proxy/pom.xml index 5413b8d3c..ad7e66e81 100644 --- a/profiling/org.eclipse.linuxtools.ssh.proxy/pom.xml +++ b/profiling/org.eclipse.linuxtools.ssh.proxy/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.ssh.proxy</artifactId> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.classpath b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.classpath index eca7bdba8..a42a828e0 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.classpath +++ b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.settings/org.eclipse.jdt.core.prefs index 0c68a61dc..7adc0fb9a 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/META-INF/MANIFEST.MF index fa377303b..0a06bc06d 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/META-INF/MANIFEST.MF @@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources;bundle-version="3.11.0", org.eclipse.linuxtools.profiling.tests;bundle-version="1.1.0", org.eclipse.cdt.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.debug.core, org.eclipse.linuxtools.remote.proxy.tests Automatic-Module-Name: org.eclipse.linuxtools.tools.launch.core.tests diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/pom.xml b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/pom.xml index 4ba08c45d..13c1f4ac3 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core.tests/pom.xml +++ b/profiling/org.eclipse.linuxtools.tools.launch.core.tests/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.tools.launch.core.tests</artifactId> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core/.classpath b/profiling/org.eclipse.linuxtools.tools.launch.core/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core/.classpath +++ b/profiling/org.eclipse.linuxtools.tools.launch.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.tools.launch.core/.settings/org.eclipse.jdt.core.prefs index 23c31dd4a..0a1912d32 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.tools.launch.core/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -111,4 +113,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.tools.launch.core/META-INF/MANIFEST.MF index aab2ae789..d8859e877 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.tools.launch.core/META-INF/MANIFEST.MF @@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.linuxtools.profiling.launch;bundle-version="0.10.0", org.eclipse.core.filesystem;bundle-version="1.3.100", com.jcraft.jsch -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.tools.launch.core,org.eclipse.l inuxtools.tools.launch.core.factory,org.eclipse.linuxtools.tools.laun diff --git a/profiling/org.eclipse.linuxtools.tools.launch.core/pom.xml b/profiling/org.eclipse.linuxtools.tools.launch.core/pom.xml index e93fc216b..a9991dd03 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.core/pom.xml +++ b/profiling/org.eclipse.linuxtools.tools.launch.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.tools.launch.core</artifactId> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.ui/.classpath b/profiling/org.eclipse.linuxtools.tools.launch.ui/.classpath index 43b986286..1db08c6b4 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.ui/.classpath +++ b/profiling/org.eclipse.linuxtools.tools.launch.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/profiling/org.eclipse.linuxtools.tools.launch.ui/.settings/org.eclipse.jdt.core.prefs b/profiling/org.eclipse.linuxtools.tools.launch.ui/.settings/org.eclipse.jdt.core.prefs index 89403a779..649554d9b 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.ui/.settings/org.eclipse.jdt.core.prefs +++ b/profiling/org.eclipse.linuxtools.tools.launch.ui/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/profiling/org.eclipse.linuxtools.tools.launch.ui/META-INF/MANIFEST.MF b/profiling/org.eclipse.linuxtools.tools.launch.ui/META-INF/MANIFEST.MF index 21e2ddf81..50d65b078 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.ui/META-INF/MANIFEST.MF +++ b/profiling/org.eclipse.linuxtools.tools.launch.ui/META-INF/MANIFEST.MF @@ -9,6 +9,6 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.109.100", org.eclipse.core.runtime, org.eclipse.core.resources, org.eclipse.linuxtools.tools.launch.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Automatic-Module-Name: org.eclipse.linuxtools.tools.launch.ui diff --git a/profiling/org.eclipse.linuxtools.tools.launch.ui/pom.xml b/profiling/org.eclipse.linuxtools.tools.launch.ui/pom.xml index 4a014f1c9..e01c3fda1 100644 --- a/profiling/org.eclipse.linuxtools.tools.launch.ui/pom.xml +++ b/profiling/org.eclipse.linuxtools.tools.launch.ui/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-profiling-parent</artifactId> <groupId>org.eclipse.linuxtools.profiling</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.tools.launch.ui</artifactId> diff --git a/profiling/pom.xml b/profiling/pom.xml index 0e7979acd..ca320b382 100644 --- a/profiling/pom.xml +++ b/profiling/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.profiling</groupId> diff --git a/releng/container-build/Dockerfile b/releng/container-build/Dockerfile new file mode 100644 index 000000000..853ef3b56 --- /dev/null +++ b/releng/container-build/Dockerfile @@ -0,0 +1,41 @@ +FROM eclipsecbi/fedora-gtk3-mutter:31-gtk3.24 + +# Back to root for install +USER 0 + +ARG REMOTING_VERSION=3.27 + +# https://github.com/jenkinsci/docker-jnlp-slave/ +ARG JNLP_AGENT_SCRIPT_VERSION=3.27-1 + +RUN curl --create-dirs -sSLo /usr/share/jenkins/slave.jar https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/${REMOTING_VERSION}/remoting-${REMOTING_VERSION}.jar \ + && chmod 755 /usr/share/jenkins \ + && chmod 644 /usr/share/jenkins/slave.jar + +ADD https://raw.githubusercontent.com/jenkinsci/docker-jnlp-slave/${JNLP_AGENT_SCRIPT_VERSION}/jenkins-slave /usr/local/bin/jenkins-slave +RUN chmod 555 /usr/local/bin/jenkins-slave && \ + chgrp 0 /usr/local/bin/jenkins-slave && \ + mkdir -p /home/jenkins/.jenkins && \ + mkdir -p /home/jenkins/agent + +ENTRYPOINT [ "uid_entrypoint", "jenkins-slave" ] + +# Permit installation of docs +RUN sed -i '/tsflags=nodocs/ d' /etc/dnf/dnf.conf + +RUN dnf -y update && dnf -y install \ + java-11-openjdk-devel maven webkit2gtk3 \ + gcc-c++ perf systemtap rpmdevtools valgrind \ + gtk3-devel-docs createrepo_c \ + npm \ + && dnf clean all + +#Back to named user +USER 1000 + +ENV JENKINS_AGENT_WORKDIR=${HOME}/agent +ENV JAVA_OPTS="" +ENV JAVA_HOME=/usr/lib/jvm/java-11 +ENV PATH=/usr/lib/jvm/java-11/bin:$PATH +ENV JNLP_PROTOCOL_OPTS="-XshowSettings:vm -Xmx256m -Djdk.nativeCrypto=false -Dsun.zip.disableMemoryMapping=true -Dorg.jenkinsci.remoting.engine.JnlpProtocol3.disabled=true" + diff --git a/releng/org.eclipse.linuxtools.docker-site/category.xml b/releng/org.eclipse.linuxtools.docker-site/category.xml index 9c41bc20a..e7e2ffd14 100644 --- a/releng/org.eclipse.linuxtools.docker-site/category.xml +++ b/releng/org.eclipse.linuxtools.docker-site/category.xml @@ -10,6 +10,9 @@ <feature url="features/org.eclipse.linuxtools.jdt.docker.launcher.feature_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.jdt.docker.launcher.feature" version="0.0.0"> <category name="Linux Tools"/> </feature> + <feature url="features/org.eclipse.linuxtools.docker.editor.ls.feature_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.docker.editor.ls.feature" version="0.0.0"> + <category name="Linux Tools"/> + </feature> <feature url="features/org.eclipse.linuxtools.docker.tests.feature_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.docker.tests.feature" version="0.0.0"> <category name="Linux Tools"/> </feature> @@ -81,11 +84,19 @@ <category name="Docker Test Dependencies"/> </iu> + <!-- Docker Editor Dependencies --> + <iu id="org.eclipse.lsp4e" version="0.0.0"> + <category name="Docker Editor Dependencies"/> + </iu> + <iu id="org.eclipse.wildwebdeveloper.embedder.node" version="0.0.0"> + <category name="Docker Editor Dependencies"/> + </iu> + <!-- Orbit Dependencies --> - <iu id="com.spotify.docker.client" version="0.0.0"> + <iu id="org.mandas.docker-client" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> - <iu id="com.spotify.docker.client.source" version="0.0.0"> + <iu id="org.mandas.docker-client.source" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> @@ -116,12 +127,15 @@ <iu id="javax.ws.rs" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> - <iu id="javax.xml.bind" version="0.0.0"> + <iu id="jakarta.xml.bind" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> <iu id="javax.xml.stream" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> + <iu id="javax.annotation" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> <iu id="com.github.jnr.jffi" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> @@ -143,7 +157,7 @@ <iu id="com.github.jnr.unixsocket" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> - <iu id="jnr.x86asm" version="0.0.0"> + <iu id="com.github.jnr.x86asm" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> <iu id="org.bouncycastle.bcprov" version="0.0.0"> @@ -167,9 +181,6 @@ <iu id="org.glassfish.jersey.apache.connector" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> - <iu id="org.glassfish.jersey.bundles.repackaged.jersey-guava" version="0.0.0"> - <category name="Docker Client Dependencies"/> - </iu> <iu id="org.glassfish.jersey.core.jersey-client" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> @@ -185,12 +196,48 @@ <iu id="org.glassfish.jersey.core.jersey-server" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> + <iu id="org.glassfish.jersey.containers.servlet.core" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="org.glassfish.jersey.containers.servlet" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="org.glassfish.jersey.inject.jersey-hk2" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> <iu id="javassist" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> <iu id="com.google.guava" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> + <iu id="com.google.auth.google-auth-library-credentials" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="com.google.auth.oauth2-http" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="com.google.http-client.google-http-client" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="com.google.http-client.google-http-client-jackson2" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="com.google.auto.value.auto-value-annotations" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="com.google.j2objc.j2objc-annotations" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="io.grpc.grpc-context" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="io.opencensus.opencensus-api" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> + <iu id="io.opencensus.opencensus-contrib-http-util" version="0.0.0"> + <category name="Docker Client Dependencies"/> + </iu> <iu id="org.slf4j.api" version="0.0.0"> <category name="Docker Client Dependencies"/> </iu> @@ -230,6 +277,11 @@ Eclipse Linux Tools Docker Client Dependencies </description> </category-def> + <category-def name="Docker Editor Dependencies" label="Docker Editor Dependencies"> + <description> + Eclipse Linux Tools Docker Editor Dependencies + </description> + </category-def> <category-def name="Docker Test Dependencies" label="Docker Test Dependencies"> <description> Eclipse Linux Tools Docker Integration Test Dependencies diff --git a/releng/org.eclipse.linuxtools.docker-site/pom.xml b/releng/org.eclipse.linuxtools.docker-site/pom.xml index 2b8efaec6..d5d6a9200 100644 --- a/releng/org.eclipse.linuxtools.docker-site/pom.xml +++ b/releng/org.eclipse.linuxtools.docker-site/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.releng</groupId> <artifactId>linuxtools-releng-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.docker-site</artifactId> diff --git a/releng/org.eclipse.linuxtools.releng-site/category.xml b/releng/org.eclipse.linuxtools.releng-site/category.xml index d885995eb..a8b8f89d4 100644 --- a/releng/org.eclipse.linuxtools.releng-site/category.xml +++ b/releng/org.eclipse.linuxtools.releng-site/category.xml @@ -34,9 +34,6 @@ <feature url="features/org.eclipse.linuxtools.man_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.man" version="0.0.0"> <category name="Linux Tools"/> </feature> - <feature url="features/org.eclipse.linuxtools.oprofile_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.oprofile.feature" version="0.0.0"> - <category name="Linux Tools"/> - </feature> <feature url="features/org.eclipse.linuxtools.profiling_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.profiling" version="0.0.0"> <category name="Linux Tools"/> </feature> @@ -64,14 +61,14 @@ <feature url="features/org.eclipse.linuxtools.valgrind.remote_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.valgrind.remote" version="0.0.0"> <category name="Linux Tools"/> </feature> - <feature url="features/org.eclipse.linuxtools.oprofile.remote_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.oprofile.remote.feature" version="0.0.0"> - <category name="Linux Tools"/> - </feature> <feature url="features/org.eclipse.linuxtools.perf.remote_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.perf.remote.feature" version="0.0.0"> <category name="Linux Tools"/> </feature> <!-- Orbit Dependencies --> - <iu id="org.swtchart" version="0.0.0"> + <iu id="org.eclipse.swtchart" version="0.0.0"> + <category name="Linux Tools"/> + </iu> + <iu id="org.eclipse.swtchart.extensions" version="0.0.0"> <category name="Linux Tools"/> </iu> <iu id="org.cyberneko.html" version="0.0.0"> @@ -116,9 +113,6 @@ <feature url="features/org.eclipse.linuxtools.man.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.man.source" version="0.0.0"> <category name="Linux Tools Sources"/> </feature> - <feature url="features/org.eclipse.linuxtools.oprofile.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.oprofile.feature.source" version="0.0.0"> - <category name="Linux Tools Sources"/> - </feature> <feature url="features/org.eclipse.linuxtools.profiling.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.profiling.source" version="0.0.0"> <category name="Linux Tools Sources"/> </feature> @@ -146,9 +140,6 @@ <feature url="features/org.eclipse.linuxtools.valgrind.remote.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.valgrind.remote.source" version="0.0.0"> <category name="Linux Tools Sources"/> </feature> - <feature url="features/org.eclipse.linuxtools.oprofile.remote.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.oprofile.remote.feature.source" version="0.0.0"> - <category name="Linux Tools Sources"/> - </feature> <feature url="features/org.eclipse.linuxtools.perf.remote.source_0.0.0.qualifier.jar" id="org.eclipse.linuxtools.perf.remote.feature.source" version="0.0.0"> <category name="Linux Tools Sources"/> </feature> diff --git a/releng/org.eclipse.linuxtools.releng-site/pom.xml b/releng/org.eclipse.linuxtools.releng-site/pom.xml index b332152ba..bd8258f60 100644 --- a/releng/org.eclipse.linuxtools.releng-site/pom.xml +++ b/releng/org.eclipse.linuxtools.releng-site/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.releng</groupId> <artifactId>linuxtools-releng-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.releng-site</artifactId> diff --git a/releng/org.eclipse.linuxtools.target/.project b/releng/org.eclipse.linuxtools.target/.project index 085f734c6..7ea15ad81 100644 --- a/releng/org.eclipse.linuxtools.target/.project +++ b/releng/org.eclipse.linuxtools.target/.project @@ -5,13 +5,7 @@ <projects> </projects> <buildSpec> - <buildCommand> - <name>org.eclipse.m2e.core.maven2Builder</name> - <arguments> - </arguments> - </buildCommand> </buildSpec> <natures> - <nature>org.eclipse.m2e.core.maven2Nature</nature> </natures> </projectDescription> diff --git a/releng/org.eclipse.linuxtools.target/linuxtools-e4.12.target b/releng/org.eclipse.linuxtools.target/linuxtools-e4.12.target deleted file mode 100644 index 502001ef8..000000000 --- a/releng/org.eclipse.linuxtools.target/linuxtools-e4.12.target +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?pde version="3.8"?><target name="linuxtools-e4.12" sequenceNumber="1"> -<locations> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.core.jackson-databind" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.datatype.jackson-datatype-guava" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.9.2.v20180207-1730"/> -<unit id="com.github.jnr.constants" version="0.9.8.v20180207-1730"/> -<unit id="com.github.jnr.enxio" version="0.16.0.v20180207-1730"/> -<unit id="com.github.jnr.ffi" version="2.1.4.v20180207-1730"/> -<unit id="com.github.jnr.jffi" version="1.2.15.v20180207-1730"/> -<unit id="com.github.jnr.jffi.native" version="1.2.15.v20180207-1730"/> -<unit id="com.github.jnr.posix" version="3.0.35.v20180207-1730"/> -<unit id="com.github.jnr.unixsocket" version="0.18.0.v20180207-1730"/> -<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> -<unit id="com.google.guava" version="21.0.0.v20170206-1425"/> -<unit id="com.spotify.docker.client" version="8.11.7.v20180731-1413"/> -<unit id="com.spotify.docker.client.source" version="8.11.7.v20180731-1413"/> -<unit id="javassist" version="3.13.0.GA_v201209210905"/> -<unit id="javax.ws.rs" version="2.0.1.v201504171603"/> -<unit id="javax.xml.bind" version="2.2.0.v201105210648"/> -<unit id="javax.xml.stream" version="1.0.1.v201004272200"/> -<unit id="jnr.x86asm" version="1.0.2.v201505052040"/> -<unit id="org.aopalliance" version="1.0.0.v201105210816"/> -<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> -<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> -<unit id="org.apache.commons.io" version="2.6.0.v20190123-2029"/> -<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/> -<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> -<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> -<unit id="org.apache.xerces" version="2.9.0.v201101211617"/> -<unit id="org.assertj" version="1.7.1.v20170413-2026"/> -<unit id="org.bouncycastle.bcpkix" version="1.61.0.v20190602-1335"/> -<unit id="org.bouncycastle.bcprov" version="1.61.0.v20190602-1335"/> -<unit id="org.cyberneko.html" version="1.9.14.v201105210654"/> -<unit id="org.glassfish.hk2.api" version="2.5.0.v20161103-0227"/> -<unit id="org.glassfish.hk2.locator" version="2.5.0.v20161103-0227"/> -<unit id="org.glassfish.hk2.osgi-resource-locator" version="2.5.0.v20161103-1916"/> -<unit id="org.glassfish.hk2.utils" version="2.5.0.v20160210-1508"/> -<unit id="org.glassfish.jersey.apache.connector" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.bundles.repackaged.jersey-guava" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.core.jersey-client" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.core.jersey-common" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.core.jersey-server" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.ext.entityfiltering" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.media.jersey-media-json-jackson" version="2.22.1.v20161117-2005"/> -<unit id="org.mockito" version="2.23.0.v20190527-1420"/> -<unit id="org.objectweb.asm" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.analysis" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.tree" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.util" version="7.1.0.v20190412-2143"/> -<unit id="org.slf4j.api" version="1.7.10.v20170428-1633"/> -<unit id="org.swtchart" version="0.10.0.v201605200358"/> -<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.jdt.annotation" version="0.0.0"/> -<unit id="org.eclipse.jdt.core" version="0.0.0"/> -<unit id="org.eclipse.jdt.debug.ui" version="0.0.0"/> -<unit id="org.eclipse.jdt.ui" version="0.0.0"/> -<unit id="org.eclipse.pde.runtime" version="0.0.0"/> -<unit id="org.eclipse.platform.ide" version="0.0.0"/> -<unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/eclipse/updates/4.12/"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.license.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/cbi/updates/license"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.swtbot.eclipse.feature.group" version="0.0.0"/> -<unit id="org.eclipse.swtbot.feature.group" version="0.0.0"/> -<unit id="org.eclipse.dstore.core" version="0.0.0"/> -<unit id="org.eclipse.jgit.feature.group" version="0.0.0"/> -<unit id="org.eclipse.ptp.rdt.sync.feature.group" version="0.0.0"/> -<unit id="org.eclipse.remote.feature.group" version="0.0.0"/> -<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.zest.feature.group" version="0.0.0"/> -<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> -<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> -<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/releases/2019-03/"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.reddeer.eclipse.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.reddeer.tests.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.reddeer.ui.feature.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/reddeer/snapshots/"/> -</location> -</locations> -<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> -<launcherArgs> -<vmArgs>-Xms40m --Xmx512M</vmArgs> -<programArgs>-consolelog</programArgs> -</launcherArgs> -</target> diff --git a/releng/org.eclipse.linuxtools.target/linuxtools-e4.13.target b/releng/org.eclipse.linuxtools.target/linuxtools-e4.13.target deleted file mode 100644 index bd0305b7f..000000000 --- a/releng/org.eclipse.linuxtools.target/linuxtools-e4.13.target +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?pde version="3.8"?><target name="linuxtools-e4.13" sequenceNumber="1"> -<locations> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.core.jackson-databind" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.datatype.jackson-datatype-guava" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.9.2.v20180207-1730"/> -<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.9.2.v20180207-1730"/> -<unit id="com.github.jnr.constants" version="0.9.8.v20180207-1730"/> -<unit id="com.github.jnr.enxio" version="0.16.0.v20180207-1730"/> -<unit id="com.github.jnr.ffi" version="2.1.4.v20180207-1730"/> -<unit id="com.github.jnr.jffi" version="1.2.15.v20180207-1730"/> -<unit id="com.github.jnr.jffi.native" version="1.2.15.v20180207-1730"/> -<unit id="com.github.jnr.posix" version="3.0.35.v20180207-1730"/> -<unit id="com.github.jnr.unixsocket" version="0.18.0.v20180207-1730"/> -<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> -<unit id="com.google.guava" version="21.0.0.v20170206-1425"/> -<unit id="com.spotify.docker.client" version="8.11.7.v20180731-1413"/> -<unit id="com.spotify.docker.client.source" version="8.11.7.v20180731-1413"/> -<unit id="javassist" version="3.13.0.GA_v201209210905"/> -<unit id="javax.ws.rs" version="2.0.1.v201504171603"/> -<unit id="javax.xml.bind" version="2.2.0.v201105210648"/> -<unit id="javax.xml.stream" version="1.0.1.v201004272200"/> -<unit id="jnr.x86asm" version="1.0.2.v201505052040"/> -<unit id="org.aopalliance" version="1.0.0.v201105210816"/> -<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> -<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> -<unit id="org.apache.commons.io" version="2.6.0.v20190123-2029"/> -<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/> -<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> -<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> -<unit id="org.apache.xerces" version="2.9.0.v201101211617"/> -<unit id="org.assertj" version="1.7.1.v20170413-2026"/> -<unit id="org.bouncycastle.bcpkix" version="1.60.0.v20181210-2057"/> -<unit id="org.bouncycastle.bcprov" version="1.60.0.v20181210-2057"/> -<unit id="org.cyberneko.html" version="1.9.14.v201105210654"/> -<unit id="org.glassfish.hk2.api" version="2.5.0.v20161103-0227"/> -<unit id="org.glassfish.hk2.locator" version="2.5.0.v20161103-0227"/> -<unit id="org.glassfish.hk2.osgi-resource-locator" version="2.5.0.v20161103-1916"/> -<unit id="org.glassfish.hk2.utils" version="2.5.0.v20160210-1508"/> -<unit id="org.glassfish.jersey.apache.connector" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.bundles.repackaged.jersey-guava" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.core.jersey-client" version="2.22.1.v20161103-1916"/> -<unit id="org.glassfish.jersey.core.jersey-common" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.core.jersey-server" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.ext.entityfiltering" version="2.22.1.v20181004-1955"/> -<unit id="org.glassfish.jersey.media.jersey-media-json-jackson" version="2.22.1.v20161117-2005"/> -<unit id="org.mockito" version="2.23.0.v20190527-1420"/> -<unit id="org.objectweb.asm" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.analysis" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.tree" version="7.1.0.v20190412-2143"/> -<unit id="org.objectweb.asm.util" version="7.1.0.v20190412-2143"/> -<unit id="org.slf4j.api" version="1.7.10.v20170428-1633"/> -<unit id="org.swtchart" version="0.10.0.v201605200358"/> -<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.jdt.annotation" version="0.0.0"/> -<unit id="org.eclipse.jdt.core" version="0.0.0"/> -<unit id="org.eclipse.jdt.debug.ui" version="0.0.0"/> -<unit id="org.eclipse.jdt.ui" version="0.0.0"/> -<unit id="org.eclipse.pde.runtime" version="0.0.0"/> -<unit id="org.eclipse.platform.ide" version="0.0.0"/> -<unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/eclipse/updates/4.13-I-builds/"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.license.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/cbi/updates/license"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.swtbot.eclipse.feature.group" version="0.0.0"/> -<unit id="org.eclipse.swtbot.feature.group" version="0.0.0"/> -<unit id="org.eclipse.dstore.core" version="0.0.0"/> -<unit id="org.eclipse.jgit.feature.group" version="0.0.0"/> -<unit id="org.eclipse.ptp.rdt.sync.feature.group" version="0.0.0"/> -<unit id="org.eclipse.remote.feature.group" version="0.0.0"/> -<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.zest.feature.group" version="0.0.0"/> -<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> -<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> -<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/releases/2019-09/"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.reddeer.eclipse.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.reddeer.tests.feature.feature.group" version="0.0.0"/> -<unit id="org.eclipse.reddeer.ui.feature.feature.group" version="0.0.0"/> -<repository location="http://download.eclipse.org/reddeer/snapshots/"/> -</location> -</locations> -<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> -<launcherArgs> -<vmArgs>-Xms40m --Xmx512M</vmArgs> -<programArgs>-consolelog</programArgs> -</launcherArgs> -</target> diff --git a/releng/org.eclipse.linuxtools.target/linuxtools-e4.16.target b/releng/org.eclipse.linuxtools.target/linuxtools-e4.16.target new file mode 100644 index 000000000..47be0780b --- /dev/null +++ b/releng/org.eclipse.linuxtools.target/linuxtools-e4.16.target @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<?pde version="3.8"?> +<target name="linuxtools-e4.16" sequenceNumber="1"> +<locations> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-core" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-databind" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.datatype.jackson-datatype-guava" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.10.3.v20200512-1600"/> +<unit id="com.github.jnr.constants" version="0.9.15.v20200501-1917"/> +<unit id="com.github.jnr.enxio" version="0.25.0.v20200501-1917"/> +<unit id="com.github.jnr.ffi" version="2.1.12.v20200513-1859"/> +<unit id="com.github.jnr.jffi" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.jffi.native" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.posix" version="3.0.54.v20200501-1917"/> +<unit id="com.github.jnr.unixsocket" version="0.28.0.v20200501-1917"/> +<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> +<unit id="com.google.guava" version="27.1.0.v20190517-1946"/> +<unit id="org.mandas.docker-client" version="3.2.1.v20200519-1937"/> +<unit id="org.mandas.docker-client.source" version="3.2.1.v20200519-1937"/> +<unit id="javassist" version="3.13.0.GA_v201209210905"/> +<unit id="javax.ws.rs" version="2.1.6.v20200505-2127"/> +<unit id="jakarta.xml.bind" version="2.3.3.v20200525-2159"/> +<unit id="javax.xml.stream" version="1.0.1.v201004272200"/> +<unit id="com.github.jnr.x86asm" version="1.0.2.v20200501-1917"/> +<unit id="org.aopalliance" version="1.0.0.v201105210816"/> +<unit id="org.apache.commons.codec" version="1.13.0.v20200108-0001"/> +<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> +<unit id="org.apache.commons.io" version="2.6.0.v20190123-2029"/> +<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/> +<unit id="org.apache.httpcomponents.httpclient" version="4.5.10.v20200114-1512"/> +<unit id="org.apache.httpcomponents.httpcore" version="4.4.12.v20200108-1212"/> +<unit id="org.apache.xerces" version="2.9.0.v201101211617"/> +<unit id="org.assertj" version="3.14.0.v20200120-1926"/> +<unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200502-2229"/> +<unit id="org.bouncycastle.bcprov" version="1.65.0.v20200502-2229"/> +<unit id="org.cyberneko.html" version="1.9.14.v201105210654"/> +<unit id="org.glassfish.hk2.api" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.locator" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.osgi-resource-locator" version="1.0.3.v20200509-0149"/> +<unit id="org.glassfish.hk2.utils" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.apache.connector" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet.core" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-client" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-common" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-server" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.ext.entityfiltering" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.inject.jersey-hk2" version="2.30.1.v20200512-1802"/> +<unit id="org.glassfish.jersey.media.jersey-media-json-jackson" version="2.30.1.v20200513-1859"/> +<unit id="org.mockito" version="2.23.0.v20200310-1642"/> +<unit id="org.objectweb.asm" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.analysis" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.tree" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.util" version="8.0.1.v20200420-1007"/> +<unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/> +<repository location="https://download.eclipse.org/tools/orbit/S-builds/S20200526004052/repository"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.jdt.annotation" version="0.0.0"/> +<unit id="org.eclipse.jdt.core" version="0.0.0"/> +<unit id="org.eclipse.jdt.debug.ui" version="0.0.0"/> +<unit id="org.eclipse.jdt.ui" version="0.0.0"/> +<unit id="org.eclipse.pde.runtime" version="0.0.0"/> +<unit id="org.eclipse.platform.ide" version="0.0.0"/> +<unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ui.tests.harness" version="0.0.0"/> +<repository location="https://download.eclipse.org/eclipse/updates/4.16/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.license.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/cbi/updates/license"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtbot.eclipse.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtbot.feature.group" version="0.0.0"/> +<unit id="org.eclipse.dstore.core" version="0.0.0"/> +<unit id="org.eclipse.jgit.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ptp.rdt.sync.feature.group" version="0.0.0"/> +<unit id="org.eclipse.remote.feature.group" version="0.0.0"/> +<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.zest.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> +<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> +<unit id="org.eclipse.lsp4e" version="0.0.0"/> +<unit id="org.eclipse.tm4e.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/releases/2020-06/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.reddeer.eclipse.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.tests.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.ui.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/reddeer/snapshots/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtchart.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtchart.feature.source.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/swtchart/releases/0.12.0/repository"/> +</location> +</locations> +<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> +<launcherArgs> +<vmArgs>-Xms40m +-Xmx512M</vmArgs> +<programArgs>-consolelog</programArgs> +</launcherArgs> +</target> \ No newline at end of file diff --git a/releng/org.eclipse.linuxtools.target/linuxtools-e4.17.target b/releng/org.eclipse.linuxtools.target/linuxtools-e4.17.target new file mode 100644 index 000000000..5fe213c9c --- /dev/null +++ b/releng/org.eclipse.linuxtools.target/linuxtools-e4.17.target @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<?pde version="3.8"?> +<target name="linuxtools-e4.17" sequenceNumber="3"> +<locations> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-core" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-databind" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.datatype.jackson-datatype-guava" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.10.3.v20200512-1600"/> +<unit id="com.github.jnr.constants" version="0.9.15.v20200501-1917"/> +<unit id="com.github.jnr.enxio" version="0.25.0.v20200501-1917"/> +<unit id="com.github.jnr.ffi" version="2.1.12.v20200513-1859"/> +<unit id="com.github.jnr.jffi" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.jffi.native" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.posix" version="3.0.54.v20200501-1917"/> +<unit id="com.github.jnr.unixsocket" version="0.28.0.v20200501-1917"/> +<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> +<unit id="com.google.guava" version="27.1.0.v20190517-1946"/> +<unit id="org.mandas.docker-client" version="3.2.1.v20200519-1937"/> +<unit id="org.mandas.docker-client.source" version="3.2.1.v20200519-1937"/> +<unit id="javassist" version="3.13.0.GA_v201209210905"/> +<unit id="javax.ws.rs" version="2.1.6.v20200505-2127"/> +<unit id="jakarta.xml.bind" version="2.3.3.v20200525-2159"/> +<unit id="javax.xml.stream" version="1.0.1.v201004272200"/> +<unit id="com.github.jnr.x86asm" version="1.0.2.v20200501-1917"/> +<unit id="org.aopalliance" version="1.0.0.v201105210816"/> +<unit id="org.apache.commons.codec" version="1.13.0.v20200108-0001"/> +<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> +<unit id="org.apache.commons.io" version="2.6.0.v20190123-2029"/> +<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/> +<unit id="org.apache.httpcomponents.httpclient" version="4.5.10.v20200114-1512"/> +<unit id="org.apache.httpcomponents.httpcore" version="4.4.12.v20200108-1212"/> +<unit id="org.apache.xerces" version="2.9.0.v201101211617"/> +<unit id="org.assertj" version="3.14.0.v20200120-1926"/> +<unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/> +<unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/> +<unit id="org.cyberneko.html" version="1.9.14.v201105210654"/> +<unit id="org.glassfish.hk2.api" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.locator" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.osgi-resource-locator" version="1.0.3.v20200509-0149"/> +<unit id="org.glassfish.hk2.utils" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.apache.connector" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet.core" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-client" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-common" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-server" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.ext.entityfiltering" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.inject.jersey-hk2" version="2.30.1.v20200512-1802"/> +<unit id="org.glassfish.jersey.media.jersey-media-json-jackson" version="2.30.1.v20200513-1859"/> +<unit id="org.mockito" version="2.23.0.v20200310-1642"/> +<unit id="org.objectweb.asm" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.analysis" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.tree" version="8.0.1.v20200420-1007"/> +<unit id="org.objectweb.asm.util" version="8.0.1.v20200420-1007"/> +<unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/> +<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20200817205214/repository"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.jdt.annotation" version="0.0.0"/> +<unit id="org.eclipse.jdt.core" version="0.0.0"/> +<unit id="org.eclipse.jdt.debug.ui" version="0.0.0"/> +<unit id="org.eclipse.jdt.ui" version="0.0.0"/> +<unit id="org.eclipse.jdt.junit4.runtime" version="0.0.0"/> +<unit id="org.eclipse.pde.runtime" version="0.0.0"/> +<unit id="org.eclipse.platform.ide" version="0.0.0"/> +<unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ui.tests.harness" version="0.0.0"/> +<repository location="https://download.eclipse.org/eclipse/updates/4.17/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.license.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/cbi/updates/license"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> +<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> +<repository location="https://ci.eclipse.org/cdt/job/cdt-master/lastSuccessfulBuild/artifact/releng/org.eclipse.cdt.repo/target/repository/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtbot.eclipse.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtbot.feature.group" version="0.0.0"/> +<unit id="org.eclipse.dstore.core" version="0.0.0"/> +<unit id="org.eclipse.jgit.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ptp.rdt.sync.feature.group" version="0.0.0"/> +<unit id="org.eclipse.remote.feature.group" version="0.0.0"/> +<unit id="org.eclipse.zest.feature.group" version="0.0.0"/> +<unit id="org.eclipse.lsp4e" version="0.0.0"/> +<unit id="org.eclipse.tm4e.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/staging/2020-09/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> +<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> +<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> +<repository location="https://ci.eclipse.org/cdt/job/cdt-master/lastSuccessfulBuild/artifact/releng/org.eclipse.cdt.repo/target/repository/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.reddeer.eclipse.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.tests.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.ui.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/reddeer/releases/latest/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.wildwebdeveloper.embedder.node.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/wildwebdeveloper/snapshots/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtchart.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtchart.feature.source.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/swtchart/integration/develop/repository"/> +</location> +</locations> +<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> +<launcherArgs> +<vmArgs>-Xms40m +-Xmx512M</vmArgs> +<programArgs>-consolelog</programArgs> +</launcherArgs> +</target> diff --git a/releng/org.eclipse.linuxtools.target/linuxtools-e4.18.target b/releng/org.eclipse.linuxtools.target/linuxtools-e4.18.target new file mode 100644 index 000000000..866880924 --- /dev/null +++ b/releng/org.eclipse.linuxtools.target/linuxtools-e4.18.target @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<?pde version="3.8"?> +<target name="linuxtools-e4.18" sequenceNumber="4"> +<locations> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-core" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.core.jackson-databind" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.datatype.jackson-datatype-guava" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.10.3.v20200512-1600"/> +<unit id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.10.3.v20200512-1600"/> +<unit id="com.github.jnr.constants" version="0.9.15.v20200501-1917"/> +<unit id="com.github.jnr.enxio" version="0.25.0.v20200501-1917"/> +<unit id="com.github.jnr.ffi" version="2.1.12.v20200513-1859"/> +<unit id="com.github.jnr.jffi" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.jffi.native" version="1.2.23.v20200501-1917"/> +<unit id="com.github.jnr.posix" version="3.0.54.v20200501-1917"/> +<unit id="com.github.jnr.unixsocket" version="0.28.0.v20200501-1917"/> +<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> +<unit id="com.google.guava" version="27.1.0.v20190517-1946"/> +<unit id="org.mandas.docker-client" version="3.2.1.v20200519-1937"/> +<unit id="org.mandas.docker-client.source" version="3.2.1.v20200519-1937"/> +<unit id="javassist" version="3.13.0.GA_v201209210905"/> +<unit id="javax.ws.rs" version="2.1.6.v20200505-2127"/> +<unit id="jakarta.xml.bind" version="2.3.3.v20201118-1818"/> +<unit id="javax.xml.stream" version="1.0.1.v201004272200"/> +<unit id="com.github.jnr.x86asm" version="1.0.2.v20200501-1917"/> +<unit id="org.aopalliance" version="1.0.0.v201105210816"/> +<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> +<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> +<unit id="org.apache.commons.io" version="2.6.0.v20190123-2029"/> +<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/> +<unit id="org.apache.httpcomponents.httpclient" version="4.5.10.v20200830-2311"/> +<unit id="org.apache.httpcomponents.httpcore" version="4.4.12.v20200108-1212"/> +<unit id="org.apache.xerces" version="2.9.0.v201101211617"/> +<unit id="org.assertj" version="3.14.0.v20200120-1926"/> +<unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/> +<unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/> +<unit id="org.cyberneko.html" version="1.9.14.v201105210654"/> +<unit id="org.glassfish.hk2.api" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.locator" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.hk2.osgi-resource-locator" version="1.0.3.v20200509-0149"/> +<unit id="org.glassfish.hk2.utils" version="2.6.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.apache.connector" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.containers.servlet.core" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-client" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-common" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.core.jersey-server" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.ext.entityfiltering" version="2.30.1.v20200513-1859"/> +<unit id="org.glassfish.jersey.inject.jersey-hk2" version="2.30.1.v20200512-1802"/> +<unit id="org.glassfish.jersey.media.jersey-media-json-jackson" version="2.30.1.v20200513-1859"/> +<unit id="org.mockito" version="2.23.0.v20200310-1642"/> +<unit id="org.objectweb.asm" version="9.0.0.v20201001-1419"/> +<unit id="org.objectweb.asm.analysis" version="9.0.0.v20201001-1419"/> +<unit id="org.objectweb.asm.tree" version="9.0.0.v20201001-1419"/> +<unit id="org.objectweb.asm.util" version="9.0.0.v20201001-1419"/> +<unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/> +<repository location="https://download.eclipse.org/tools/orbit/downloads/2020-12"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.jdt.annotation" version="0.0.0"/> +<unit id="org.eclipse.jdt.core" version="0.0.0"/> +<unit id="org.eclipse.jdt.debug.ui" version="0.0.0"/> +<unit id="org.eclipse.jdt.ui" version="0.0.0"/> +<unit id="org.eclipse.jdt.junit4.runtime" version="0.0.0"/> +<unit id="org.eclipse.pde.runtime" version="0.0.0"/> +<unit id="org.eclipse.platform.ide" version="0.0.0"/> +<unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ui.tests.harness" version="0.0.0"/> +<repository location="https://download.eclipse.org/eclipse/updates/4.18-I-builds/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.license.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/cbi/updates/license"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> +<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> +<repository location="https://ci.eclipse.org/cdt/job/cdt-master/lastSuccessfulBuild/artifact/releng/org.eclipse.cdt.repo/target/repository/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtbot.eclipse.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtbot.feature.group" version="0.0.0"/> +<unit id="org.eclipse.dstore.core" version="0.0.0"/> +<unit id="org.eclipse.jgit.feature.group" version="0.0.0"/> +<unit id="org.eclipse.ptp.rdt.sync.feature.group" version="0.0.0"/> +<unit id="org.eclipse.remote.feature.group" version="0.0.0"/> +<unit id="org.eclipse.zest.feature.group" version="0.0.0"/> +<unit id="org.eclipse.lsp4e" version="0.0.0"/> +<unit id="org.eclipse.tm4e.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/staging/2020-12/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.cdt.autotools.feature.group" version="0.0.0"/> +<unit id="org.eclipse.cdt.feature.group" version="0.0.0"/> +<unit id="org.eclipse.launchbar.feature.group" version="0.0.0"/> +<unit id="org.eclipse.tm.terminal.feature.feature.group" version="0.0.0"/> +<repository location="https://ci.eclipse.org/cdt/job/cdt-master/lastSuccessfulBuild/artifact/releng/org.eclipse.cdt.repo/target/repository/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.reddeer.eclipse.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.tests.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.reddeer.ui.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/reddeer/releases/latest/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.wildwebdeveloper.embedder.node.feature.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/wildwebdeveloper/snapshots/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="org.eclipse.swtchart.feature.feature.group" version="0.0.0"/> +<unit id="org.eclipse.swtchart.feature.source.feature.group" version="0.0.0"/> +<repository location="https://download.eclipse.org/swtchart/integration/develop/repository"/> +</location> +</locations> +<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> +<launcherArgs> +<vmArgs>-Xms40m +-Xmx512M</vmArgs> +<programArgs>-consolelog</programArgs> +</launcherArgs> +</target> diff --git a/releng/org.eclipse.linuxtools.target/pom.xml b/releng/org.eclipse.linuxtools.target/pom.xml index 5e1b1594b..574dcc198 100644 --- a/releng/org.eclipse.linuxtools.target/pom.xml +++ b/releng/org.eclipse.linuxtools.target/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.eclipse.linuxtools.releng</groupId> <artifactId>linuxtools-releng-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools</groupId> @@ -31,9 +31,9 @@ <configuration> <artifacts> <artifact> - <file>linuxtools-e4.13.target</file> + <file>linuxtools-e4.17.target</file> <type>target</type> - <classifier>linuxtools-e4.13</classifier> + <classifier>linuxtools-e4.17</classifier> </artifact> <!-- More targets could be added here --> </artifacts> @@ -43,4 +43,4 @@ </plugin> </plugins> </build> -</project> \ No newline at end of file +</project> diff --git a/releng/pom.xml b/releng/pom.xml index 0d4b3b33d..6532d7d21 100644 --- a/releng/pom.xml +++ b/releng/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.releng</groupId> diff --git a/rpm/org.eclipse.linuxtools.rpm-feature/feature.xml b/rpm/org.eclipse.linuxtools.rpm-feature/feature.xml index de9407d9b..fc26bea37 100644 --- a/rpm/org.eclipse.linuxtools.rpm-feature/feature.xml +++ b/rpm/org.eclipse.linuxtools.rpm-feature/feature.xml @@ -14,7 +14,7 @@ <feature id="org.eclipse.linuxtools.rpm" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%provider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/rpm/org.eclipse.linuxtools.rpm-feature/pom.xml b/rpm/org.eclipse.linuxtools.rpm-feature/pom.xml index d2419eced..ada1e394d 100644 --- a/rpm/org.eclipse.linuxtools.rpm-feature/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools RPM Tools Feature</name> diff --git a/rpm/org.eclipse.linuxtools.rpm.core.tests/.classpath b/rpm/org.eclipse.linuxtools.rpm.core.tests/.classpath index 43b986286..a621c21ac 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core.tests/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.core.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/rpm/org.eclipse.linuxtools.rpm.core.tests/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.core.tests/.settings/org.eclipse.jdt.core.prefs index 080126d48..906e9ae50 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core.tests/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.core.tests/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.core.tests/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.core.tests/META-INF/MANIFEST.MF index 556a14ee9..30de56c7d 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core.tests/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.core.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %Bundle-Name.0 Bundle-SymbolicName: org.eclipse.linuxtools.rpm.core.tests;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.rpm.core;bundle-version="0.4.3" Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, diff --git a/rpm/org.eclipse.linuxtools.rpm.core.tests/pom.xml b/rpm/org.eclipse.linuxtools.rpm.core.tests/pom.xml index d97e52918..e8c0b4f39 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core.tests/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.core.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.core.tests</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.core/.classpath b/rpm/org.eclipse.linuxtools.rpm.core/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpm.core/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.core/.settings/org.eclipse.jdt.core.prefs index 6149eb984..7c23b2da0 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.core/.settings/org.eclipse.jdt.core.prefs @@ -9,9 +9,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -81,6 +82,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -113,4 +115,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.core/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.core/META-INF/MANIFEST.MF index 0b16f0e83..4467d5a9f 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.core/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 3.1.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.core.resources, org.eclipse.core.runtime, org.eclipse.ui, diff --git a/rpm/org.eclipse.linuxtools.rpm.core/pom.xml b/rpm/org.eclipse.linuxtools.rpm.core/pom.xml index 7f5c4e622..b4570349a 100644 --- a/rpm/org.eclipse.linuxtools.rpm.core/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.core</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.classpath b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.classpath index 43b986286..a621c21ac 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.settings/org.eclipse.jdt.core.prefs index 53b13434f..2df0a321f 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/.settings/org.eclipse.jdt.core.prefs @@ -9,9 +9,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -25,6 +25,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -68,6 +69,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -100,4 +102,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/META-INF/MANIFEST.MF index 358e28ba4..18f524b4e 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.linuxtools.rpm.createrepo.tests Bundle-Version: 1.0.0.qualifier Fragment-Host: org.eclipse.linuxtools.rpm.createrepo;bundle-version="1.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %Bundle-Vendor Require-Bundle: org.junit;bundle-version="4.8.1", org.eclipse.swtbot.eclipse.finder, diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/pom.xml b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/pom.xml index 1c5e17616..8b27c6815 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.createrepo.tests</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/form/tests/ICreaterepoTestConstants.java b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/form/tests/ICreaterepoTestConstants.java index deb95d6b8..ec92a67e9 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/form/tests/ICreaterepoTestConstants.java +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/form/tests/ICreaterepoTestConstants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013, 2018 Red Hat Inc. and others. + * Copyright (c) 2013, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -40,6 +40,7 @@ public interface ICreaterepoTestConstants { String DEFAULTS = "Restore Defaults"; //$NON-NLS-1$ String PROPERTIES = "Properties"; //$NON-NLS-1$ String PROPERTIES_SHELL = "Properties for %s"; //$NON-NLS-1$ + String SELECT_A_WIZARD = "Select a wizard"; //$NON-NLS-1$ /* * Navigator controls diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/wizard/tests/CreaterepoWizardTest.java b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/wizard/tests/CreaterepoWizardTest.java index dbda4a3c3..50839f061 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/wizard/tests/CreaterepoWizardTest.java +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo.tests/src/org/eclipse/linuxtools/internal/rpm/createrepo/wizard/tests/CreaterepoWizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013, 2018 Red Hat Inc. and others. + * Copyright (c) 2013, 2020 Red Hat Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -102,7 +102,7 @@ public class CreaterepoWizardTest { public void testCreaterepoWizardProjectCreation() throws CoreException, IOException { // go through the process of creating a new createrepo project bot.menu(ICreaterepoTestConstants.FILE).menu(ICreaterepoTestConstants.NEW).menu(ICreaterepoTestConstants.OTHER).click(); - SWTBotShell shell = bot.shell(ICreaterepoTestConstants.NEW); + SWTBotShell shell = bot.shell(ICreaterepoTestConstants.SELECT_A_WIZARD); shell.activate(); bot.text().setText(ICreaterepoTestConstants.CREATEREPO_PROJECT_WIZARD); bot.waitUntil(new TestUtils.NodeAvailableAndSelect(bot.tree(), ICreaterepoTestConstants.CREATEREPO_PROJECT_CATEGORY, ICreaterepoTestConstants.CREATEREPO_PROJECT_WIZARD)); diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo/.classpath b/rpm/org.eclipse.linuxtools.rpm.createrepo/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.createrepo/.settings/org.eclipse.jdt.core.prefs index 9c6a776ab..e12c70b37 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -83,6 +84,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -115,4 +117,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.createrepo/META-INF/MANIFEST.MF index 4cea8186a..04d2d43e0 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo/META-INF/MANIFEST.MF @@ -15,6 +15,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, org.eclipse.linuxtools.rpm.core, org.eclipse.linuxtools.rpm.ui.editor -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Automatic-Module-Name: org.eclipse.linuxtools.rpm.createrepo diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo/pom.xml b/rpm/org.eclipse.linuxtools.rpm.createrepo/pom.xml index b25cfac23..c973b7e01 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.createrepo</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.createrepo/src/org/eclipse/linuxtools/internal/rpm/createrepo/Activator.java b/rpm/org.eclipse.linuxtools.rpm.createrepo/src/org/eclipse/linuxtools/internal/rpm/createrepo/Activator.java index 6ba40f215..25f9e42a0 100644 --- a/rpm/org.eclipse.linuxtools.rpm.createrepo/src/org/eclipse/linuxtools/internal/rpm/createrepo/Activator.java +++ b/rpm/org.eclipse.linuxtools.rpm.createrepo/src/org/eclipse/linuxtools/internal/rpm/createrepo/Activator.java @@ -15,6 +15,7 @@ package org.eclipse.linuxtools.internal.rpm.createrepo; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -58,7 +59,7 @@ public class Activator extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } /** diff --git a/rpm/org.eclipse.linuxtools.rpm.rpmlint/.classpath b/rpm/org.eclipse.linuxtools.rpm.rpmlint/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpm.rpmlint/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.rpmlint/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpm.rpmlint/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.rpmlint/.settings/org.eclipse.jdt.core.prefs index f74677f59..c8da9bfd7 100644 --- a/rpm/org.eclipse.linuxtools.rpm.rpmlint/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.rpmlint/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -85,6 +86,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -120,4 +122,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.rpmlint/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.rpmlint/META-INF/MANIFEST.MF index b57e81030..64209db90 100644 --- a/rpm/org.eclipse.linuxtools.rpm.rpmlint/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.rpmlint/META-INF/MANIFEST.MF @@ -14,6 +14,6 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui.console;bundle-version="3.3.0", org.eclipse.linuxtools.rpm.core Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %provider Automatic-Module-Name: org.eclipse.linuxtools.rpm.rpmlint diff --git a/rpm/org.eclipse.linuxtools.rpm.rpmlint/pom.xml b/rpm/org.eclipse.linuxtools.rpm.rpmlint/pom.xml index 501f054e7..4dbfec6a6 100644 --- a/rpm/org.eclipse.linuxtools.rpm.rpmlint/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.rpmlint/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.rpmlint</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor.doc/pom.xml b/rpm/org.eclipse.linuxtools.rpm.ui.editor.doc/pom.xml index 463fd22b3..aa82a46bf 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor.doc/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor.doc/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.ui.editor.doc</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.classpath b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.classpath index 43b986286..a621c21ac 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.settings/org.eclipse.jdt.core.prefs index 093d05df8..dabca7cd1 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/.settings/org.eclipse.jdt.core.prefs @@ -9,9 +9,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -25,6 +25,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -68,6 +69,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -100,4 +102,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/META-INF/MANIFEST.MF index e783f9938..faadb7cee 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/META-INF/MANIFEST.MF @@ -9,6 +9,6 @@ Require-Bundle: org.junit;bundle-version="4.8.1", org.eclipse.core.resources Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %provider Automatic-Module-Name: org.eclipse.linuxtools.rpm.ui.editor.tests diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/pom.xml b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/pom.xml index 85611b805..e42cfa8a9 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.ui.editor.tests</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/.classpath b/rpm/org.eclipse.linuxtools.rpm.ui.editor/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.ui.editor/.settings/org.eclipse.jdt.core.prefs index 2dbb62c3f..a33a5175e 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -83,6 +84,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -115,4 +117,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.ui.editor/META-INF/MANIFEST.MF index 397f5fdeb..3f32c405f 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/META-INF/MANIFEST.MF @@ -15,7 +15,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.ide, org.eclipse.ui.console, org.eclipse.linuxtools.changelog.core, - com.ibm.icu, org.eclipse.compare;bundle-version="3.4.0", org.eclipse.linuxtools.rpm.core, org.eclipse.ui.console, @@ -24,6 +23,6 @@ Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.rpm.ui.editor.markers, org.eclipse.linuxtools.rpm.ui.editor.parser, org.eclipse.linuxtools.rpm.ui.editor.wizards -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %provider Automatic-Module-Name: org.eclipse.linuxtools.rpm.ui.editor diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/pom.xml b/rpm/org.eclipse.linuxtools.rpm.ui.editor/pom.xml index 0223ed364..84c7607fb 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.ui.editor</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java index d4b5cd253..86df03d1e 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java @@ -24,6 +24,7 @@ import java.util.List; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.text.templates.ContextTypeRegistry; import org.eclipse.jface.text.templates.persistence.TemplateStore; import org.eclipse.swt.graphics.Image; @@ -170,7 +171,7 @@ public class Activator extends AbstractUIPlugin { ImageRegistry registry = getImageRegistry(); Image image = registry.get(imageRelativePath); if (image == null) { - ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, imageRelativePath); + ImageDescriptor desc = ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, imageRelativePath).get(); registry.put(imageRelativePath, desc); image = registry.get(imageRelativePath); } diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/hyperlink/SpecfileElementHyperlinkDetector.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/hyperlink/SpecfileElementHyperlinkDetector.java index 11d5e4839..1b2cd8f3d 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/hyperlink/SpecfileElementHyperlinkDetector.java +++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/hyperlink/SpecfileElementHyperlinkDetector.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink; +import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,8 +39,6 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; -import com.ibm.icu.util.StringTokenizer; - /** * Hyperlink detector for source, patch and defines in the spec file. * diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/.classpath b/rpm/org.eclipse.linuxtools.rpm.ui/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui/.classpath +++ b/rpm/org.eclipse.linuxtools.rpm.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpm.ui/.settings/org.eclipse.jdt.core.prefs index 50680df2d..899f0b9fd 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpm.ui/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -82,6 +83,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -114,4 +116,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpm.ui/META-INF/MANIFEST.MF index e117ae109..64cc7716c 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpm.ui/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.rpm.ui;singleton:=true Bundle-Version: 1.1.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui.ide, org.eclipse.jface.text, org.eclipse.core.runtime, diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/pom.xml b/rpm/org.eclipse.linuxtools.rpm.ui/pom.xml index 27aa0cd4f..b79cb0705 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpm.ui/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-rpm-parent</artifactId> <groupId>org.eclipse.linuxtools.rpm</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpm.ui</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/NewProjectCreationPage.java b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/NewProjectCreationPage.java index cb4f5f702..a4980f444 100644 --- a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/NewProjectCreationPage.java +++ b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/NewProjectCreationPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2018 Red Hat, Inc. + * Copyright (c) 2011, 2020 Red Hat, Inc. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -29,8 +29,10 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkingSet; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; import org.eclipse.ui.dialogs.WorkingSetConfigurationBlock; +import org.osgi.framework.FrameworkUtil; /** * Standard page for project creation adding some rpm specific controls. @@ -177,7 +179,8 @@ public class NewProjectCreationPage extends WizardNewProjectCreationPage { public WorkingSetGroup() { String[] workingSetIds = new String[] { "org.eclipse.ui.resourceWorkingSetPage" }; //$NON-NLS-1$ workingSetBlock = new WorkingSetConfigurationBlock(workingSetIds, - Activator.getDefault().getDialogSettings()); + PlatformUI.getDialogSettingsProvider(FrameworkUtil.getBundle(NewProjectCreationPage.class)) + .getDialogSettings()); } public Control createControl(Composite composite) { diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/.classpath b/rpm/org.eclipse.linuxtools.rpmstubby/.classpath index 43b986286..1db08c6b4 100644 --- a/rpm/org.eclipse.linuxtools.rpmstubby/.classpath +++ b/rpm/org.eclipse.linuxtools.rpmstubby/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/.settings/org.eclipse.jdt.core.prefs b/rpm/org.eclipse.linuxtools.rpmstubby/.settings/org.eclipse.jdt.core.prefs index d4b4965c3..f7a361ab9 100644 --- a/rpm/org.eclipse.linuxtools.rpmstubby/.settings/org.eclipse.jdt.core.prefs +++ b/rpm/org.eclipse.linuxtools.rpmstubby/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -82,6 +83,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -114,4 +116,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/META-INF/MANIFEST.MF b/rpm/org.eclipse.linuxtools.rpmstubby/META-INF/MANIFEST.MF index d6475d084..9f313eb2f 100644 --- a/rpm/org.eclipse.linuxtools.rpmstubby/META-INF/MANIFEST.MF +++ b/rpm/org.eclipse.linuxtools.rpmstubby/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.core.resources, org.eclipse.ui.ide -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.rpmstubby Automatic-Module-Name: org.eclipse.linuxtools.rpmstubby diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/pom.xml b/rpm/org.eclipse.linuxtools.rpmstubby/pom.xml index 3d6f07da2..9e81d9905 100644 --- a/rpm/org.eclipse.linuxtools.rpmstubby/pom.xml +++ b/rpm/org.eclipse.linuxtools.rpmstubby/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.linuxtools.rpm</groupId> <artifactId>linuxtools-rpm-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.rpmstubby</artifactId> diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java index 04ab3c647..1122a88d4 100644 --- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java +++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java @@ -64,9 +64,7 @@ public class PythonEggParser { String setupLine = ""; List<String> vars = new ArrayList<>(); int offset = 0; - try { - RandomAccessFile raf = new RandomAccessFile(file.getRawLocation().makeAbsolute().toFile(), "r"); - + try (RandomAccessFile raf = new RandomAccessFile(file.getRawLocation().makeAbsolute().toFile(), "r")){ // end if cannot find setup( long bytesToSkip = findStartSetup(raf); if (bytesToSkip == -1) { @@ -116,8 +114,6 @@ public class PythonEggParser { } resolveVariables(variables, setupOptions); - - raf.close(); } catch (IOException e) { StubbyLog.logError(e); } diff --git a/rpm/pom.xml b/rpm/pom.xml index e058fba26..4183b1e4b 100644 --- a/rpm/pom.xml +++ b/rpm/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.rpm</groupId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph-feature/feature.xml b/systemtap/org.eclipse.linuxtools.callgraph-feature/feature.xml index 4c8494b9f..8754b11da 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph-feature/feature.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.callgraph.feature" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" os="linux" license-feature="org.eclipse.license" diff --git a/systemtap/org.eclipse.linuxtools.callgraph-feature/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph-feature/pom.xml index 8b2259565..4cd02805b 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph-feature/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph-feature/pom.xml @@ -14,12 +14,12 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools C/C++ Call Graph Visualization Feature</name> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/.classpath b/systemtap/org.eclipse.linuxtools.callgraph.core/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/.classpath +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.core.prefs index 7c6374b7b..1938bdc30 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.ui.prefs b/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.ui.prefs similarity index 85% rename from containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.ui.prefs rename to systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.ui.prefs index 1cbfac22d..79881a251 100644 --- a/containers/org.eclipse.linuxtools.docker.editor/.settings/org.eclipse.jdt.ui.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/.settings/org.eclipse.jdt.ui.prefs @@ -13,11 +13,11 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false +sp_cleanup.format_source_code_changes_only=true sp_cleanup.insert_inferred_type_arguments=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false @@ -28,16 +28,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_type_arguments=false -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -49,6 +53,7 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false sp_cleanup.use_lambda=true @@ -57,3 +62,4 @@ sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.callgraph.core/META-INF/MANIFEST.MF index 926a7c870..7ef3612c5 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-Activator: org.eclipse.linuxtools.internal.callgraph.core.CallgraphCorePl Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Export-Package: org.eclipse.linuxtools.internal.callgraph.core Import-Package: org.eclipse.cdt.core.model, org.eclipse.core.resources, diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph.core/pom.xml index f2d7fc8f5..0135adad1 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.core</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapView.java b/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapView.java index 3e2315faf..e3570a5b7 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapView.java +++ b/systemtap/org.eclipse.linuxtools.callgraph.core/src/org/eclipse/linuxtools/internal/callgraph/core/SystemTapView.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. and others. - * + * Copyright (c) 2009, 2019 Red Hat, Inc. and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -34,6 +34,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.tools.launch.core.factory.RuntimeProcessFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -43,7 +44,6 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.progress.UIJob; public abstract class SystemTapView extends ViewPart { @@ -268,13 +268,14 @@ public abstract class SystemTapView extends ViewPart { protected void addKillButton() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); - kill = new Action(Messages.getString("SystemTapView.StopScript"), //$NON-NLS-1$ - AbstractUIPlugin.imageDescriptorFromPlugin(CallgraphCorePlugin.PLUGIN_ID, "icons/progress_stop.gif")) { //$NON-NLS-1$ - @Override - public void run() { - getParser().cancelJob(); - } - }; + kill = new Action(Messages.getString("SystemTapView.StopScript"), //$NON-NLS-1$ + ResourceLocator.imageDescriptorFromBundle(CallgraphCorePlugin.PLUGIN_ID, "icons/progress_stop.gif") //$NON-NLS-1$ + .get()) { + @Override + public void run() { + getParser().cancelJob(); + } + }; mgr.add(kill); setKillButtonEnabled(false); } diff --git a/systemtap/org.eclipse.linuxtools.callgraph.docs/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph.docs/pom.xml index 4beb271e7..ce264ca1b 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.docs/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph.docs/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.docs</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.classpath b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.classpath index 43b986286..a621c21ac 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.settings/org.eclipse.jdt.core.prefs index c2c83d84b..efb8f9cf1 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/META-INF/MANIFEST.MF index 2b9654de3..30486e20b 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.callgraph.launch.tests Bundle-Version: 1.0.0.qualifier Require-Bundle: org.junit;bundle-version="4.7.0" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.callgraph.launch Import-Package: org.eclipse.linuxtools.profiling.tests, org.eclipse.linuxtools.tools.launch.core.factory diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/pom.xml index aa4db02c6..d6f728dce 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch.tests/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.launch.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch/.classpath b/systemtap/org.eclipse.linuxtools.callgraph.launch/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch/.classpath +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.callgraph.launch/.settings/org.eclipse.jdt.core.prefs index 181a73534..59425b130 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.callgraph.launch/META-INF/MANIFEST.MF index 34c0a3680..a80f641dc 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.cdt.ui, org.eclipse.linuxtools.tools.launch.core Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.cdt.core.model, org.eclipse.cdt.debug.core, org.eclipse.cdt.launch, diff --git a/systemtap/org.eclipse.linuxtools.callgraph.launch/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph.launch/pom.xml index b20a4154d..feebaa56c 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.launch/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph.launch/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.launch</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.tests/.classpath b/systemtap/org.eclipse.linuxtools.callgraph.tests/.classpath index 43b986286..a621c21ac 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.callgraph.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.callgraph.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.callgraph.tests/.settings/org.eclipse.jdt.core.prefs index c2c83d84b..efb8f9cf1 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.callgraph.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.callgraph.tests/META-INF/MANIFEST.MF index f53f78da3..d6129cf9c 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.callgraph.tests/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.zest.core;bundle-version="1.2.0", org.eclipse.zest.layouts;bundle-version="1.1.0" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.cdt.core.model, org.eclipse.linuxtools.internal.callgraph.core Bundle-Vendor: %Bundle-Vendor diff --git a/systemtap/org.eclipse.linuxtools.callgraph.tests/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph.tests/pom.xml index aad61e9b5..ed1dd40c7 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph.tests/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph/.classpath b/systemtap/org.eclipse.linuxtools.callgraph/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/.classpath +++ b/systemtap/org.eclipse.linuxtools.callgraph/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.callgraph/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.callgraph/.settings/org.eclipse.jdt.core.prefs index 7844a0e4b..eac5dff1b 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.callgraph/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -97,4 +99,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.callgraph/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.callgraph/META-INF/MANIFEST.MF index 49f35ab61..e447b7ae6 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.callgraph/META-INF/MANIFEST.MF @@ -8,7 +8,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.zest.layouts;bundle-version="1.1.0", org.eclipse.zest.core;bundle-version="1.2.0" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Export-Package: org.eclipse.linuxtools.internal.callgraph, org.eclipse.linuxtools.internal.callgraph.graphlisteners Import-Package: org.eclipse.cdt.core.model, diff --git a/systemtap/org.eclipse.linuxtools.callgraph/pom.xml b/systemtap/org.eclipse.linuxtools.callgraph/pom.xml index 6abcf9ee0..bbd9b5e6c 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/pom.xml +++ b/systemtap/org.eclipse.linuxtools.callgraph/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.callgraph</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/CallgraphView.java b/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/CallgraphView.java index 2a4fac7e4..d588c103f 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/CallgraphView.java +++ b/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/CallgraphView.java @@ -33,6 +33,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.callgraph.core.PluginConstants; import org.eclipse.linuxtools.internal.callgraph.core.SystemTapParser; import org.eclipse.linuxtools.internal.callgraph.core.SystemTapUIErrorMessages; @@ -52,7 +53,6 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * The SystemTap View for displaying output of the 'stap' command, and acts @@ -1026,7 +1026,7 @@ public class CallgraphView extends SystemTapView { } private static ImageDescriptor getImageDescriptor(String path) { - return AbstractUIPlugin.imageDescriptorFromPlugin(CallGraphConstants.PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(CallGraphConstants.PLUGIN_ID, path).get(); } diff --git a/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/treeviewer/StapTreeLabelProvider.java b/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/treeviewer/StapTreeLabelProvider.java index f8db2c6fc..1ecb5e461 100644 --- a/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/treeviewer/StapTreeLabelProvider.java +++ b/systemtap/org.eclipse.linuxtools.callgraph/src/org/eclipse/linuxtools/internal/callgraph/treeviewer/StapTreeLabelProvider.java @@ -12,22 +12,24 @@ *******************************************************************************/ package org.eclipse.linuxtools.internal.callgraph.treeviewer; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.linuxtools.internal.callgraph.CallGraphConstants; import org.eclipse.linuxtools.internal.callgraph.StapData; import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class StapTreeLabelProvider extends LabelProvider { @Override public Image getImage(Object element) { Image im = null; - if ( ((StapData) element).isMarked()) { - im = AbstractUIPlugin.imageDescriptorFromPlugin(CallGraphConstants.PLUGIN_ID, "/icons/public_co.gif").createImage(); //$NON-NLS-1$ - } else { - im = AbstractUIPlugin.imageDescriptorFromPlugin(CallGraphConstants.PLUGIN_ID, "/icons/compare_method.gif").createImage(); //$NON-NLS-1$ - } + if (((StapData) element).isMarked()) { + im = ResourceLocator.imageDescriptorFromBundle(CallGraphConstants.PLUGIN_ID, "/icons/public_co.gif").get() //$NON-NLS-1$ + .createImage(); + } else { + im = ResourceLocator.imageDescriptorFromBundle(CallGraphConstants.PLUGIN_ID, "/icons/compare_method.gif") //$NON-NLS-1$ + .get().createImage(); + } return im; } diff --git a/systemtap/org.eclipse.linuxtools.systemtap-feature/feature.xml b/systemtap/org.eclipse.linuxtools.systemtap-feature/feature.xml index 32d8004a1..e6443f4cc 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap-feature/feature.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.systemtap" label="%description" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" os="linux" license-feature="org.eclipse.license" diff --git a/systemtap/org.eclipse.linuxtools.systemtap-feature/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap-feature/pom.xml index ff787391b..0962e9c3a 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap-feature/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap-feature/pom.xml @@ -14,12 +14,12 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools SystemTap IDE and Visualization Tools Feature</name> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.classpath index 0f2de4728..174b70493 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.settings/org.eclipse.jdt.core.prefs index c2c83d84b..efb8f9cf1 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/META-INF/MANIFEST.MF index a5fd189b8..782dc69ed 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/META-INF/MANIFEST.MF @@ -7,6 +7,6 @@ Bundle-Vendor: %bundleProvider Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Require-Bundle: org.junit;bundle-version="4.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.systemtap.graphing.core Automatic-Module-Name: org.eclipse.linuxtools.systemtap.graphing.core.tests diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/pom.xml index f1928e053..86e43dd3a 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.graphing.core.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.settings/org.eclipse.jdt.core.prefs index 859c5720b..8579a4826 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -19,6 +19,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -75,6 +76,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -106,4 +108,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/META-INF/MANIFEST.MF index 8eef5f4f9..92d4afe89 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/META-INF/MANIFEST.MF @@ -16,5 +16,5 @@ Export-Package: org.eclipse.linuxtools.systemtap.graphing.core, Require-Bundle: org.eclipse.linuxtools.systemtap.structures, org.eclipse.swt Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Automatic-Module-Name: org.eclipse.linuxtools.systemtap.graphing.core diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/pom.xml index 6afd68002..5cafc5800 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.graphing.core</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.core.prefs index 84614a54a..f0e85de7b 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -79,6 +80,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.ui.prefs b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.ui.prefs similarity index 81% rename from oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.ui.prefs rename to systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.ui.prefs index 5fce07982..690dcacd3 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.ui/.settings/org.eclipse.jdt.ui.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/.settings/org.eclipse.jdt.ui.prefs @@ -13,10 +13,12 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=true +sp_cleanup.insert_inferred_type_arguments=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false sp_cleanup.make_private_fields_final=true @@ -26,15 +28,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=true @@ -45,10 +52,14 @@ sp_cleanup.remove_unused_private_methods=true sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/META-INF/MANIFEST.MF index 815fcf6f5..c2b2d6d3c 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/META-INF/MANIFEST.MF @@ -18,9 +18,10 @@ Require-Bundle: org.eclipse.linuxtools.systemtap.graphing.core, org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.ui.forms, - org.swtchart, + org.eclipse.swtchart, org.eclipse.linuxtools.dataviewers.piechart, org.eclipse.linuxtools.dataviewers.charts Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Automatic-Module-Name: org.eclipse.linuxtools.systemtap.graphing.ui +Import-Package: org.eclipse.swtchart.extensions.charts diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/plugin.xml b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/plugin.xml index dbffe79b6..4a62c221a 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/plugin.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/plugin.xml @@ -25,43 +25,6 @@ <initializer class="org.eclipse.linuxtools.internal.systemtap.graphing.ui.preferences.PreferenceInitializer"/> </extension> - <extension - point="org.eclipse.ui.commands"> - <category - name="%category.file.name" - description="%category.file.desc" - id="org.eclipse.linuxtools.systemtap.graphing.ui.category.file"/> - <command - name="%command.save.name" - description="%command.save.desc" - categoryId="org.eclipse.linuxtools.systemtap.graphing.ui.category.file" - id="org.eclipse.linuxtools.systemtap.graphing.ui.commands.SaveGraphImage"/> - </extension> - - <extension - point="org.eclipse.ui.menus"> - <menuContribution - locationURI="toolbar:org.eclipse.linuxtools.systemtap.ui.ide.toolbar?after=chartGroup"> - <command - commandId="org.eclipse.linuxtools.systemtap.graphing.ui.commands.SaveGraphImage" - label="%command.save.name" - icon="icons/actions/chart-save.png"> - <visibleWhen checkEnabled="true"/> - </command> - </menuContribution> - </extension> - - <extension - point="org.eclipse.ui.handlers"> - <handler - class="org.eclipse.linuxtools.internal.systemtap.graphing.ui.handlers.SaveGraphImageHandler" - commandId="org.eclipse.linuxtools.systemtap.graphing.ui.commands.SaveGraphImage"> - <activeWhen> - <reference definitionId="org.eclipse.linuxtools.systemtap.graphing.ui.graphEditorEnablement"/> - </activeWhen> - </handler> - </extension> - <extension point="org.eclipse.ui.editors"> <editor diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/pom.xml index 26eba857f..3cfc30e87 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.graphing.ui</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/GraphingUIPlugin.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/GraphingUIPlugin.java index 5a694a11f..b946c7cd5 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/GraphingUIPlugin.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/GraphingUIPlugin.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2006, 2018 IBM Corporation and others. - * + * Copyright (c) 2006, 2019 IBM Corporation and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,6 +14,7 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -57,6 +58,6 @@ public class GraphingUIPlugin extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AbstractChartWithAxisBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AbstractChartWithAxisBuilder.java index 0d316cd34..d87b6a9d4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AbstractChartWithAxisBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AbstractChartWithAxisBuilder.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2010, 2018 IBM Corporation and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -25,11 +25,11 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.swtchart.IAxis; -import org.swtchart.ISeries; -import org.swtchart.ITitle; -import org.swtchart.LineStyle; -import org.swtchart.Range; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.LineStyle; +import org.eclipse.swtchart.Range; /** * A {@link AbstractChartBuilder} for building a chart with axes. @@ -119,7 +119,7 @@ public abstract class AbstractChartWithAxisBuilder extends AbstractChartBuilder protected void createChart() { super.createChart(); applyTitleBoundsListener(); - chartMouseMoveListener = new ChartWithAxisMouseMoveListener(chart, chart.getPlotArea()); + chartMouseMoveListener = new ChartWithAxisMouseMoveListener(chart, chart.getPlotArea().getControl()); } /** diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AreaChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AreaChartBuilder.java index f2d5788c5..8c9c449c0 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AreaChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/AreaChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corp. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -16,8 +16,8 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; import org.eclipse.linuxtools.systemtap.graphing.core.adapters.IAdapter; import org.eclipse.swt.widgets.Composite; -import org.swtchart.ILineSeries; -import org.swtchart.ISeries; +import org.eclipse.swtchart.ILineSeries; +import org.eclipse.swtchart.ISeries; /** * Builds bar chart. diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChart.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChart.java index a10d9a719..f4cf23db2 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChart.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChart.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2013, 2018 Red Hat Inc. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -13,15 +13,15 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; import org.eclipse.swt.widgets.Composite; -import org.swtchart.Chart; -import org.swtchart.IAxis; -import org.swtchart.ISeries; -import org.swtchart.Range; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.Range; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; /** * @since 3.0 */ -public class BarChart extends Chart { +public class BarChart extends InteractiveChart { private final static int MIN_LABEL_SIZE = Messages.BarChartBuilder_LabelTrimTag.length(); private final int fontSize; diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChartBuilder.java index fffdae3fc..af789f1d4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/BarChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corporation and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -17,10 +17,10 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.listeners.BarChartMouseMoveListener; import org.eclipse.linuxtools.systemtap.graphing.core.adapters.IAdapter; import org.eclipse.swt.widgets.Composite; -import org.swtchart.IBarSeries; -import org.swtchart.ISeries; -import org.swtchart.ISeries.SeriesType; -import org.swtchart.Range; +import org.eclipse.swtchart.IBarSeries; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.ISeries.SeriesType; +import org.eclipse.swtchart.Range; /** * A {@link Composite} for building a bar chart. @@ -42,7 +42,7 @@ public class BarChartBuilder extends AbstractChartWithAxisBuilder { protected void createChart() { this.chart = new BarChart(this, getStyle()); applyTitleBoundsListener(); - chartMouseMoveListener = new BarChartMouseMoveListener((BarChart) chart, chart.getPlotArea()); + chartMouseMoveListener = new BarChartMouseMoveListener((BarChart) chart, chart.getPlotArea().getControl()); } @Override diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/LineChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/LineChartBuilder.java index fcd3f4868..2c88e0e32 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/LineChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/LineChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corp. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,10 +14,10 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; import org.eclipse.linuxtools.systemtap.graphing.core.adapters.IAdapter; import org.eclipse.swt.widgets.Composite; -import org.swtchart.ILineSeries; -import org.swtchart.ISeries; -import org.swtchart.ISeries.SeriesType; -import org.swtchart.LineStyle; +import org.eclipse.swtchart.ILineSeries; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.ISeries.SeriesType; +import org.eclipse.swtchart.LineStyle; /** * Builds line chart. @@ -25,19 +25,19 @@ import org.swtchart.LineStyle; public class LineChartBuilder extends AbstractChartWithAxisBuilder { - public static final String ID = "org.eclipse.linuxtools.systemtap.graphing.ui.charts.linechartbuilder"; //$NON-NLS-1$ + public static final String ID = "org.eclipse.linuxtools.systemtap.graphing.ui.charts.linechartbuilder"; //$NON-NLS-1$ - public LineChartBuilder(Composite parent, int style, String title,IAdapter adapter) { - super(adapter, parent, style, title); - } + public LineChartBuilder(Composite parent, int style, String title, IAdapter adapter) { + super(adapter, parent, style, title); + } - @Override - protected ISeries createChartISeries(int i) { - ILineSeries series = (ILineSeries) chart.getSeriesSet(). - createSeries(SeriesType.LINE, adapter.getLabels()[i+1]); - series.setSymbolColor(COLORS[i % COLORS.length]); - series.setLineColor(COLORS[i % COLORS.length]); - series.setLineStyle(LineStyle.SOLID); - return series; - } + @Override + protected ISeries createChartISeries(int i) { + ILineSeries series = (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE, + adapter.getLabels()[i + 1]); + series.setSymbolColor(COLORS[i % COLORS.length]); + series.setLineColor(COLORS[i % COLORS.length]); + series.setLineStyle(LineStyle.SOLID); + return series; + } } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/PieChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/PieChartBuilder.java index 89b4e1a12..a016fc0f4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/PieChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/PieChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corp. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,12 +14,12 @@ */ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; -import org.eclipse.linuxtools.dataviewers.piechart.PieChart; +import org.eclipse.linuxtools.internal.dataviewers.piechart.PieChart; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.listeners.PieChartMouseMoveListener; import org.eclipse.linuxtools.systemtap.graphing.core.adapters.IAdapter; import org.eclipse.swt.widgets.Composite; -import org.swtchart.IAxis; -import org.swtchart.Range; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.Range; /** * Builds Pie chart. diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/ScatterChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/ScatterChartBuilder.java index d5c580599..a8ded38bb 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/ScatterChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/ScatterChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corp. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,9 +15,9 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts; import org.eclipse.linuxtools.systemtap.graphing.core.adapters.IAdapter; import org.eclipse.swt.widgets.Composite; -import org.swtchart.ILineSeries; -import org.swtchart.ISeries; -import org.swtchart.LineStyle; +import org.eclipse.swtchart.ILineSeries; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.LineStyle; /** * Builds bar chart. diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/BarChartMouseMoveListener.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/BarChartMouseMoveListener.java index ddaa18d67..9105c47c3 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/BarChartMouseMoveListener.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/BarChartMouseMoveListener.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat, Inc. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -17,9 +17,9 @@ import java.text.MessageFormat; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.BarChart; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.Messages; import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.widgets.Composite; -import org.swtchart.IAxis; -import org.swtchart.ISeries; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.ISeries; /** * This is a specialized mouse listener for displaying the value of a category (bar) @@ -29,7 +29,7 @@ import org.swtchart.ISeries; * @since 3.0 */ public class BarChartMouseMoveListener extends ToolTipChartMouseMoveListener { - public BarChartMouseMoveListener(BarChart chart, Composite parent) { + public BarChartMouseMoveListener(BarChart chart, Control parent) { super(chart, parent); } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ChartWithAxisMouseMoveListener.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ChartWithAxisMouseMoveListener.java index 320dcd1dd..2aa4f1cf5 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ChartWithAxisMouseMoveListener.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ChartWithAxisMouseMoveListener.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat, Inc. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -17,9 +17,9 @@ import java.text.MessageFormat; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.Messages; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Composite; -import org.swtchart.Chart; -import org.swtchart.ISeries; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swtchart.Chart; +import org.eclipse.swtchart.ISeries; /** * This is a specialized mouse listener for displaying the coordinates of a data point on @@ -30,7 +30,7 @@ import org.swtchart.ISeries; public class ChartWithAxisMouseMoveListener extends ToolTipChartMouseMoveListener { private static final double DIST_TOLERANCE = 20.0; - public ChartWithAxisMouseMoveListener(Chart chart, Composite hoverArea) { + public ChartWithAxisMouseMoveListener(Chart chart, Control hoverArea) { super(chart, hoverArea); } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/PieChartMouseMoveListener.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/PieChartMouseMoveListener.java index f371f6b82..8c9067ce2 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/PieChartMouseMoveListener.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/PieChartMouseMoveListener.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat, Inc. and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,11 +14,11 @@ package org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.listeners; import java.text.MessageFormat; -import org.eclipse.linuxtools.dataviewers.piechart.PieChart; +import org.eclipse.linuxtools.internal.dataviewers.piechart.PieChart; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.Messages; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.Composite; -import org.swtchart.ISeries; +import org.eclipse.swtchart.ISeries; /** * @since 3.0 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ToolTipChartMouseMoveListener.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ToolTipChartMouseMoveListener.java index d8bf63a9d..1b7a7f42e 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ToolTipChartMouseMoveListener.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/charts/listeners/ToolTipChartMouseMoveListener.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -19,11 +19,11 @@ import java.util.concurrent.RunnableFuture; import org.eclipse.linuxtools.systemtap.graphing.ui.charts.listeners.AbstractChartMouseMoveListener; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; -import org.swtchart.Chart; +import org.eclipse.swtchart.Chart; /** * @since 3.0 @@ -33,7 +33,7 @@ public class ToolTipChartMouseMoveListener extends AbstractChartMouseMoveListene protected final Shell tipShell; protected final Text tipText; - public ToolTipChartMouseMoveListener(Chart chart, Composite parent) { + public ToolTipChartMouseMoveListener(Chart chart, Control parent) { super(chart, parent); tipShell = new Shell(Display.getCurrent().getActiveShell(), SWT.TOOL | SWT.ON_TOP); tipText = new Text(tipShell, SWT.MULTI | SWT.BOLD); diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/handlers/SaveGraphImageHandler.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/handlers/SaveGraphImageHandler.java deleted file mode 100644 index 4cdf98bc8..000000000 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/internal/systemtap/graphing/ui/handlers/SaveGraphImageHandler.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014, 2019 Red Hat, Inc. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and Action implementation - * Red Hat - conversion to Handler implementation - *******************************************************************************/ - -package org.eclipse.linuxtools.internal.systemtap.graphing.ui.handlers; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.linuxtools.dataviewers.charts.actions.SaveChartAction; -import org.eclipse.linuxtools.systemtap.graphing.ui.GraphDisplaySet; -import org.eclipse.linuxtools.systemtap.graphing.ui.charts.AbstractChartBuilder; -import org.eclipse.linuxtools.systemtap.graphing.ui.views.GraphSelectorEditor; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.PlatformUI; -import org.swtchart.Chart; - -/** - * This action is designed to allow for saving of the graph in the active window. - * It will let the user select the location to save the image, and then save it as - * a jpg image. - * @author Ryan Morse - * @since 3.0 Migrated from .ui.graphing package. - */ -public class SaveGraphImageHandler extends AbstractHandler { - - private SaveChartAction saveChartAction = new SaveChartAction(); - - /** - * This is the main method of the action. It handles getting the active graph, - * prompting the user for a location to save the image to, and then actually doing - * the save. - */ - @Override - public Object execute(ExecutionEvent event) { - saveChartAction.setChart(getActiveChart()); - saveChartAction.run(); - return null; - } - - private GraphSelectorEditor getActiveGraphEditor() { - IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow(). - getActivePage().getActiveEditor(); - return editor instanceof GraphSelectorEditor ? (GraphSelectorEditor) editor : null; - } - - private AbstractChartBuilder getActiveGraph() { - GraphSelectorEditor graphEditor = getActiveGraphEditor(); - if (graphEditor == null) { - return null; - } - GraphDisplaySet gds = graphEditor.getActiveDisplaySet(); - return gds == null ? null : gds.getActiveGraph(); - } - - private Chart getActiveChart() { - AbstractChartBuilder abs = getActiveGraph(); - return abs == null ? null : abs.getChart(); - } - -} diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/GraphDisplaySet.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/GraphDisplaySet.java index b9b42bd6a..0f1c58037 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/GraphDisplaySet.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/GraphDisplaySet.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2006, 2018 IBM Corporation and others. - * + * Copyright (c) 2006, 2019 IBM Corporation and others. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.linuxtools.internal.systemtap.graphing.ui.GraphingUIPlugin; @@ -52,9 +53,6 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.plugin.AbstractUIPlugin; - - /** * This class is used to contain all of the graphing components that can @@ -139,10 +137,10 @@ public class GraphDisplaySet { //This is a tab/button for opening new graphs CTabItem newGraph = new CTabItem(folder, SWT.NONE); - newGraph.setImage(AbstractUIPlugin.imageDescriptorFromPlugin(GraphingUIPlugin.PLUGIN_ID, "icons/actions/new_wiz.gif").createImage()); //$NON-NLS-1$ + newGraph.setImage(ResourceLocator.imageDescriptorFromBundle(GraphingUIPlugin.PLUGIN_ID, "icons/actions/new_wiz.gif").get().createImage()); //$NON-NLS-1$ newGraph.setToolTipText(Localization.getString("GraphDisplaySet.CreateGraph")); //$NON-NLS-1$ - //Tab containing the data table + // Tab containing the data table CTabItem item = new CTabItem(folder, SWT.NONE); item.setText(Localization.getString("GraphDisplaySet.DataView")); //$NON-NLS-1$ Composite c = new Composite(folder, SWT.NONE); diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/AbstractChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/AbstractChartBuilder.java index 358b75cc9..4aa398e91 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/AbstractChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/AbstractChartBuilder.java @@ -1,6 +1,6 @@ /**************************************************************** * Copyright (c) 2006, 2018 IBM Corporation and others. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -32,8 +32,9 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; -import org.swtchart.Chart; -import org.swtchart.ITitle; +import org.eclipse.swtchart.Chart; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; /** * A {@link Composite} that provides the common members and the framework to build one chart. @@ -84,7 +85,7 @@ public abstract class AbstractChartBuilder extends Composite implements IUpdateL /** * Chart instance. */ - protected Chart chart = null; + protected InteractiveChart chart = null; /** * Chart title. @@ -179,7 +180,7 @@ public abstract class AbstractChartBuilder extends Composite implements IUpdateL * Creates chart instance. */ protected void createChart() { - this.chart = new Chart(this, getStyle()); + this.chart = new InteractiveChart(this, getStyle()); } /** @@ -187,7 +188,7 @@ public abstract class AbstractChartBuilder extends Composite implements IUpdateL */ private void buildPlot() { this.chart.setBackground(WHITE); - this.chart.setBackgroundInPlotArea(WHITE); + this.chart.getPlotArea().setBackground(WHITE); } /** @@ -227,6 +228,7 @@ public abstract class AbstractChartBuilder extends Composite implements IUpdateL ITitle ctitle = chart.getTitle(); ctitle.setForeground(BLACK); ctitle.setText(this.title); + chart.setProposedSaveAsFilename(this.title); } /** diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/listeners/AbstractChartMouseMoveListener.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/listeners/AbstractChartMouseMoveListener.java index 67891ae79..a8436f9c9 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/listeners/AbstractChartMouseMoveListener.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/charts/listeners/AbstractChartMouseMoveListener.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2014, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -15,8 +15,8 @@ package org.eclipse.linuxtools.systemtap.graphing.ui.charts.listeners; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.MouseTrackAdapter; -import org.eclipse.swt.widgets.Composite; -import org.swtchart.Chart; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swtchart.Chart; /** * An abstract listener class for displaying data values of a chart as it @@ -36,7 +36,7 @@ public abstract class AbstractChartMouseMoveListener implements MouseMoveListene * @param hoverArea The plot area of the chart in which this listener will react * to mouse movement. */ - public AbstractChartMouseMoveListener(Chart chart, final Composite hoverArea) { + public AbstractChartMouseMoveListener(Chart chart, final Control hoverArea) { this.chart = chart; final MouseMoveListener thisListener = this; hoverArea.addMouseTrackListener(new MouseTrackAdapter() { diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphComposite.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphComposite.java index a052ee125..2a1a31a2f 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphComposite.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphComposite.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2006, 2018 IBM Corporation. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -112,7 +112,7 @@ public class GraphComposite extends Composite { public void addCheckOption(final String title, final SelectionListener listener) { Display.getDefault().syncExec(() -> { - Button b = new Button(checkOptionComp, SWT.CHECK); + Button b = new Button(checkOptionComp, SWT.CHECK); b.setText(title); b.addSelectionListener(listener); checkOptions.add(b); diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphDiscreteXControl.java b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphDiscreteXControl.java index 1fd4c4231..11fa7dec6 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphDiscreteXControl.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphing.ui/src/org/eclipse/linuxtools/systemtap/graphing/ui/widgets/GraphDiscreteXControl.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2013, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -23,9 +23,9 @@ import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; -import org.swtchart.IAxis; -import org.swtchart.ISeries; -import org.swtchart.Range; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.Range; /** * @since 3.0 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.classpath index 0f2de4728..174b70493 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.settings/org.eclipse.jdt.core.prefs index 89403a779..649554d9b 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/META-INF/MANIFEST.MF index 7b52e59b0..7161ac1ed 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Bundle-ActivationPolicy: lazy Import-Package: org.junit, org.junit.runner;version="4.10.0", org.junit.runners;version="4.10.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.systemtap.structures Automatic-Module-Name: org.eclipse.linuxtools.systemtap.structures.tests diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/pom.xml index 047bad356..dc2f5e1fc 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.structures.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.structures/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.structures/.settings/org.eclipse.jdt.core.prefs index f1808c18e..bda0105d7 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -19,6 +19,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -75,6 +76,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -106,4 +108,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.structures/META-INF/MANIFEST.MF index 067a4f0fe..2bb7dec85 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures/META-INF/MANIFEST.MF @@ -13,7 +13,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.linuxtools.profiling.launch;bundle-version="0.11.0", org.eclipse.core.filesystem;bundle-version="1.3.200", org.eclipse.core.resources;bundle-version="3.8.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Import-Package: org.eclipse.debug.core, org.eclipse.debug.core.model, diff --git a/systemtap/org.eclipse.linuxtools.systemtap.structures/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.structures/pom.xml index 3e5e53113..8106ffdc9 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.structures/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.structures/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.structures</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.classpath index 43b986286..a621c21ac 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.settings/org.eclipse.jdt.core.prefs index c2c83d84b..efb8f9cf1 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/META-INF/MANIFEST.MF index 28138cac2..d1db4a7f8 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/META-INF/MANIFEST.MF @@ -7,6 +7,6 @@ Bundle-Vendor: %bundleProvider Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Require-Bundle: org.junit;bundle-version="4.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.systemtap.ui.consolelog Automatic-Module-Name: org.eclipse.linuxtools.systemtap.ui.consolelog.tests diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/pom.xml index ecd8f97ed..cf48801ec 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog.tests/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.ui.consolelog.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.settings/org.eclipse.jdt.core.prefs index 4c38f9096..98da29425 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -112,4 +114,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/META-INF/MANIFEST.MF index f154efd94..dafe438e2 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/META-INF/MANIFEST.MF @@ -17,7 +17,7 @@ Require-Bundle: org.eclipse.ui, com.jcraft.jsch;bundle-version="0.1.37", org.eclipse.debug.ui Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.core.filesystem, org.eclipse.core.resources, org.eclipse.debug.ui, diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/pom.xml index 68832a955..d30936a28 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.consolelog/pom.xml @@ -14,7 +14,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.ui.consolelog</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.doc/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.ui.doc/pom.xml index 4cf49bdcd..ab6e02224 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.doc/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.doc/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.ui.doc</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.classpath index 0f2de4728..174b70493 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.settings/org.eclipse.jdt.core.prefs index d172f5871..00df47c42 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -97,4 +99,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/META-INF/MANIFEST.MF index af2a59da0..9986e61a0 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/META-INF/MANIFEST.MF @@ -8,7 +8,7 @@ Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.swtbot.go, org.eclipse.linuxtools.systemtap.graphing.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Fragment-Host: org.eclipse.linuxtools.systemtap.ui.ide -Import-Package: org.swtchart +Import-Package: org.eclipse.swtchart Automatic-Module-Name: org.eclipse.linuxtools.systemtap.ui.ide.tests diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/pom.xml index d7d463fdf..84a5b5313 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.ui.ide.tests</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/src/org/eclipse/linuxtools/systemtap/ui/ide/test/swtbot/TestCreateSystemtapScript.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/src/org/eclipse/linuxtools/systemtap/ui/ide/test/swtbot/TestCreateSystemtapScript.java index dcd1e001a..31bb8ef48 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/src/org/eclipse/linuxtools/systemtap/ui/ide/test/swtbot/TestCreateSystemtapScript.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide.tests/src/org/eclipse/linuxtools/systemtap/ui/ide/test/swtbot/TestCreateSystemtapScript.java @@ -75,6 +75,10 @@ import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; import org.eclipse.swtbot.swt.finder.widgets.TimeoutException; +import org.eclipse.swtchart.Chart; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.ISeries; +import org.eclipse.swtchart.Range; import org.hamcrest.Matcher; import org.junit.After; import org.junit.AfterClass; @@ -82,10 +86,6 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.swtchart.Chart; -import org.swtchart.IAxis; -import org.swtchart.ISeries; -import org.swtchart.Range; @RunWith(SWTBotJunit4ClassRunner.class) @Ignore("fails with Oxygen") @@ -1305,7 +1305,7 @@ public class TestCreateSystemtapScript { }); bot.sleep(100); UIThreadRunnable.syncExec(() -> { - Point mousePoint = cb.getChart().getPlotArea() + Point mousePoint = cb.getChart().getPlotArea().getControl() .toDisplay(cb.getChart().getSeriesSet().getSeries()[0].getPixelCoordinates(dataPoint)); event.x = mousePoint.x; event.y = mousePoint.y; diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.classpath b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.classpath index 43b986286..1db08c6b4 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.classpath +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.settings/org.eclipse.jdt.core.prefs b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.settings/org.eclipse.jdt.core.prefs index e1bdb9132..78dac72dc 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.settings/org.eclipse.jdt.core.prefs +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -71,6 +72,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -106,4 +108,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/META-INF/MANIFEST.MF b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/META-INF/MANIFEST.MF index 2d5e6088a..ce04aa4f9 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/META-INF/MANIFEST.MF +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/META-INF/MANIFEST.MF @@ -26,5 +26,5 @@ Bundle-ActivationPolicy: lazy Import-Package: com.jcraft.jsch;version="0.1.37", org.eclipse.cdt.core.model, org.eclipse.linuxtools.tools.launch.core.factory -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Automatic-Module-Name: org.eclipse.linuxtools.systemtap.ui.ide diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/pom.xml b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/pom.xml index 0091f31fe..a93560951 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/pom.xml +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-systemtap-parent</artifactId> <groupId>org.eclipse.linuxtools.systemtap</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.systemtap.ui.ide</artifactId> diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/IDEPlugin.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/IDEPlugin.java index f0ec83d32..d11ca5a0e 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/IDEPlugin.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/IDEPlugin.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2018 IBM Corporation and others. + * Copyright (c) 2006, 2019 IBM Corporation and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -23,11 +23,13 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.systemtap.ui.ide.structures.TapsetLibrary; import org.eclipse.linuxtools.systemtap.ui.consolelog.internal.ConsoleLogPlugin; import org.eclipse.linuxtools.systemtap.ui.consolelog.preferences.ConsoleLogPreferenceConstants; import org.eclipse.linuxtools.systemtap.ui.consolelog.structures.ScriptConsole; import org.eclipse.ui.IWorkbenchListener; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -56,7 +58,7 @@ public class IDEPlugin extends AbstractUIPlugin { super.start(context); workbenchListener = new IDECloseMonitor(); - plugin.getWorkbench().addWorkbenchListener(workbenchListener); + PlatformUI.getWorkbench().addWorkbenchListener(workbenchListener); TapsetLibrary.init(); } @@ -68,7 +70,7 @@ public class IDEPlugin extends AbstractUIPlugin { super.stop(context); TapsetLibrary.stop(); ScriptConsole.stopAll(); - plugin.getWorkbench().removeWorkbenchListener(workbenchListener); + PlatformUI.getWorkbench().removeWorkbenchListener(workbenchListener); plugin = null; } @@ -87,7 +89,7 @@ public class IDEPlugin extends AbstractUIPlugin { * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { - return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path); + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); } /** diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptGraphOptionsTab.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptGraphOptionsTab.java index a14e1e094..c326d7b26 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptGraphOptionsTab.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptGraphOptionsTab.java @@ -31,6 +31,7 @@ import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.linuxtools.internal.systemtap.ui.ide.IDEPlugin; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSet; @@ -62,7 +63,6 @@ import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class SystemTapScriptGraphOptionsTab extends AbstractLaunchConfigurationTab { @@ -1384,8 +1384,8 @@ public class SystemTapScriptGraphOptionsTab extends @Override public Image getImage() { - return AbstractUIPlugin.imageDescriptorFromPlugin(IDEPlugin.PLUGIN_ID, - "icons/graphing_tab.gif").createImage(); //$NON-NLS-1$ + return ResourceLocator.imageDescriptorFromBundle(IDEPlugin.PLUGIN_ID, "icons/graphing_tab.gif").get() //$NON-NLS-1$ + .createImage(); } private void setGraphingEnabled(boolean enabled) { diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptLaunchConfigurationTab.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptLaunchConfigurationTab.java index fdf72beff..924bdd6b1 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptLaunchConfigurationTab.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptLaunchConfigurationTab.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; @@ -45,7 +46,6 @@ import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.ResourceUtil; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class SystemTapScriptLaunchConfigurationTab extends AbstractLaunchConfigurationTab { @@ -347,7 +347,6 @@ public class SystemTapScriptLaunchConfigurationTab extends @Override public Image getImage() { - return AbstractUIPlugin.imageDescriptorFromPlugin(IDEPlugin.PLUGIN_ID, - "icons/main_tab.gif").createImage(); //$NON-NLS-1$ + return ResourceLocator.imageDescriptorFromBundle(IDEPlugin.PLUGIN_ID, "icons/main_tab.gif").get().createImage(); //$NON-NLS-1$ } } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptOptionsTab.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptOptionsTab.java index 55df82629..8a77e7fd0 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptOptionsTab.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/launcher/SystemTapScriptOptionsTab.java @@ -22,6 +22,7 @@ import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.systemtap.ui.ide.IDEPlugin; import org.eclipse.linuxtools.internal.systemtap.ui.ide.preferences.IDEPreferenceConstants; import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.ExceptionErrorDialog; @@ -39,7 +40,6 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class SystemTapScriptOptionsTab extends AbstractLaunchConfigurationTab { @@ -266,8 +266,8 @@ public class SystemTapScriptOptionsTab extends AbstractLaunchConfigurationTab { @Override public Image getImage() { - return AbstractUIPlugin.imageDescriptorFromPlugin(IDEPlugin.PLUGIN_ID, - "icons/smileytap_small.gif").createImage(); //$NON-NLS-1$ + return ResourceLocator.imageDescriptorFromBundle(IDEPlugin.PLUGIN_ID, "icons/smileytap_small.gif").get() //$NON-NLS-1$ + .createImage(); } } diff --git a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/views/BrowserView.java b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/views/BrowserView.java index 9141ee1cb..cd6d781d9 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/views/BrowserView.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.ui.ide/src/org/eclipse/linuxtools/internal/systemtap/ui/ide/views/BrowserView.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2018 IBM Corporation and others. + * Copyright (c) 2006, 2019 IBM Corporation and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -119,7 +119,8 @@ public abstract class BrowserView extends ViewPart { @Override public void createPartControl(Composite parent) { PatternFilter filter = new PatternFilter(); - FilteredTree filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true); + FilteredTree filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true, + true); viewer = filteredTree.getViewer(); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); diff --git a/systemtap/pom.xml b/systemtap/pom.xml index 88ce86aa2..b546e8d36 100644 --- a/systemtap/pom.xml +++ b/systemtap/pom.xml @@ -16,7 +16,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.systemtap</groupId> diff --git a/vagrant/org.eclipse.linuxtools.vagrant-feature/feature.xml b/vagrant/org.eclipse.linuxtools.vagrant-feature/feature.xml index 7e1b90aa1..2f7815b6d 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant-feature/feature.xml +++ b/vagrant/org.eclipse.linuxtools.vagrant-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.vagrant.feature" label="%featureName" - version="4.4.0.qualifier" + version="5.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/vagrant/org.eclipse.linuxtools.vagrant-feature/pom.xml b/vagrant/org.eclipse.linuxtools.vagrant-feature/pom.xml index 9f58acb71..3ea5dc51f 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant-feature/pom.xml +++ b/vagrant/org.eclipse.linuxtools.vagrant-feature/pom.xml @@ -14,12 +14,12 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.vagrant</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.vagrant.feature</artifactId> <packaging>eclipse-feature</packaging> - <version>4.4.0-SNAPSHOT</version> + <version>5.1.0-SNAPSHOT</version> <name>Linux Tools Vagrant Tooling Feature</name> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.core/.classpath b/vagrant/org.eclipse.linuxtools.vagrant.core/.classpath index cf36b5611..bc57d2383 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.core/.classpath +++ b/vagrant/org.eclipse.linuxtools.vagrant.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"/> <classpathentry kind="output" path="target/classes"/> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.core/.settings/org.eclipse.jdt.core.prefs b/vagrant/org.eclipse.linuxtools.vagrant.core/.settings/org.eclipse.jdt.core.prefs index e6aabf54e..fb282c74e 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.core/.settings/org.eclipse.jdt.core.prefs +++ b/vagrant/org.eclipse.linuxtools.vagrant.core/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -112,7 +114,8 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 diff --git a/vagrant/org.eclipse.linuxtools.vagrant.core/META-INF/MANIFEST.MF b/vagrant/org.eclipse.linuxtools.vagrant.core/META-INF/MANIFEST.MF index fa7b23e23..c2a3352ed 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.core/META-INF/MANIFEST.MF +++ b/vagrant/org.eclipse.linuxtools.vagrant.core/META-INF/MANIFEST.MF @@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.10.0", org.eclipse.equinox.registry, org.eclipse.equinox.security, org.eclipse.osgi -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.debug.core, org.eclipse.jface.preference diff --git a/vagrant/org.eclipse.linuxtools.vagrant.core/pom.xml b/vagrant/org.eclipse.linuxtools.vagrant.core/pom.xml index 7ff8bb3bd..b18b4aae0 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.core/pom.xml +++ b/vagrant/org.eclipse.linuxtools.vagrant.core/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.vagrant</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.vagrant.core</artifactId> <version>2.0.0-SNAPSHOT</version> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.docs/pom.xml b/vagrant/org.eclipse.linuxtools.vagrant.docs/pom.xml index d16ea39af..b179fa3cc 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.docs/pom.xml +++ b/vagrant/org.eclipse.linuxtools.vagrant.docs/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>org.eclipse.linuxtools.vagrant</artifactId> <groupId>org.eclipse.linuxtools</groupId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.vagrant.docs</artifactId> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/.classpath b/vagrant/org.eclipse.linuxtools.vagrant.ui/.classpath index cf36b5611..bc57d2383 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/.classpath +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/"/> <classpathentry kind="output" path="target/classes"/> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.core.prefs b/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.core.prefs index 9676ecc8b..fe8d4a255 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.core.prefs +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -23,6 +23,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -98,8 +100,13 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 @@ -110,26 +117,37 @@ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_e org.eclipse.jdt.core.formatter.alignment_for_assignment=0 org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 org.eclipse.jdt.core.formatter.blank_lines_before_field=0 org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 @@ -138,6 +156,7 @@ org.eclipse.jdt.core.formatter.blank_lines_before_method=1 org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 org.eclipse.jdt.core.formatter.blank_lines_before_package=0 org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line @@ -151,18 +170,22 @@ org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true org.eclipse.jdt.core.formatter.comment.format_block_comments=true org.eclipse.jdt.core.formatter.comment.format_header=false org.eclipse.jdt.core.formatter.comment.format_html=true org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.jdt.core.formatter.comment.format_line_comments=true org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert org.eclipse.jdt.core.formatter.comment.line_length=80 org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true @@ -173,7 +196,7 @@ org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true @@ -185,6 +208,7 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert @@ -209,11 +233,13 @@ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert @@ -239,6 +265,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declar org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert @@ -277,6 +304,8 @@ org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert @@ -323,6 +352,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_decla org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert @@ -382,24 +412,58 @@ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_decla org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert org.eclipse.jdt.core.formatter.join_lines_in_comments=true org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=80 +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=tab org.eclipse.jdt.core.formatter.tabulation.size=4 org.eclipse.jdt.core.formatter.use_on_off_tags=false org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.ui.prefs b/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.ui.prefs index 446b84724..a8c7697e6 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.ui.prefs +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/.settings/org.eclipse.jdt.ui.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile -formatter_settings_version=12 +formatter_settings_version=17 sp_cleanup.add_default_serial_version_id=true sp_cleanup.add_generated_serial_version_id=false sp_cleanup.add_missing_annotations=true @@ -30,16 +30,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_semicolons=false sp_cleanup.remove_redundant_type_arguments=true sp_cleanup.remove_trailing_whitespaces=false sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=false sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -51,6 +55,7 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false sp_cleanup.use_lambda=true @@ -60,3 +65,4 @@ sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/META-INF/MANIFEST.MF b/vagrant/org.eclipse.linuxtools.vagrant.ui/META-INF/MANIFEST.MF index f0bcc3d1d..d668e804d 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/META-INF/MANIFEST.MF +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/META-INF/MANIFEST.MF @@ -26,7 +26,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.tm.terminal.connector.ssh;bundle-version="4.0.0", org.eclipse.tm.terminal.view.core;bundle-version="4.0.0", org.eclipse.tm.terminal.view.ui;bundle-version="4.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Export-Package: org.eclipse.linuxtools.internal.vagrant.ui;x-internal:=true, diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/pom.xml b/vagrant/org.eclipse.linuxtools.vagrant.ui/pom.xml index 1d249090b..0c0e9a5ca 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/pom.xml +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.vagrant</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.vagrant.ui</artifactId> <version>2.0.0-SNAPSHOT</version> diff --git a/vagrant/org.eclipse.linuxtools.vagrant.ui/src/org/eclipse/linuxtools/internal/vagrant/ui/commands/OpenVagrantfileCommandHandler.java b/vagrant/org.eclipse.linuxtools.vagrant.ui/src/org/eclipse/linuxtools/internal/vagrant/ui/commands/OpenVagrantfileCommandHandler.java index feb0226b8..5bdb751bb 100644 --- a/vagrant/org.eclipse.linuxtools.vagrant.ui/src/org/eclipse/linuxtools/internal/vagrant/ui/commands/OpenVagrantfileCommandHandler.java +++ b/vagrant/org.eclipse.linuxtools.vagrant.ui/src/org/eclipse/linuxtools/internal/vagrant/ui/commands/OpenVagrantfileCommandHandler.java @@ -25,6 +25,7 @@ import org.eclipse.linuxtools.vagrant.core.IVagrantVM; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; public class OpenVagrantfileCommandHandler extends BaseVMCommandHandler { @@ -46,10 +47,8 @@ public class OpenVagrantfileCommandHandler extends BaseVMCommandHandler { @Override void executeInJob(IVagrantVM vm, IProgressMonitor monitor) { Display.getDefault().asyncExec(() -> { - IWorkbenchPage activePage = Activator.getDefault().getWorkbench() - .getActiveWorkbenchWindow().getActivePage(); - IPath vgFilePath = new Path(vm.directory().getAbsolutePath()) - .append("Vagrantfile"); //$NON-NLS-1$ + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IPath vgFilePath = new Path(vm.directory().getAbsolutePath()).append("Vagrantfile"); //$NON-NLS-1$ IFileStore file = EFS.getLocalFileSystem().getStore(vgFilePath); try { IDE.openEditorOnFileStore(activePage, file); diff --git a/vagrant/pom.xml b/vagrant/pom.xml index 001177d0f..5db462b69 100644 --- a/vagrant/pom.xml +++ b/vagrant/pom.xml @@ -3,13 +3,13 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.eclipse.linuxtools</groupId> <artifactId>org.eclipse.linuxtools.vagrant</artifactId> - <version>4.4.0</version> + <version>5.1.0</version> <packaging>pom</packaging> <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <properties> @@ -72,7 +72,7 @@ <dependency> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-sourceref-jgit</artifactId> - <version>${tycho-extras-version}</version> + <version>${tycho-version}</version> </dependency> </dependencies> </plugin> diff --git a/valgrind/org.eclipse.linuxtools.valgrind-feature/feature.xml b/valgrind/org.eclipse.linuxtools.valgrind-feature/feature.xml index e938896d5..a19fe18f6 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind-feature/feature.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.valgrind" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/valgrind/org.eclipse.linuxtools.valgrind-feature/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind-feature/pom.xml index be1ee57a7..44ac4934a 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind-feature/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Valgrind Tools Integration Feature</name> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.settings/org.eclipse.jdt.core.prefs index 53f22b92c..7b4eecc74 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/META-INF/MANIFEST.MF index 24a3bef0f..b29f1b4fe 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.valgrind.cachegrind.tests Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.junit;bundle-version="4.7.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.valgrind.cachegrind diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/pom.xml index 687e8260e..4327f1e62 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.cachegrind.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.core.prefs index df2ab3a48..1cf590090 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.ui.prefs b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.ui.prefs index 48e17e1a6..6c8cdab5c 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.ui.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/.settings/org.eclipse.jdt.ui.prefs @@ -13,10 +13,12 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=true +sp_cleanup.insert_inferred_type_arguments=false sp_cleanup.make_local_variable_final=false sp_cleanup.make_parameters_final=false sp_cleanup.make_private_fields_final=true @@ -26,18 +28,23 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_imports=true sp_cleanup.remove_unused_local_variables=false sp_cleanup.remove_unused_private_fields=true sp_cleanup.remove_unused_private_members=false @@ -45,10 +52,14 @@ sp_cleanup.remove_unused_private_methods=true sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true sp_cleanup.use_parentheses_in_expressions=false sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/META-INF/MANIFEST.MF index 3683cca4f..0a3087efd 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 1.1.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Import-Package: org.eclipse.cdt.core.model, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/pom.xml index 89efff486..80695306d 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.cachegrind</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/src/org/eclipse/linuxtools/internal/valgrind/cachegrind/CachegrindLabelProvider.java b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/src/org/eclipse/linuxtools/internal/valgrind/cachegrind/CachegrindLabelProvider.java index c9e6cd353..f69590094 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/src/org/eclipse/linuxtools/internal/valgrind/cachegrind/CachegrindLabelProvider.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.cachegrind/src/org/eclipse/linuxtools/internal/valgrind/cachegrind/CachegrindLabelProvider.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 Red Hat, Inc. - * + * Copyright (c) 2009, 2019 Red Hat, Inc. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -18,6 +18,7 @@ import org.eclipse.cdt.ui.CElementLabelProvider; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.linuxtools.internal.valgrind.cachegrind.model.CachegrindFile; @@ -29,7 +30,6 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class CachegrindLabelProvider extends CellLabelProvider { @@ -39,14 +39,14 @@ public class CachegrindLabelProvider extends CellLabelProvider { protected DecimalFormat df = new DecimalFormat("#,##0"); //$NON-NLS-1$ - private static final Image FUNC_IMG = AbstractUIPlugin.imageDescriptorFromPlugin(CachegrindPlugin.PLUGIN_ID, "icons/function_obj.gif").createImage(); //$NON-NLS-1$ + private static final Image FUNC_IMG = ResourceLocator.imageDescriptorFromBundle(CachegrindPlugin.PLUGIN_ID, "icons/function_obj.gif").get().createImage(); //$NON-NLS-1$ @Override public void update(ViewerCell cell) { ICachegrindElement element = ((ICachegrindElement) cell.getElement()); int index = cell.getColumnIndex(); - if (index == 0) { + if (index == 0) { if (element instanceof CachegrindFile) { // Try to use the CElementLabelProvider IAdaptable model = ((CachegrindFile) element).getModel(); diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.classpath index f19381878..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"> <attributes> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.settings/org.eclipse.jdt.core.prefs index 5ed59cda7..90b087049 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/.settings/org.eclipse.jdt.core.prefs @@ -7,9 +7,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -24,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning @@ -80,6 +81,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -112,4 +114,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/META-INF/MANIFEST.MF index a76919b69..6842bf968 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Valgrdind Core Test Fragment Bundle-SymbolicName: org.eclipse.linuxtools.valgrind.core.tests;singleton:=true Bundle-Version: 1.0.0.qualifier Fragment-Host: org.eclipse.linuxtools.valgrind.core;bundle-version="1.0.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.linuxtools.docker.tests.hamcrest-wrap;bundle-version="1.2.0", org.junit;bundle-version="4.12.0", org.mockito diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/pom.xml index 897a70d91..3ef88ba59 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.core.tests/pom.xml @@ -18,7 +18,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.core.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.core/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.core/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.core/.settings/org.eclipse.jdt.core.prefs index d1e990c2b..25c7c9eee 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.core/.settings/org.eclipse.jdt.core.prefs @@ -9,9 +9,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -82,6 +83,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled @@ -114,4 +116,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.core/META-INF/MANIFEST.MF index 1715777cc..affab3c7f 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.core/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.eclipse.core.runtime, org.eclipse.linuxtools.tools.launch.core, org.eclipse.debug.core -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.internal.valgrind.core; x-friends:="org.eclipse.linuxtools.valgrind.launch, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.core/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.core/pom.xml index 8c7ee3aa3..6419c43ad 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.core/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.core/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.core</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.doc/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.doc/pom.xml index f45c6b7c2..7e0177452 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.doc/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.doc/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.doc</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.settings/org.eclipse.jdt.core.prefs index 373593c6d..ca17ceef4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/META-INF/MANIFEST.MF index 6901d8608..5e4f29cc0 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.junit;bundle-version="4.7.0", org.eclipse.ui.ide;bundle-version="3.8.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.valgrind.helgrind diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/pom.xml index 9f3706d65..d50adaa90 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.helgrind.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.classpath index 43b986286..1db08c6b4 100755 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.settings/org.eclipse.jdt.core.prefs index df2ab3a48..1cf590090 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/META-INF/MANIFEST.MF index a1e6ab513..3939bbcc7 100755 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.valgrind.helgrind;singleton:=true Bundle-Version: 1.1.0.qualifier Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Import-Package: org.eclipse.cdt.core.model, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/pom.xml index c7a2998df..bf1878b14 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.helgrind/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.helgrind/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.helgrind</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.launch/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.launch/.settings/org.eclipse.jdt.core.prefs index 6efcacbf8..7fc73ecee 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -78,6 +79,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.launch/META-INF/MANIFEST.MF index 7ec8adff0..2f19062d9 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-Activator: org.eclipse.linuxtools.internal.valgrind.launch.ValgrindLaunch Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.cdt.core.model, org.eclipse.cdt.debug.core, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.launch/pom.xml index 969de9f7e..26cd0ce7c 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.launch</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindLaunchPlugin.java b/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindLaunchPlugin.java index ec060d6ed..dcf9e15ba 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindLaunchPlugin.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindLaunchPlugin.java @@ -38,6 +38,7 @@ import org.eclipse.linuxtools.valgrind.launch.IValgrindToolPage; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.osgi.framework.Version; @@ -229,7 +230,7 @@ public class ValgrindLaunchPlugin extends AbstractUIPlugin { } public static Shell getActiveWorkbenchShell() { - IWorkbenchWindow window = getDefault().getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { return window.getShell(); } @@ -240,7 +241,7 @@ public class ValgrindLaunchPlugin extends AbstractUIPlugin { if (getActiveWorkbenchShell() != null) { return getActiveWorkbenchShell(); } - IWorkbenchWindow[] windows = getDefault().getWorkbench().getWorkbenchWindows(); + IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); return windows[0].getShell(); } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindOptionsTab.java b/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindOptionsTab.java index c431d5bf9..95ec58383 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindOptionsTab.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.launch/src/org/eclipse/linuxtools/internal/valgrind/launch/ValgrindOptionsTab.java @@ -28,6 +28,7 @@ import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.profiling.launch.ConfigUtils; import org.eclipse.linuxtools.valgrind.launch.IValgrindToolPage; import org.eclipse.osgi.util.NLS; @@ -54,7 +55,6 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.views.navigator.ResourceComparator; import org.osgi.framework.Version; @@ -487,9 +487,10 @@ public class ValgrindOptionsTab extends AbstractLaunchConfigurationTab { } @Override - public Image getImage() { - return AbstractUIPlugin.imageDescriptorFromPlugin(ValgrindLaunchPlugin.PLUGIN_ID, "icons/valgrind-icon.png").createImage(); //$NON-NLS-1$ - } + public Image getImage() { + return ResourceLocator.imageDescriptorFromBundle(ValgrindLaunchPlugin.PLUGIN_ID, "icons/valgrind-icon.png") //$NON-NLS-1$ + .get().createImage(); + } @Override public void initializeFrom(ILaunchConfiguration configuration) { @@ -585,20 +586,22 @@ public class ValgrindOptionsTab extends AbstractLaunchConfigurationTab { } private boolean isGeneralValid() { - String[] suppFiles = suppFileList.getItems(); - boolean result = true; - for (int i = 0; i < suppFiles.length && result; i++) { - try { - IPath suppfile = getPlugin().parseWSPath(suppFiles[i]); - if (!suppfile.toFile().exists()) { - setErrorMessage(NLS.bind(Messages.getString("ValgrindOptionsTab.suppressions_file_doesnt_exist"), suppFiles[i])); //$NON-NLS-1$ - result = false; - } - } catch (CoreException e) { - // should only occur if there's a cycle in variable substitution - e.printStackTrace(); - } - } + boolean result = true; + if (suppFileList != null) { + String[] suppFiles = suppFileList.getItems(); + for (int i = 0; i < suppFiles.length && result; i++) { + try { + IPath suppfile = getPlugin().parseWSPath(suppFiles[i]); + if (!suppfile.toFile().exists()) { + setErrorMessage(NLS.bind(Messages.getString("ValgrindOptionsTab.suppressions_file_doesnt_exist"), suppFiles[i])); //$NON-NLS-1$ + result = false; + } + } catch (CoreException e) { + // should only occur if there's a cycle in variable substitution + e.printStackTrace(); + } + } + } return result; } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.settings/org.eclipse.jdt.core.prefs index f08a6e7a0..d885a09e5 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/META-INF/MANIFEST.MF index 58fdab9e8..1960728bb 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/META-INF/MANIFEST.MF @@ -4,9 +4,8 @@ Bundle-Name: %Bundle-Name.0 Bundle-SymbolicName: org.eclipse.linuxtools.valgrind.massif.tests Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 -Require-Bundle: org.junit;bundle-version="4.7.0", - org.eclipse.linuxtools.dataviewers.charts -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.junit;bundle-version="4.7.0" +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.valgrind.massif diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/pom.xml index beed44701..1884d6cee 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.massif.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java index 518bc1ce8..8d5a6139b 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java @@ -22,10 +22,10 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.linuxtools.dataviewers.charts.actions.SaveChartAction; -import org.eclipse.linuxtools.internal.valgrind.massif.MassifViewPart; import org.eclipse.linuxtools.internal.valgrind.massif.charting.ChartEditorInput; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.PlatformUI; import org.junit.After; @@ -79,16 +79,15 @@ public class ChartExportTest extends AbstractMassifTest { control.setSize(10, 10); } - SaveChartAction saveChartAction = (SaveChartAction) getToolbarAction(MassifViewPart.SAVE_CHART_ACTION); - assertNotNull(saveChartAction); + InteractiveChart intChart = (InteractiveChart)control; for (IPath path : paths) { - saveAsPath(saveChartAction, path); + saveAsPath(intChart, path); } } - private void saveAsPath(SaveChartAction saveChartAction, IPath path) { - saveChartAction.run(path.toString()); + private void saveAsPath(InteractiveChart saveChartAction, IPath path) { + saveChartAction.save(path.toString(), SWT.IMAGE_PNG); File chartFile = path.toFile(); assertTrue(chartFile.exists()); assertTrue(chartFile.length() > 0); diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartTests.java b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartTests.java index fd781929a..62ecaa923 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartTests.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartTests.java @@ -35,13 +35,13 @@ import org.eclipse.linuxtools.internal.valgrind.ui.ValgrindUIPlugin; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swtchart.Chart; +import org.eclipse.swtchart.ILineSeries; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PlatformUI; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.swtchart.Chart; -import org.swtchart.ILineSeries; public class ChartTests extends AbstractMassifTest { @Before diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.massif/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.core.prefs index df2ab3a48..1cf590090 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.ui.prefs b/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.ui.prefs similarity index 83% rename from oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.ui.prefs rename to valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.ui.prefs index 90de15f40..79881a251 100644 --- a/oprofile/org.eclipse.linuxtools.oprofile.launch/.settings/org.eclipse.jdt.ui.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/.settings/org.eclipse.jdt.ui.prefs @@ -13,11 +13,11 @@ sp_cleanup.always_use_blocks=true sp_cleanup.always_use_parentheses_in_expressions=false sp_cleanup.always_use_this_for_non_static_field_access=false sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_functional_interfaces=true +sp_cleanup.convert_to_enhanced_for_loop=true sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=true sp_cleanup.insert_inferred_type_arguments=false sp_cleanup.make_local_variable_final=true sp_cleanup.make_parameters_final=false @@ -28,16 +28,20 @@ sp_cleanup.never_use_blocks=false sp_cleanup.never_use_parentheses_in_expressions=true sp_cleanup.on_save_use_additional_actions=true sp_cleanup.organize_imports=true +sp_cleanup.push_down_negation=false sp_cleanup.qualify_static_field_accesses_with_declaring_class=false sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true sp_cleanup.qualify_static_member_accesses_with_declaring_class=false sp_cleanup.qualify_static_method_accesses_with_declaring_class=false sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_type_arguments=false -sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true sp_cleanup.remove_trailing_whitespaces_all=true sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=true sp_cleanup.remove_unnecessary_casts=true sp_cleanup.remove_unnecessary_nls_tags=false sp_cleanup.remove_unused_imports=false @@ -49,6 +53,7 @@ sp_cleanup.remove_unused_private_types=true sp_cleanup.sort_members=false sp_cleanup.sort_members_all=false sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false sp_cleanup.use_blocks=false sp_cleanup.use_blocks_only_for_return_and_throw=false sp_cleanup.use_lambda=true @@ -57,4 +62,4 @@ sp_cleanup.use_this_for_non_static_field_access=false sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true -sp_cleanup.use_type_arguments=false +sp_cleanup.use_unboxing=false diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.massif/META-INF/MANIFEST.MF index 11c2d7461..2754401d1 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/META-INF/MANIFEST.MF @@ -7,8 +7,8 @@ Bundle-Activator: org.eclipse.linuxtools.internal.valgrind.massif.MassifPlugin Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, - org.eclipse.linuxtools.dataviewers.charts -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 + org.eclipse.swtchart.extensions +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Import-Package: org.eclipse.cdt.core.model, @@ -28,5 +28,5 @@ Import-Package: org.eclipse.cdt.core.model, org.eclipse.linuxtools.valgrind.launch, org.eclipse.linuxtools.valgrind.ui, org.eclipse.ui, - org.swtchart + org.eclipse.swtchart Automatic-Module-Name: org.eclipse.linuxtools.valgrind.massif diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.massif/pom.xml index 23bd24008..2ec0d64d1 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.massif</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifTreeLabelProvider.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifTreeLabelProvider.java index aaa43356e..feb7e7e20 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifTreeLabelProvider.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifTreeLabelProvider.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2009, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -14,9 +14,9 @@ package org.eclipse.linuxtools.internal.valgrind.massif; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class MassifTreeLabelProvider extends LabelProvider { @@ -29,7 +29,8 @@ public class MassifTreeLabelProvider extends LabelProvider { public Image getImage(Object element) { Image img = null; if (((MassifHeapTreeNode) element).getParent() == null) { // only show for root elements - img = AbstractUIPlugin.imageDescriptorFromPlugin(MassifPlugin.PLUGIN_ID, "icons/memory_view.gif").createImage(); //$NON-NLS-1$ + img = ResourceLocator.imageDescriptorFromBundle(MassifPlugin.PLUGIN_ID, "icons/memory_view.gif").get() //$NON-NLS-1$ + .createImage(); } else { // stack frame img = DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_STACKFRAME); } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java index 59b04125f..4484c0d23 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2008, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -19,6 +19,7 @@ import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.IFontProvider; @@ -30,7 +31,6 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.linuxtools.dataviewers.charts.actions.SaveChartAction; import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot.SnapshotType; import org.eclipse.linuxtools.internal.valgrind.massif.charting.ChartEditorInput; import org.eclipse.linuxtools.internal.valgrind.massif.charting.HeapChart; @@ -52,7 +52,6 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class MassifViewPart extends ViewPart implements IValgrindToolView { @@ -74,8 +73,6 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { + ".chartAction"; //$NON-NLS-1$ public static final String PID_ACTION = MassifPlugin.PLUGIN_ID + ".pidAction"; //$NON-NLS-1$ - public static final String SAVE_CHART_ACTION = MassifPlugin.PLUGIN_ID - + ".saveChartAction"; //$NON-NLS-1$ private MassifOutput output; private Integer pid; @@ -91,7 +88,6 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { private Action treeAction; private MassifPidMenuAction pidAction; - private SaveChartAction saveChartAction; private List<ChartEditorInput> chartInputs; @@ -114,9 +110,9 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { String[] columnTitles = { TITLE_NUMBER, TITLE_TIME, TITLE_TOTAL, TITLE_USEFUL, TITLE_EXTRA, TITLE_STACKS }; - for (int i = 0; i < columnTitles.length; i++) { + for (String columnTitle : columnTitles) { TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE); - column.getColumn().setText(columnTitles[i]); + column.getColumn().setText(columnTitle); column.getColumn().setWidth(COLUMN_SIZE); column.getColumn().setResizable(true); column.getColumn().addSelectionListener(getHeaderListener()); @@ -229,14 +225,11 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { } }; chartAction.setId(CHART_ACTION); - chartAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin( - MassifPlugin.PLUGIN_ID, "icons/linecharticon.gif")); //$NON-NLS-1$ + chartAction.setImageDescriptor( + ResourceLocator.imageDescriptorFromBundle(MassifPlugin.PLUGIN_ID, "icons/linecharticon.gif").get()); //$NON-NLS-1$ chartAction.setToolTipText(Messages .getString("MassifViewPart.Display_Heap_Allocation")); //$NON-NLS-1$ - saveChartAction = new SaveChartAction(); - saveChartAction.setId(SAVE_CHART_ACTION); - treeAction = new Action( Messages.getString("MassifViewPart.Show_Heap_Tree"), IAction.AS_CHECK_BOX) { //$NON-NLS-1$ @Override @@ -251,12 +244,12 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { } }; treeAction.setId(TREE_ACTION); - treeAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin( - MassifPlugin.PLUGIN_ID, "icons/call_hierarchy.gif")); //$NON-NLS-1$ + treeAction.setImageDescriptor( + ResourceLocator.imageDescriptorFromBundle(MassifPlugin.PLUGIN_ID, "icons/call_hierarchy.gif").get()); //$NON-NLS-1$ treeAction.setToolTipText(Messages .getString("MassifViewPart.Show_Heap_Tree")); //$NON-NLS-1$ - return new IAction[] { pidAction, chartAction, saveChartAction, treeAction }; + return new IAction[] { pidAction, chartAction, treeAction }; } private void createChart(MassifSnapshot[] snapshots) { @@ -281,7 +274,6 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { e.printStackTrace(); } }); - saveChartAction.setChart(chartInput.getChart().getChartControl(), chartInput.getName()); } private String getInputName(String description) { @@ -304,7 +296,6 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { @Override public void refreshView() { if (output != null && pid != null) { - saveChartAction.setChart(null); MassifSnapshot[] snapshots = output.getSnapshots(pid); pidAction.setPids(output.getPids()); if (snapshots != null) { @@ -399,9 +390,9 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { break; case PEAK: case DETAILED: - image = AbstractUIPlugin - .imageDescriptorFromPlugin(MassifPlugin.PLUGIN_ID, - "icons/call_hierarchy.gif").createImage(); //$NON-NLS-1$ + image = ResourceLocator + .imageDescriptorFromBundle(MassifPlugin.PLUGIN_ID, "icons/call_hierarchy.gif").get() //$NON-NLS-1$ + .createImage(); } } return image; @@ -459,8 +450,7 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { private ChartEditorInput getChartInput(Integer pid) { ChartEditorInput result = null; - for (int i = 0; i < chartInputs.size(); i++) { - ChartEditorInput input = chartInputs.get(i); + for (ChartEditorInput input : chartInputs) { if (input.getPid().equals(pid)) { result = input; } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditor.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditor.java index 61e4eb112..2e01d1ba0 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditor.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditor.java @@ -1,6 +1,6 @@ /******************************************************************************* * Copyright (c) 2008, 2018 Red Hat, Inc. - * + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -29,24 +29,25 @@ import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; +import org.eclipse.swtchart.Chart; +import org.eclipse.swtchart.IAxis; +import org.eclipse.swtchart.IAxisSet; +import org.eclipse.swtchart.ILineSeries; +import org.eclipse.swtchart.ILineSeries.PlotSymbolType; +import org.eclipse.swtchart.ISeries.SeriesType; +import org.eclipse.swtchart.ITitle; +import org.eclipse.swtchart.LineStyle; +import org.eclipse.swtchart.Range; +import org.eclipse.swtchart.extensions.charts.InteractiveChart; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.EditorPart; -import org.swtchart.Chart; -import org.swtchart.IAxis; -import org.swtchart.IAxisSet; -import org.swtchart.ILineSeries; -import org.swtchart.ILineSeries.PlotSymbolType; -import org.swtchart.ISeries.SeriesType; -import org.swtchart.ITitle; -import org.swtchart.LineStyle; -import org.swtchart.Range; public class ChartEditor extends EditorPart { - private Chart control; + private InteractiveChart control; @Override public void doSave(IProgressMonitor monitor) { @@ -83,7 +84,7 @@ public class ChartEditor extends EditorPart { public void createPartControl(Composite parent) { final ChartEditorInput input = (ChartEditorInput) getEditorInput(); final HeapChart heapChart = input.getChart(); - control = new Chart(parent, SWT.FILL); + control = new InteractiveChart(parent, SWT.FILL); heapChart.setChartControl(control); final Color LIGHTYELLOW = new Color(Display.getDefault(), 255, 255, 225); @@ -96,7 +97,8 @@ public class ChartEditor extends EditorPart { final int TICK_GAP = 40; control.setBackground(WHITE); - control.setBackgroundInPlotArea(LIGHTYELLOW); + control.getPlotArea().setBackground(LIGHTYELLOW); + control.setProposedSaveAsFilename(heapChart.title.substring(0, heapChart.title.indexOf(' '))); FontData fd = JFaceResources.getDialogFont().getFontData()[0]; fd.setStyle(SWT.BOLD); @@ -178,7 +180,7 @@ public class ChartEditor extends EditorPart { axisSet.getYAxis(0).setRange(new Range(yRange.lower, yRange.upper + yExtra)); // listeners - control.getPlotArea().addMouseListener(new MouseAdapter() { + control.getPlotArea().getControl().addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditorInput.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditorInput.java index 5493ef1f3..f4a1aa6e0 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditorInput.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/charting/ChartEditorInput.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2008, 2018 Red Hat, Inc. - * + * Copyright (c) 2008, 2019 Red Hat, Inc. + * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -13,12 +13,12 @@ package org.eclipse.linuxtools.internal.valgrind.massif.charting; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.linuxtools.internal.valgrind.massif.MassifPlugin; import org.eclipse.linuxtools.internal.valgrind.massif.MassifViewPart; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.plugin.AbstractUIPlugin; public class ChartEditorInput implements IEditorInput { @@ -41,7 +41,7 @@ public class ChartEditorInput implements IEditorInput { @Override public ImageDescriptor getImageDescriptor() { - return AbstractUIPlugin.imageDescriptorFromPlugin(MassifPlugin.PLUGIN_ID, "icons/linecharticon.gif"); //$NON-NLS-1$ + return ResourceLocator.imageDescriptorFromBundle(MassifPlugin.PLUGIN_ID, "icons/linecharticon.gif").get(); //$NON-NLS-1$ } @Override diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.settings/org.eclipse.jdt.core.prefs index c2c83d84b..efb8f9cf1 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,9 +6,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -65,6 +66,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/META-INF/MANIFEST.MF index d508f94bf..69de4b3a7 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck.tests/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.junit;bundle-version="4.7.0", org.eclipse.debug.ui -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Fragment-Host: org.eclipse.linuxtools.valgrind.memcheck diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.settings/org.eclipse.jdt.core.prefs index df2ab3a48..1cf590090 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/META-INF/MANIFEST.MF index 44e9ed79e..c778d4beb 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 1.1.0.qualifier Bundle-Vendor: %Bundle-Vendor.0 Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.debug.core, org.eclipse.debug.ui, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/pom.xml index f0d5f992a..644c20c27 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.memcheck/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.memcheck/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.memcheck</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/feature.xml b/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/feature.xml index de624e369..3eb9a68fa 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/feature.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.linuxtools.valgrind.remote" label="%featureName" - version="7.4.0.qualifier" + version="8.1.0.qualifier" provider-name="%featureProvider" license-feature="org.eclipse.license" license-feature-version="0.0.0"> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/pom.xml index 72783d81a..6a96b8bd4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.remote-feature/pom.xml @@ -15,12 +15,12 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.remote</artifactId> <packaging>eclipse-feature</packaging> - <version>7.4.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> <name>Linux Tools Valgrind Tools Remote Integration Feature</name> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.tests/.settings/org.eclipse.jdt.core.prefs index 3931296f6..f69a5623a 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.tests/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -69,6 +70,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -101,4 +103,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.tests/META-INF/MANIFEST.MF index 4e2f0f875..a5479397b 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.tests/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.junit;bundle-version="4.7.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.eclipse.cdt.core.model, org.eclipse.cdt.launch, org.eclipse.core.resources, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.tests/pom.xml index b2326beba..5039233c9 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.settings/org.eclipse.jdt.core.prefs index 451a97f8a..5b647c53c 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -64,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -96,4 +98,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/META-INF/MANIFEST.MF index f4dff1dd6..09ae6e495 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, org.eclipse.ui.ide, org.eclipse.ui.genericeditor -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.jface.text, org.eclipse.jface.text.contentassist, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/pom.xml index 338962cfe..8724d68d0 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.ui.editor</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/src/org/eclipse/linuxtools/internal/valgrind/ui/editor/wizards/NewSuppressionWizard.java b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/src/org/eclipse/linuxtools/internal/valgrind/ui/editor/wizards/NewSuppressionWizard.java index 9ab96c5ac..45129e62b 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/src/org/eclipse/linuxtools/internal/valgrind/ui/editor/wizards/NewSuppressionWizard.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.editor/src/org/eclipse/linuxtools/internal/valgrind/ui/editor/wizards/NewSuppressionWizard.java @@ -29,6 +29,7 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.linuxtools.internal.valgrind.ui.editor.ValgrindEditorPlugin; @@ -40,7 +41,6 @@ import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.WizardNewFileCreationPage; import org.eclipse.ui.ide.IDE; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * This is a sample new wizard. Its role is to create a new file @@ -75,7 +75,7 @@ public class NewSuppressionWizard extends Wizard implements INewWizard { page = new WizardNewFileCreationPage("newSuppressionPage", selection); //$NON-NLS-1$ page.setTitle(Messages.getString("NewSuppressionWizard.NewWizard_title")); //$NON-NLS-1$ page.setDescription(Messages.getString("NewSuppressionWizard.NewWizard_description")); //$NON-NLS-1$ - page.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(ValgrindEditorPlugin.PLUGIN_ID, "icons/newsupp_wiz.png")); //$NON-NLS-1$ + page.setImageDescriptor(ResourceLocator.imageDescriptorFromBundle(ValgrindEditorPlugin.PLUGIN_ID, "icons/newsupp_wiz.png").get()); //$NON-NLS-1$ page.setFileExtension(EXT_SUPP); addPage(page); } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.classpath index 43b986286..a621c21ac 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.classpath @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="src"> + <attributes> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.settings/org.eclipse.jdt.core.prefs index 6f3840038..c4b1d51d9 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,8 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -18,6 +18,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -61,6 +62,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -92,4 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/META-INF/MANIFEST.MF index ba3b2f2fd..efc2385d2 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/META-INF/MANIFEST.MF @@ -8,7 +8,7 @@ Fragment-Host: org.eclipse.linuxtools.valgrind.ui Require-Bundle: org.junit;bundle-version="4.7.0", org.eclipse.linuxtools.valgrind.memcheck, org.eclipse.cdt.codan.ui.cxx -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Import-Package: org.eclipse.linuxtools.internal.valgrind.tests, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/pom.xml index 1acfd1427..ac1d23489 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui.tests/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.ui.tests</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui/.classpath b/valgrind/org.eclipse.linuxtools.valgrind.ui/.classpath index 43b986286..1db08c6b4 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui/.classpath +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="target/classes"/> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui/.settings/org.eclipse.jdt.core.prefs b/valgrind/org.eclipse.linuxtools.valgrind.ui/.settings/org.eclipse.jdt.core.prefs index 8eb2979cc..b5ecf6ffa 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui/.settings/org.eclipse.jdt.core.prefs +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -83,6 +84,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warn org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled @@ -115,4 +117,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui/META-INF/MANIFEST.MF b/valgrind/org.eclipse.linuxtools.valgrind.ui/META-INF/MANIFEST.MF index 425d8b208..a7ff0e50d 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui/META-INF/MANIFEST.MF +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui/META-INF/MANIFEST.MF @@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.cdt.core, org.eclipse.swt;bundle-version="3.106.0", org.eclipse.cdt.codan.ui.cxx -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.linuxtools.internal.valgrind.ui; x-friends:="org.eclipse.linuxtools.valgrind.cachegrind, diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui/pom.xml b/valgrind/org.eclipse.linuxtools.valgrind.ui/pom.xml index f798b458d..43462a370 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui/pom.xml +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui/pom.xml @@ -15,7 +15,7 @@ <parent> <artifactId>linuxtools-valgrind-parent</artifactId> <groupId>org.eclipse.linuxtools.valgrind</groupId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <artifactId>org.eclipse.linuxtools.valgrind.ui</artifactId> diff --git a/valgrind/org.eclipse.linuxtools.valgrind.ui/src/org/eclipse/linuxtools/internal/valgrind/ui/CoreMessagesViewer.java b/valgrind/org.eclipse.linuxtools.valgrind.ui/src/org/eclipse/linuxtools/internal/valgrind/ui/CoreMessagesViewer.java index cbc395032..c52983fcb 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.ui/src/org/eclipse/linuxtools/internal/valgrind/ui/CoreMessagesViewer.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.ui/src/org/eclipse/linuxtools/internal/valgrind/ui/CoreMessagesViewer.java @@ -20,6 +20,7 @@ import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.jface.resource.ResourceLocator; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.IDoubleClickListener; @@ -40,7 +41,6 @@ import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * The inner tree view that holds the output messages to be displayed. Also hold @@ -73,13 +73,13 @@ public class CoreMessagesViewer { viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | style); viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); if (imageRegistry.getDescriptor(VALGRIND_ERROR) == null) { - ImageDescriptor d = AbstractUIPlugin.imageDescriptorFromPlugin(ValgrindUIPlugin.PLUGIN_ID, VALGRIND_ERROR_IMAGE); + ImageDescriptor d = ResourceLocator.imageDescriptorFromBundle(ValgrindUIPlugin.PLUGIN_ID, VALGRIND_ERROR_IMAGE).get(); if (d != null) { imageRegistry.put(VALGRIND_ERROR, d); } } if (imageRegistry.getDescriptor(VALGRIND_INFO) == null) { - ImageDescriptor d = AbstractUIPlugin.imageDescriptorFromPlugin(ValgrindUIPlugin.PLUGIN_ID, VALGRIND_INFO_IMAGE); + ImageDescriptor d = ResourceLocator.imageDescriptorFromBundle(ValgrindUIPlugin.PLUGIN_ID, VALGRIND_INFO_IMAGE).get(); if (d != null) { imageRegistry.put(VALGRIND_INFO, d); } diff --git a/valgrind/pom.xml b/valgrind/pom.xml index f238ed7a9..770612b1e 100644 --- a/valgrind/pom.xml +++ b/valgrind/pom.xml @@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.linuxtools</groupId> <artifactId>linuxtools-parent</artifactId> - <version>7.4.0</version> + <version>8.1.0</version> </parent> <groupId>org.eclipse.linuxtools.valgrind</groupId> -- GitLab