Bug 582512 - Application icon in low resolution and application name "mat"
Summary: Application icon in low resolution and application name "mat"
Status: RESOLVED FIXED
Alias: None
Product: MAT
Classification: Tools
Component: GUI (show other bugs)
Version: 1.14   Edit
Hardware: Macintosh Mac OS X
: P3 normal (vote)
Target Milestone: 1.15.0   Edit
Assignee: Andrew Johnson CLA
QA Contact:
URL:
Whiteboard:
Keywords: greatbug, helpwanted, ui
Depends on:
Blocks:
 
Reported: 2023-10-05 10:14 EDT by Sebastian Davids CLA
Modified: 2023-11-21 03:57 EST (History)
3 users (show)

See Also:


Attachments
icon with low resolution and "mat" name (43.76 KB, image/png)
2023-10-05 10:14 EDT, Sebastian Davids CLA
no flags Details
low resolution in finder as well (90.77 KB, image/png)
2023-10-05 10:21 EDT, Sebastian Davids CLA
no flags Details
no alpha channel and lower resolution than the other 2 icons (147.04 KB, image/png)
2023-11-03 15:29 EDT, Sebastian Davids CLA
no flags Details
resolution looks OK but no alpha channel (21.51 KB, image/png)
2023-11-03 15:30 EDT, Sebastian Davids CLA
no flags Details
resolution not OK and no alpha channel (281.75 KB, image/png)
2023-11-03 15:30 EDT, Sebastian Davids CLA
no flags Details
resolution not OK (30.58 KB, image/png)
2023-11-03 15:31 EDT, Sebastian Davids CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Sebastian Davids CLA 2023-10-05 10:14:38 EDT
Created attachment 289192 [details]
icon with low resolution and "mat" name

The application icon has a very low resolution see attached screenshot.

Also, the application name is "mat" instead of "Eclipse Memory Analyzer" or "Memory Analyzer".


I have downloaded: https://www.eclipse.org/downloads/download.php?file=/mat/1.14.0/rcp/MemoryAnalyzer-1.14.0.20230315-macosx.cocoa.aarch64.dmg

```shell
$ sw_vers
ProductName:		macOS
ProductVersion:		14.0
BuildVersion:		23A344
$ uname -a
Darwin dev 23.0.0 Darwin Kernel Version 23.0.0: Fri Sep 15 14:41:34 PDT 2023; root:xnu-10002.1.13~1/RELEASE_ARM64_T8103 arm64
$ java -version
openjdk version "21" 2023-09-19
OpenJDK Runtime Environment Homebrew (build 21)
OpenJDK 64-Bit Server VM Homebrew (build 21, mixed mode, sharing)
$ /usr/libexec/PlistBuddy -c "Print:CFBundleName" -c "Print:CFBundleVersion" /Applications/mat.app/Contents/Info.plist
MemoryAnalyzer
1.14.0.202303151743
```

https://developer.apple.com/design/human-interface-guidelines/app-icons#macOS-app-icon-sizes

https://wiki.eclipse.org/Platform-releng/Updating_Branding#MacOSX

https://bootcamp.uxdesign.cc/5-steps-to-create-a-macos-app-icon-in-icns-format-a659f27f1a85
Comment 1 Sebastian Davids CLA 2023-10-05 10:21:27 EDT
Created attachment 289193 [details]
low resolution in finder as well
Comment 3 Andrew Johnson CLA 2023-10-05 12:10:40 EDT
I generated the higher resolution icons based on
https://wiki.eclipse.org/File:Des_cons_core-wiz.gif
but with an extra link half-way up the database and by reflecting the
find icon.
Comment 4 Andrew Johnson CLA 2023-10-07 05:10:20 EDT
The memory_analyzer.icns file just had two icons:

File: memory_analyzer.icns
  info: 310 bytes, plist: info
  ic07: 15382 bytes, png: 128x128
  ic05: 2253 bytes, argb: 32x32

and the 128x128 icon was jagged.

I have updated the 48x48 icon to use a higher resolution magnifying glass;
I hope it is not too big.

I have also rebuilt the memory_analyzer.icns file with as many icons as I can:

