Skip to content

Commit f9b6dd2

Browse files
FA bugfix mostly on mac
1 parent beff77f commit f9b6dd2

File tree

7 files changed

+36
-45
lines changed

7 files changed

+36
-45
lines changed

src/jdk.jpackage/linux/classes/jdk/jpackage/internal/DesktopIntegration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ private void appendFileAssociation(XMLStreamWriter xml,
345345
xml.writeStartElement("mime-type");
346346
xml.writeAttribute("type", fa.mimeType());
347347

348-
final var description = fa.nonEmptyDescription().orElse(null);
348+
final var description = fa.description().orElse(null);
349349
if (description != null) {
350350
xml.writeStartElement("comment");
351351
xml.writeCharacters(description);

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacFileAssociationBuilder.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ MacFileAssociation create(FileAssociation fa) throws ConfigException {
4343
Optional.ofNullable(cfBundleTypeRole).orElse(DEFAULTS.cfBundleTypeRole),
4444
Optional.ofNullable(lsHandlerRank).orElse(DEFAULTS.lsHandlerRank),
4545
Optional.ofNullable(lsTypeIsPackage).orElse(DEFAULTS.lsTypeIsPackage),
46-
Optional.ofNullable(nsDocumentClass).orElse(DEFAULTS.nsDocumentClass),
47-
Optional.ofNullable(nsPersistentStoreTypeKey).orElse(DEFAULTS.nsPersistentStoreTypeKey),
46+
Optional.ofNullable(nsDocumentClass),
47+
Optional.ofNullable(nsPersistentStoreTypeKey),
4848
Optional.ofNullable(lsSupportsOpeningDocumentsInPlace).orElse(DEFAULTS.lsSupportsOpeningDocumentsInPlace),
4949
Optional.ofNullable(uiSupportsDocumentBrowser).orElse(DEFAULTS.uiSupportsDocumentBrowser),
5050
Optional.ofNullable(utTypeConformsTo).orElse(DEFAULTS.utTypeConformsTo),
@@ -119,8 +119,6 @@ MacFileAssociationBuilder nsExportableTypes(List<String> v) {
119119
.cfBundleTypeRole("Editor")
120120
.cfBundleTypeName("")
121121
.lsTypeIsPackage(false)
122-
.nsDocumentClass("")
123-
.nsPersistentStoreTypeKey("")
124122
.lsSupportsOpeningDocumentsInPlace(false)
125123
.uiSupportsDocumentBrowser(false)
126124
.utTypeConformsTo(List.of("public.data"))

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacPackagingPipeline.java

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
import static jdk.jpackage.internal.ApplicationImageUtils.createWriteAppImageFileAction;
2828
import static jdk.jpackage.internal.util.PListWriter.writeArray;
2929
import static jdk.jpackage.internal.util.PListWriter.writeBoolean;
30+
import static jdk.jpackage.internal.util.PListWriter.writeBooleanIf;
3031
import static jdk.jpackage.internal.util.PListWriter.writeDict;
3132
import static jdk.jpackage.internal.util.PListWriter.writeKey;
3233
import static jdk.jpackage.internal.util.PListWriter.writeString;
3334
import static jdk.jpackage.internal.util.PListWriter.writeStringArray;
35+
import static jdk.jpackage.internal.util.PListWriter.writeStringOptional;
3436
import static jdk.jpackage.internal.util.XmlUtils.toXmlConsumer;
3537
import static jdk.jpackage.internal.util.function.ThrowingBiConsumer.toBiConsumer;
3638
import static jdk.jpackage.internal.util.function.ThrowingSupplier.toSupplier;
@@ -341,13 +343,13 @@ private static void writeCFBundleDocumentTypes(XMLStreamWriter xml,
341343
final var fas = app.fileAssociations().toList();
342344
if (!fas.isEmpty()) {
343345
writeKey(xml, "CFBundleDocumentTypes");
344-
for (var fa : fas) {
345-
writeArray(xml, toXmlConsumer(() -> {
346+
writeArray(xml, toXmlConsumer(() -> {
347+
for (var fa : fas) {
346348
writeDict(xml, toXmlConsumer(() -> {
347349
addFaToCFBundleDocumentTypes(xml, app, (MacFileAssociation) fa);
348350
}));
349-
}));
350-
}
351+
}
352+
}));
351353
}
352354
}
353355

@@ -356,13 +358,13 @@ private static void writeUTExportedTypeDeclarations(XMLStreamWriter xml,
356358
final var fas = app.fileAssociations().toList();
357359
if (!fas.isEmpty()) {
358360
writeKey(xml, "UTExportedTypeDeclarations");
359-
for (var fa : fas) {
360-
writeArray(xml, toXmlConsumer(() -> {
361+
writeArray(xml, toXmlConsumer(() -> {
362+
for (var fa : fas) {
361363
writeDict(xml, toXmlConsumer(() -> {
362364
addFaToUTExportedTypeDeclarations(xml, app, (MacFileAssociation) fa);
363365
}));
364-
}));
365-
}
366+
}
367+
}));
366368
}
367369
}
368370

@@ -381,26 +383,22 @@ private static void addFaToCFBundleDocumentTypes(XMLStreamWriter xml,
381383
MacApplication app, MacFileAssociation fa) throws XMLStreamException, IOException {
382384

383385
writeStringArray(xml, "LSItemContentTypes", List.of(faContentType(app, fa)));
384-
writeString(xml, "CFBundleTypeName", fa.description());
386+
writeStringOptional(xml, "CFBundleTypeName", fa.description());
385387
writeString(xml, "LSHandlerRank", fa.lsHandlerRank());
386388
writeString(xml, "CFBundleTypeRole", fa.cfBundleTypeRole());
387-
writeString(xml, "NSPersistentStoreTypeKey",
388-
fa.nsPersistentStoreTypeKey());
389-
writeString(xml, "NSDocumentClass", fa.nsDocumentClass());
389+
writeStringOptional(xml, "NSPersistentStoreTypeKey", fa.nsPersistentStoreTypeKey());
390+
writeStringOptional(xml, "NSDocumentClass", fa.nsDocumentClass());
390391
writeBoolean(xml, "LSIsAppleDefaultForType", true);
391-
writeBoolean(xml, "LSTypeIsPackage", fa.lsTypeIsPackage());
392-
writeBoolean(xml, "LSSupportsOpeningDocumentsInPlace",
393-
fa.lsSupportsOpeningDocumentsInPlace());
394-
writeBoolean(xml, "UISupportsDocumentBrowser",
395-
fa.uiSupportsDocumentBrowser());
392+
writeBooleanIf(xml, "LSTypeIsPackage", fa.lsTypeIsPackage(), true);
393+
writeBooleanIf(xml, "LSSupportsOpeningDocumentsInPlace", fa.lsSupportsOpeningDocumentsInPlace(), true);
394+
writeBooleanIf(xml, "UISupportsDocumentBrowser", fa.uiSupportsDocumentBrowser(), true);
396395
faWriteIcon(xml, "CFBundleTypeIconFile", fa);
397396
}
398397

399398
private static void addFaToUTExportedTypeDeclarations(XMLStreamWriter xml,
400-
MacApplication app, MacFileAssociation fa) throws XMLStreamException,
401-
IOException {
402-
writeString(xml, "UTTypeIdentifier", List.of(faContentType(app, fa)));
403-
writeString(xml, "UTTypeDescription", fa.description());
399+
MacApplication app, MacFileAssociation fa) throws XMLStreamException, IOException {
400+
writeString(xml, "UTTypeIdentifier", faContentType(app, fa));
401+
writeStringOptional(xml, "UTTypeDescription", fa.description());
404402
writeStringArray(xml, "UTTypeConformsTo", fa.utTypeConformsTo());
405403
faWriteIcon(xml, "UTTypeIconFile", fa);
406404

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/model/MacFileAssociationMixin.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package jdk.jpackage.internal.model;
2626

2727
import java.util.List;
28+
import java.util.Optional;
2829

2930
public interface MacFileAssociationMixin {
3031

@@ -36,9 +37,9 @@ public interface MacFileAssociationMixin {
3637

3738
boolean lsTypeIsPackage();
3839

39-
String nsDocumentClass();
40+
Optional<String> nsDocumentClass();
4041

41-
String nsPersistentStoreTypeKey();
42+
Optional<String> nsPersistentStoreTypeKey();
4243

4344
boolean lsSupportsOpeningDocumentsInPlace();
4445

@@ -49,8 +50,8 @@ public interface MacFileAssociationMixin {
4950
List<String> nsExportableTypes();
5051

5152
record Stub(String cfBundleTypeName, String cfBundleTypeRole,
52-
String lsHandlerRank, boolean lsTypeIsPackage, String nsDocumentClass,
53-
String nsPersistentStoreTypeKey,
53+
String lsHandlerRank, boolean lsTypeIsPackage, Optional<String> nsDocumentClass,
54+
Optional<String> nsPersistentStoreTypeKey,
5455
boolean lsSupportsOpeningDocumentsInPlace,
5556
boolean uiSupportsDocumentBrowser, List<String> utTypeConformsTo,
5657
List<String> nsExportableTypes) implements MacFileAssociationMixin {

src/jdk.jpackage/share/classes/jdk/jpackage/internal/LauncherFromParams.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,14 @@ Launcher create(Map<String, ? super Object> params) throws ConfigException {
9090
return toSupplier(() -> {
9191
final var faGroupBuilder = FileAssociationGroup.build();
9292

93-
FA_DESCRIPTION.copyInto(faParams, faGroupBuilder::description);
93+
if (OperatingSystem.current() == OperatingSystem.WINDOWS) {
94+
faGroupBuilder.description(FA_DESCRIPTION.findIn(faParams).orElseGet(() -> {
95+
return String.format("%s association", toSupplier(builder::create).get().name());
96+
}));
97+
} else {
98+
FA_DESCRIPTION.copyInto(faParams, faGroupBuilder::description);
99+
}
100+
94101
FA_ICON.copyInto(faParams, faGroupBuilder::icon);
95102
FA_EXTENSIONS.copyInto(faParams, faGroupBuilder::extensions);
96103
FA_CONTENT_TYPE.copyInto(faParams, faGroupBuilder::mimeTypes);

src/jdk.jpackage/share/classes/jdk/jpackage/internal/model/FileAssociation.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
import java.nio.file.Path;
2828
import java.util.Optional;
29-
import java.util.function.Predicate;
3029

3130
/**
3231
* File association.
@@ -35,7 +34,6 @@ public interface FileAssociation {
3534

3635
/**
3736
* Returns file association description if available or an empty {@link Optional} instance.
38-
* @see {@link #nonEmptyDescription()}
3937
* @return file association description
4038
*/
4139
Optional<String> description();
@@ -56,15 +54,6 @@ default boolean hasIcon() {
5654
return icon().isPresent();
5755
}
5856

59-
/**
60-
* Returns a non-empty description of this file association if available or an empty {@link Optional} instance.
61-
* @see {@link #description()}
62-
* @return non-empty file association description
63-
*/
64-
default Optional<String> nonEmptyDescription() {
65-
return description().filter(Predicate.not(String::isEmpty));
66-
}
67-
6857
/**
6958
* Returns file association MIME type. E.g.: <code>application/foo</code>, <code>text/plain<code>.
7059
* @return file association MIME type

src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixAppImageFragmentBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,9 +525,7 @@ private String addFaComponent(XMLStreamWriter xml,
525525

526526
Path path = INSTALLDIR.resolve(String.format("%s_%s", fa.extension(), launcherExe));
527527
return addComponent(xml, path, Component.ProgId, unused -> {
528-
fa.nonEmptyDescription().ifPresent(toConsumer(description -> {
529-
xml.writeAttribute("Description", description);
530-
}));
528+
xml.writeAttribute("Description", fa.description().orElseThrow());
531529

532530
if (fa.hasIcon()) {
533531
xml.writeAttribute("Icon", Id.File.of(getInstalledFaIcoPath(fa)));

0 commit comments

Comments
 (0)