diff --git a/translator/src/main/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslator.java b/translator/src/main/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslator.java index ad82b66dcf..9716db777e 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslator.java +++ b/translator/src/main/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslator.java @@ -748,7 +748,7 @@ private NativeTypeVisitor( public Void visitDeclared(DeclaredType type, StringBuilder builder) { builder.append(toNativeType(type, methodExecutable, referencedTypes)); List typeArguments = type.getTypeArguments(); - if (!typeArguments.isEmpty()) { + if (options.asObjCGenericDecl() && !typeArguments.isEmpty()) { String typeArgsString = buildTypeArgumentString(typeArguments); builder.append("<").append(typeArgsString).append(">"); } diff --git a/translator/src/test/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslatorTest.java b/translator/src/test/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslatorTest.java index 8a45572ec2..721bc3ab67 100644 --- a/translator/src/test/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslatorTest.java +++ b/translator/src/test/java/com/google/devtools/j2objc/translate/ObjectiveCKmpMethodTranslatorTest.java @@ -24,6 +24,7 @@ public class ObjectiveCKmpMethodTranslatorTest extends GenerationTest { @Override public void setUp() throws IOException { super.setUp(); + options.load(new String[] {"--objc-generics"}); addSourceFile( """ package com.google.common.collect; @@ -276,7 +277,8 @@ public List> getMatrix() { assertInTranslation( testImplementation, "return (NSArray *> *) [Adapter" - + " fromJavaUtilList_JavaUtilList_WithJavaUtilList:(id) [self getMatrix]]"); + + " fromJavaUtilList_JavaUtilList_WithJavaUtilList:(id) [self" + + " getMatrix]]"); } /** Tests mixed nested collection conversion with @ObjectiveCKmpMethod. */ @@ -1061,7 +1063,6 @@ public ImmutableList getItems() { assertNotInTranslation( concreteHeader, "- (void)setItems:(NSArray *)items;"); assertNotInTranslation(concreteHeader, "- (NSArray *)getItems;"); - assertNotInTranslation(concreteHeader, "@class MyPkgCustomClass;"); String concreteImpl = translateSourceFile("ConcreteClass", "ConcreteClass.m"); assertNotInTranslation(concreteImpl, "- (void)setItems:(NSArray *)items {"); @@ -1405,6 +1406,37 @@ void ConstTest_initWithList_(ConstTest *self_, NSArray *list) { """); } + public void testObjCGenerics() throws IOException { + + addSourceFile( + """ + import com.google.j2objc.annotations.ObjectiveCKmpMethod; + import java.util.List; + public class GenericsOn { + @ObjectiveCKmpMethod(selector="setList:", adapter=Adapter.class) + public void setList(List list) {} + } + """, + "GenericsOn.java"); + String headerOn = translateSourceFile("GenericsOn", "GenericsOn.h"); + assertInTranslation(headerOn, "- (void)setList:(NSArray *)list;"); + + options.setAsObjCGenericDecl(false); + addSourceFile( + """ + import com.google.j2objc.annotations.ObjectiveCKmpMethod; + import java.util.List; + public class GenericsOff { + @ObjectiveCKmpMethod(selector="setList:", adapter=Adapter.class) + public void setList(List list) {} + } + """, + "GenericsOff.java"); + String headerOff = translateSourceFile("GenericsOff", "GenericsOff.h"); + assertInTranslation(headerOff, "- (void)setList:(NSArray *)list;"); + options.setAsObjCGenericDecl(true); + } + public void testSetOfBooleanFails() throws IOException { addSourceFile( """