File: memory_analyzer.icns
  TOC : 72 bytes, bin: TOC
  ic04: 722 bytes, argb: 16x16
  ic11: 900 bytes, png: 16x16@2x
  SB24: 2082 bytes, png: 24x24@2x
  ic05: 2319 bytes, argb: 32x32
  ic12: 4700 bytes, png: 32x32@2x
  icp6: 2082 bytes, png: 48x48
  ic07: 6094 bytes, png: 128x128
  ic13: 7507 bytes, png: 128x128@2x
  ic08: 7507 bytes, png: 256x256

https://git.eclipse.org/r/c/mat/org.eclipse.mat/+/204834
https://git.eclipse.org/c/mat/org.eclipse.mat.git/commit/?id=0fd9941d6d0870b1e81aa42873b99c5bd505ba2b

Sebastian, please retest with a snapshot build:
https://eclipse.dev/mat/snapshotBuilds.php

If you can test at a variety of resolutions, or with a monitor and a laptop display, so much the better.

I haven't done anything about the mat.app name yet.
Comment 5 Andrew Johnson CLA 2023-10-07 07:29:16 EDT
On Windows with a 2560x1600 16-inch display (~188dpi) at 150% for icons, Windows 11 uses the 48x48 icon, which is now the icon with the bigger magnifying glass. Other lower resolutions seem to use a different icon - perhaps 32x32.
Comment 6 Andrew Johnson CLA 2023-10-07 08:47:27 EDT
I don't yet understand the mat.app problem.
The Memory Analyzer dmg unpacks to:
mat/mat.app/Contents

The Eclipse dmg unpacks into
Eclipse/Eclipse.app/Contents

but I thought that the Info.plist file in those directories was more significant, with fields like:

    <key>CFBundleName</key>
    <string>MemoryAnalyzer</string>

    <key>CFBundleDisplayName</key>
    <string>MemoryAnalyzer</string>

compared to
    <key>CFBundleName</key>
    <string>Eclipse</string>
    <key>CFBundleDisplayName</key>
    <string>Eclipse</string>

