Skip to content
Permalink
Browse files
GROOVY-10583: do not print generics of type parameter
  • Loading branch information
eric-milles committed Apr 16, 2022
1 parent dcdb5fd commit 9c52ac70c2d8cdb674ff9bec04d15d926d466ace
Showing 2 changed files with 51 additions and 3 deletions.
@@ -98,12 +98,12 @@ private static String genericsBounds(final ClassNode theType, final Set<String>
StringBuilder ret = appendName(theType, new StringBuilder());

GenericsType[] genericsTypes = theType.getGenericsTypes();
if (genericsTypes == null || genericsTypes.length == 0) {
if (genericsTypes == null || genericsTypes.length == 0 || theType.isGenericsPlaceHolder()) { // GROOVY-10583
return ret.toString();
}

// TODO: instead of catching Object<T> here stop it from being placed into type in first place
if (genericsTypes.length == 1 && genericsTypes[0].isPlaceholder() && theType.getName().equals("java.lang.Object")) {
// TODO: instead of catching Object<T> here, stop it from being placed into type in the first place
if (genericsTypes.length == 1 && genericsTypes[0].isPlaceholder() && ret.toString().equals(ClassHelper.OBJECT)) {
return genericsTypes[0].getName();
}

@@ -0,0 +1,48 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.codehaus.groovy.tools.stubgenerator

final class Groovy10583 extends StringSourcesStubTestCase {

@Override
Map<String, String> provideSources() {
[
'C.groovy': '''
class C {
def <S extends CharSequence, N extends Number> List<N>
m(Collection<? extends S> input, Class<N> outputType = Integer) {
}
}
''',
'Main.java': '''
public class Main {
public static void main(String[] args) {
new C();
}
}
''',
]
}

@Override
void verifyStubs() {
String stub = stubJavaSourceFor('C')
assert stub.contains('Collection<? extends S> input') // not S<S extends java.lang.CharSequence>>
}
}

0 comments on commit 9c52ac7

Please sign in to comment.