Perhaps those are used when the application is actually installed.
Comment 7 Kevin Grigorenko CLA 2023-10-09 13:17:27 EDT
(In reply to Andrew Johnson from comment #6)
> I don't yet understand the mat.app problem.

Normally on macOS, the name of the .app is human friendly; presumably, something like Eclipse Memory Analyzer Tool. I use something like the following internally:

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-p2-director-plugin</artifactId>
        <configuration>
          <products>
            <product>
              <id>... uid from .product file ...</id>
              <rootFolders>
                <macosx>Eclipse Memory Analyzer Tool.app</macosx>
              </rootFolders>
            </product>
          </products>
Comment 8 Andrew Johnson CLA 2023-10-11 09:48:51 EDT
Kevin, please could you experiment with the app name problem. I thought Info.plist should have helped, but perhaps not.

I think the directory names on Windows should be short, as our documentation already might refer to the /mat directory. Also Windows has trouble with long paths.
so perhaps?
			<rootFolder>mat</rootFolder>
			<rootFolders>
				<macosx>Eclipse Memory Analyzer tool.app</macosx>
			</rootFolders>
			
or			
<macosx>Eclipse Memory Analyzer.app</macosx>
or
<macosx>Memory Analyzer.app</macosx>
depending on what the style is for a Mac, as 'tool' is not part of the official name so shouldn't be capitalized?
The Info.plist files gives the name as 'MemoryAnalyzer'.
https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundlename
https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundledisplayname

Where does that 'MemoryAnalyzer' come from? It appears in mat.product as <launcher name="MemoryAnalyzer"> but that is common across platforms, 
and the Eclipse version of Info.plist has 'Eclipse' has the cfbundlename, but 'eclipse' as the executable.

https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#/apple_ref/doc/uid/20001431-110725
>In macOS, before displaying a localized name for your bundle, the Finder compares the value of this key against the actual name of your bundle in the file system. If the two names match, the Finder
>proceeds to display the localized name from the appropriate InfoPlist.strings file of your bundle. If the names do not match, the Finder displays the file-system name.
so I think we should match the name.

I think there are some Mac signing references to 'mat.app' elsewhere in the POM which would need to be fixed for the new name.

This might be how Info.plist is built: https://github.com/eclipse-equinox/p2/blob/master/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java#L549

Perhaps the name has to be "MemoryAnalyzer".
Comment 9 Andrew Johnson CLA 2023-10-12 15:51:48 EDT
I've changed the build to now have MemoryAnalyzer.app

The p2 builder has the CFBundleName matching the executable, and for MacOS CFBundleName should match the .app name to allow the bundle name to be localized with a InfoPlist.strings file.

Does this Mac build still run properly?
Does it display any better?
Comment 11 Kevin Grigorenko CLA 2023-10-16 10:44:51 EDT
I tried a nightly build and the name looks good now (MemoryAnalyzer) but it fails to launch:

$ ./MemoryAnalyzer -debug -consoleLog
Start VM: --add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-Xmx1024m
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread
-Djava.class.path=/Users/kevin/work/mat/nightly/MemoryAnalyzer.app/Contents/MacOS//../Eclipse/plugins/org.eclipse.equinox.launcher_1.6.600.v20231012-1237.jar
-os macosx
-ws cocoa
-arch aarch64
-showsplash
-launcher /Users/kevin/work/mat/nightly/MemoryAnalyzer.app/Contents/MacOS/MemoryAnalyzer
-name MemoryAnalyzer
--launcher.library /Users/kevin/work/mat/nightly/MemoryAnalyzer.app/Contents/MacOS//../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.aarch64_1.2.800.v20231003-1442/eclipse_11802.so
-startup /Users/kevin/work/mat/nightly/MemoryAnalyzer.app/Contents/MacOS//../Eclipse/plugins/org.eclipse.equinox.launcher_1.6.600.v20231012-1237.jar
--launcher.overrideVmargs
-debug
-consoleLog
-vm /Library/Java/JavaVirtualMachines/ibm-semeru-open-17.jdk/Contents/Home/bin/../lib/server/libjvm.dylib
-vmargs
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-Xmx1024m
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread
-Djava.class.path=/Users/kevin/work/mat/nightly/MemoryAnalyzer.app/Contents/MacOS//../Eclipse/plugins/org.eclipse.equinox.launcher_1.6.600.v20231012-1237.jar 
Exception in thread "(unnamed thread)" java/lang/InternalError: linkToTargetMethod=Lambda(a0:L,a1:L)=>{
    t2:L=MethodHandle.invokeBasic(a1:L,a0:L);t2:L}
	at java/lang/invoke/MethodHandleStatics.newInternalError (java.base@17.0.8.1/MethodHandleStatics.java:151)
	at java/lang/invoke/LambdaForm.compileToBytecode (java.base@17.0.8.1/LambdaForm.java:871)
	at java/lang/invoke/Invokers.callSiteForm (java.base@17.0.8.1/Invokers.java:609)
	at java/lang/invoke/Invokers.linkToTargetMethod (java.base@17.0.8.1/Invokers.java:574)
	at java/lang/invoke/MethodHandleNatives.linkCallSiteImpl (java.base@17.0.8.1/MethodHandleNatives.java:288)
	at java/lang/invoke/MethodHandleNatives.linkCallSite (java.base@17.0.8.1/MethodHandleNatives.java:271)
	at java/lang/invoke/MethodHandleResolver.resolveInvokeDynamic (java.base@17.0.8.1/MethodHandleResolver.java:199)
	at java/lang/WeakPairMap.computeIfAbsent (java.base@17.0.8.1/WeakPairMap.java:157)
	at java/lang/Module.implAddExportsOrOpens (java.base@17.0.8.1/Module.java:957)
	at java/lang/Module.implAddExportsToAllUnnamed (java.base@17.0.8.1/Module.java:868)
	at java/lang/Access.addExportsToAllUnnamed (java.base@17.0.8.1/Access.java:273)
	at jdk/internal/module/Modules.addExportsToAllUnnamed (java.base@17.0.8.1/Modules.java:119)
	at jdk/internal/module/ModuleBootstrap.addExtraExportsOrOpens (java.base@17.0.8.1/ModuleBootstrap.java:773)
	at jdk/internal/module/ModuleBootstrap.addExtraExportsAndOpens (java.base@17.0.8.1/ModuleBootstrap.java:705)
	at jdk/internal/module/ModuleBootstrap.boot2 (java.base@17.0.8.1/ModuleBootstrap.java:465)
	at jdk/internal/module/ModuleBootstrap.boot (java.base@17.0.8.1/ModuleBootstrap.java:181)
	at java/lang/ClassLoader.initializeClassLoaders (java.base@17.0.8.1/ClassLoader.java:214)
	at java/lang/Thread.initialize (java.base@17.0.8.1/Thread.java:441)
	at java/lang/Thread.<init> (java.base@17.0.8.1/Thread.java:168)
Comment 12 Kevin Grigorenko CLA 2023-10-16 10:46:50 EDT
That error was with IBM Semeru Runtimes. Launching with HotSpot works. I could previously launch MAT with IBM Semeru Runtimes (e.g. the most recent 1.14 build).
Comment 13 Andrew Johnson CLA 2023-10-16 10:54:25 EDT
I don't know what has gone wrong.
Can you reproduce the error with a local build?
If so, if you revert this change, does it fix it?

We now hava a moving target, as https://download.eclipse.org/eclipse/updates/4.30-I-builds/ in mat-2023-12i can change. That's another possibility.
Comment 14 Andrew Johnson CLA 2023-10-16 12:11:52 EDT
Perhaps that error would go away if
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
was removed, but that is needed to get the IBM DTFJ plugin to work.
Comment 15 Kevin Grigorenko CLA 2023-10-16 15:44:26 EDT
I failed to reproduce with a local build (with IBM Semeru Runtimes):

1. git clone...
2. cd org.eclipse.mat/parent
3. mvn -DskipTests=true clean install
4. cd ../org.eclipse.mat.product/target/products/org.eclipse.mat.ui.rcp.MemoryAnalyzer/macosx/cocoa/aarch64/MemoryAnalyzer.app/Contents/MacOS
5. ./MemoryAnalyzer

Do I need some other arguments to match what the build server is creating?
Comment 16 Andrew Johnson CLA 2023-10-16 16:17:03 EDT
Yes, the build server is building with 
-Dmat-target=mat-2023-12i -Dmat-product=mat-2023-12

See bug 582476 comment 4.
Comment 17 Kevin Grigorenko CLA 2023-10-17 16:39:15 EDT
With that build definition, I can reproduce the launch failure locally. Again, the failure is only with IBM Semeru Runtimes. I received the following failure the first time and every subsequent launch I receive the java/lang/InternalError failure as originally reported.

!ENTRY org.eclipse.osgi 4 0 2023-10-17 15:36:11.735
!MESSAGE An error occurred while automatically activating bundle org.eclipse.equinox.registry (130).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.core.internal.registry.osgi.Activator.start() of bundle org.eclipse.equinox.registry.
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:839)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
	at org.eclipse.osgi.container.Module.doStart(Module.java:605)
	at org.eclipse.osgi.container.Module.start(Module.java:468)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.sources.MultiSourcePackage.loadClass(MultiSourcePackage.java:37)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1095)
	at java.base/java.lang.J9VMInternals.prepareClassImpl(Native Method)
	at java.base/java.lang.J9VMInternals.prepare(J9VMInternals.java:361)
	at java.base/java.lang.Class.getConstructors(Class.java:743)
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.<init>(ComponentConstructorImpl.java:98)
	at org.apache.felix.scr.impl.inject.internal.ComponentMethodsImpl.initComponentMethods(ComponentMethodsImpl.java:110)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1029)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:776)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437)
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671)
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310)
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593)
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74)
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460)
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196)
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169)
	at org.apache.felix.scr.impl.AbstractExtender.addingBundle(AbstractExtender.java:139)
	at org.apache.felix.scr.impl.AbstractExtender.addingBundle(AbstractExtender.java:49)
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:475)
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130)
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217)
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499)
	at org.eclipse.osgi.container.Module.start(Module.java:486)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1852)
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1845)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1786)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1750)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1672)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
Caused by: java.lang.NullPointerException
	at java.base/java.util.HashMap.resize(HashMap.java:702)
	at java.base/java.util.HashMap.putVal(HashMap.java:661)
	at java.base/java.util.HashMap.put(HashMap.java:610)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.<init>(XML11Configuration.java:645)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration.<init>(XIncludeAwareParserConfiguration.java:130)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration.<init>(XIncludeAwareParserConfiguration.java:91)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.SAXParser.<init>(SAXParser.java:113)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.SAXParser.<init>(SAXParser.java:98)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.<init>(SAXParserImpl.java:405)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:137)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:124)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:95)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:134)
	at org.eclipse.core.internal.registry.ExtensionsParser.parseManifest(ExtensionsParser.java:409)
	at org.eclipse.core.internal.registry.ExtensionRegistry.addContribution(ExtensionRegistry.java:1081)
	at org.eclipse.core.internal.registry.ExtensionRegistry.addContribution(ExtensionRegistry.java:1058)
	at org.eclipse.core.internal.registry.osgi.EclipseBundleListener.addBundle(EclipseBundleListener.java:186)
	at org.eclipse.core.internal.registry.osgi.EclipseBundleListener.processBundles(EclipseBundleListener.java:94)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.onStart(RegistryStrategyOSGI.java:243)
	at org.eclipse.core.internal.registry.ExtensionRegistry.<init>(ExtensionRegistry.java:740)
	at org.eclipse.core.runtime.RegistryFactory.createRegistry(RegistryFactory.java:61)
	at org.eclipse.core.internal.registry.osgi.Activator.startRegistry(Activator.java:143)
	at org.eclipse.core.internal.registry.osgi.Activator.start(Activator.java:60)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:748)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
	... 59 more
Root exception:
java.lang.NullPointerException
	at java.base/java.util.HashMap.resize(HashMap.java:702)
	at java.base/java.util.HashMap.putVal(HashMap.java:661)
	at java.base/java.util.HashMap.put(HashMap.java:610)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.<init>(XML11Configuration.java:645)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration.<init>(XIncludeAwareParserConfiguration.java:130)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration.<init>(XIncludeAwareParserConfiguration.java:91)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.SAXParser.<init>(SAXParser.java:113)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.SAXParser.<init>(SAXParser.java:98)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.<init>(SAXParserImpl.java:405)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:137)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:124)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:95)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:134)
	at org.eclipse.core.internal.registry.ExtensionsParser.parseManifest(ExtensionsParser.java:409)
	at org.eclipse.core.internal.registry.ExtensionRegistry.addContribution(ExtensionRegistry.java:1081)
	at org.eclipse.core.internal.registry.ExtensionRegistry.addContribution(ExtensionRegistry.java:1058)
	at org.eclipse.core.internal.registry.osgi.EclipseBundleListener.addBundle(EclipseBundleListener.java:186)
	at org.eclipse.core.internal.registry.osgi.EclipseBundleListener.processBundles(EclipseBundleListener.java:94)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.onStart(RegistryStrategyOSGI.java:243)
	at org.eclipse.core.internal.registry.ExtensionRegistry.<init>(ExtensionRegistry.java:740)
	at org.eclipse.core.runtime.RegistryFactory.createRegistry(RegistryFactory.java:61)
	at org.eclipse.core.internal.registry.osgi.Activator.startRegistry(Activator.java:143)
	at org.eclipse.core.internal.registry.osgi.Activator.start(Activator.java:60)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:748)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
	at org.eclipse.osgi.container.Module.doStart(Module.java:605)
	at org.eclipse.osgi.container.Module.start(Module.java:468)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.sources.MultiSourcePackage.loadClass(MultiSourcePackage.java:37)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1095)
	at java.base/java.lang.J9VMInternals.prepareClassImpl(Native Method)
	at java.base/java.lang.J9VMInternals.prepare(J9VMInternals.java:361)
	at java.base/java.lang.Class.getConstructors(Class.java:743)
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.<init>(ComponentConstructorImpl.java:98)
	at org.apache.felix.scr.impl.inject.internal.ComponentMethodsImpl.initComponentMethods(ComponentMethodsImpl.java:110)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1029)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:776)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437)
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671)
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310)
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593)
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74)
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460)
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196)
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169)
	at org.apache.felix.scr.impl.AbstractExtender.addingBundle(AbstractExtender.java:139)
	at org.apache.felix.scr.impl.AbstractExtender.addingBundle(AbstractExtender.java:49)
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:475)
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138)
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130)
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217)
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499)
	at org.eclipse.osgi.container.Module.start(Module.java:486)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1852)
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1845)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1786)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1750)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1672)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
Comment 18 Andrew Johnson CLA 2023-10-18 01:50:55 EDT
I would like to know if the failure is caused by the mat.app -> MemoryAnalyzer.app change or the mat-2023-12i.target change.

Does an I-build of Eclipse 4.30 run correctly with those start-up options?
https://download.eclipse.org/eclipse/downloads/index.html
Does MAT run if installed into that Eclipse?

The mat-2023-12i target references
https://download.eclipse.org/eclipse/updates/4.30-I-builds/
which has a new version every day, and is so might not be stable.

Eclipse 4.29 referenced in mat-2023-09 works for you, which is good.
Do other versions fail? E.g. the first drop for Eclipse 4.30?
https://download.eclipse.org/eclipse/updates/4.30-I-builds/I20230906-0400/

Perhaps try the version which was used for Eclipse 4.30-M1
https://download.eclipse.org/eclipse/downloads/drops4/S-4.30M1-202309271800/
  https://download.eclipse.org/eclipse/updates/4.30-I-builds/I20230927-1800/



Is this that failing line?

Root exception:
java.lang.NullPointerException
	at java.base/java.util.HashMap.resize(HashMap.java:702)

https://github.com/openjdk/jdk/blob/dfacda488bfbe2e11e8d607a6d08527710286982/src/java.base/share/classes/java/util/HashMap.java#L702C9-L702C9

Could it be a JVM problem?
Comment 19 Kevin Grigorenko CLA 2023-10-18 14:35:45 EDT
I reverted https://git.eclipse.org/c/mat/org.eclipse.mat.git/commit/?id=c25da90d0d4830d47e00a7b8279a89313d81ae59 but I can still reproduce the error. It seems like the error is non-deterministic as now it is:

Exception in thread "main" java.lang.ExceptionInInitializerError
	at java.base/java.lang.J9VMInternals.ensureError(J9VMInternals.java:206)
	at java.base/java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:195)
	at java.base/sun.security.util.DisabledAlgorithmConstraints$Constraints.<init>(DisabledAlgorithmConstraints.java:371)
	at java.base/sun.security.util.DisabledAlgorithmConstraints.<init>(DisabledAlgorithmConstraints.java:150)
	at java.base/sun.security.util.DisabledAlgorithmConstraints.<init>(DisabledAlgorithmConstraints.java:124)
	at java.base/sun.security.util.DisabledAlgorithmConstraints$JarHolder.<clinit>(DisabledAlgorithmConstraints.java:100)
	at java.base/sun.security.util.DisabledAlgorithmConstraints.jarConstraints(DisabledAlgorithmConstraints.java:114)
	at java.base/sun.security.pkcs.SignerInfo.<clinit>(SignerInfo.java:61)
	at java.base/sun.security.pkcs.PKCS7.parseSignedData(PKCS7.java:364)
	at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:158)
	at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:126)
	at java.base/sun.security.pkcs.PKCS7.<init>(PKCS7.java:108)
	at java.base/sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:125)
	at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:308)
	at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:239)
	at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:761)
	at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1035)
	at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:72)
	at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:1015)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:1160)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:961)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:867)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:825)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1095)
Caused by: java.lang.NullPointerException
	at java.base/java.util.Arrays.copyOfRange(Arrays.java:3854)
	at java.base/java.lang.StringUTF16.newString(StringUTF16.java:1179)
	at java.base/java.lang.String.substring(String.java:3483)
	at java.base/java.math.BigInteger.<init>(BigInteger.java:537)
	at java.base/sun.security.util.CurveDB.bi(CurveDB.java:109)
	at java.base/sun.security.util.CurveDB.add(CurveDB.java:128)
	at java.base/sun.security.util.CurveDB.<clinit>(CurveDB.java:558)
	... 23 more


> Does an I-build of Eclipse 4.30 run correctly with those start-up options?
> https://download.eclipse.org/eclipse/downloads/index.html
> Does MAT run if installed into that Eclipse?

What's the best way to install my local build of MAT into a downloaded Eclipse?
Comment 20 Andrew Johnson CLA 2023-10-19 05:38:39 EDT
Caused by: java.lang.NullPointerException
	at java.base/java.util.Arrays.copyOfRange(Arrays.java:3854)
	at java.base/java.lang.StringUTF16.newString(StringUTF16.java:1179)

if the failure is roughly here:
https://github.com/openjdk/jdk/blob/dfacda488bfbe2e11e8d607a6d08527710286982/src/java.base/share/classes/java/util/Arrays.java#L3854

was the array null, or did new short[] is return null!

The Maven build should produce an update site. 
See project: org.eclipse.mat.updatesite

There might be an unpacked update site at target/repository and a zipped one at org.eclipse.mat.updatesite-1.15.0-SNAPSHOT.zip
Comment 21 Sebastian Davids CLA 2023-10-19 07:56:49 EDT
I have opened Bug 582551 for bundling a JRE within the MAT application.
Comment 22 Kevin Grigorenko CLA 2023-10-23 15:40:44 EDT
I installed 4.30M1, then added MAT using org.eclipse.mat.product-1.15.0-SNAPSHOT.zip, restarted, switched to the MAT perspective and everything worked fine (with the same IBM Semeru Runtimes JVM that fails if I try the mat.app build directly).

Opened OpenJ9 bug report: https://github.com/eclipse-openj9/openj9/issues/18336
Comment 23 Kevin Grigorenko CLA 2023-10-24 08:54:51 EDT
My launch failures are due to a bug in IBM Semeru Runtimes: https://github.com/eclipse-openj9/openj9/issues/18336#issuecomment-1776608320
Comment 24 Andrew Johnson CLA 2023-11-02 03:42:49 EDT
For the Semeru JIT bug:
https://github.com/eclipse-openj9/openj9/issues/18336#issuecomment-1787282636
>Confirmed issue is fixed, thanks!

So for this bug - are the icons good, and is the application name acceptable?
Can we mark this as fixed?
Comment 25 Kevin Grigorenko CLA 2023-11-03 13:05:18 EDT
Yes, I think so, thanks!
Comment 26 Sebastian Davids CLA 2023-11-03 15:29:31 EDT
Created attachment 289221 [details]
no alpha channel and lower resolution than the other 2 icons
Comment 27 Sebastian Davids CLA 2023-11-03 15:30:12 EDT
Created attachment 289222 [details]
resolution looks OK but no alpha channel
Comment 28 Sebastian Davids CLA 2023-11-03 15:30:47 EDT
Created attachment 289223 [details]
resolution not OK and no alpha channel
Comment 29 Sebastian Davids CLA 2023-11-03 15:31:54 EDT
Created attachment 289224 [details]
resolution not OK

compare the resolution of the home icon with the others
Comment 30 Sebastian Davids CLA 2023-11-03 15:35:10 EDT
> Can we mark this as fixed?

The screen name has been fixed.

The icons still look not good -- take a look at the added attachments

I checked: Memory Analyzer Tool 1.15.0.202311030913
Comment 31 Andrew Johnson CLA 2023-11-05 07:12:50 EST
re: Comment 26 attachment 289221 [details]
RCP Feature icon from branding plugin o.e.mat.rcp.ui
featureImage=icons/memory_analyzer_32.png

There is alpha, but just transparent / opaque, not graduated.
The icon was designed for light mode, not dark mode, hence the gray shadow underneath.

A bigger icon doesn't work here - so needs a sharper 32x32 icon. 

re: Comment 27 attachment 289222 [details] 
Icon used for finder.
This is probably the memory_analyzer_64.png icon

There is alpha, but just transparent / opaque, not graduated.
Has a gray shadown under the database drum and under the magnifying glass.

re: Comment 28 attachment 289223 [details]
launchpad

This is probably the memory_analyzer_64.png icon, but might be
the memory_analyzer_128.png icon which looks to be a straight doubling
of the 64x64 icon - no resolution improvement, just double size pixels.

re: Comment 29 attachment 289224 [details]
icons down the side of the welcome screen.

I think these are based on the original memory_analyzer_16.gif or equivalent
memory_analyzer_16.png icons.

There is alpha, but just transparent / opaque, not graduated.

I think the icon is just blocky, I don't think we can use a bigger icon here.

So in conclusion - the 128x128 and 256x256 icons are just scaled up from 64x64 icon.
The shadow doesn't look good in dark mode for the 32x32 and above icons.

The small 16x16 icon is a bit blocky - and could have more graduated colours.

Unfortunately I'm not an icon designer, fixing this requires skill, and won't get done unless someone else can do it.
Comment 32 Andrew Johnson CLA 2023-11-21 03:57:27 EST
Marking this as done for 1.15.0 - if we need to do more we could reopen later, or create a new bug.