/** * Gets the return {@link Type} for a new inner type with given {@link SimpleName} created in the given declaring * {@link TypeDeclaration}.<br> * This method respects type parameters existing in the declaring types of the new inner type and depending on the * existence of such type parameters creates the return type as qualified including type parameter wildcards or as * simple type. * * @param innerTypeSimpleName * The {@link SimpleName} of the new inner type. * @param innerTypeDeclaringType * The {@link TypeDeclaration} in which the new inner type will be created. * @return A {@link Type} to be used as return type for a getter method returning the given type. */ public static Type getInnerTypeReturnType(SimpleName innerTypeSimpleName, TypeDeclaration innerTypeDeclaringType) { AST ast = innerTypeSimpleName.getAST(); Deque<TypeDeclaration> declaringTypes = AstUtils.getDeclaringTypes(innerTypeDeclaringType); if (hasTypeParametersInDeclaringTypes(declaringTypes)) { // return type with type-parameters in the declaring types Type type = null; Iterator<TypeDeclaration> topDownIterator = declaringTypes.descendingIterator(); while (topDownIterator.hasNext()) { type = wrapParameterizedIfRequired(topDownIterator.next(), type); } if (type != null) { return ast.newQualifiedType(type, innerTypeSimpleName); } } // return type without type-parameters in the declaring types (default case) return ast.newSimpleType(innerTypeSimpleName); }
private void addSimpleTypeQualification(final CompilationUnitRewrite targetRewrite, final ITypeBinding declaring, final SimpleType simpleType, final TextEditGroup group) { Assert.isNotNull(targetRewrite); Assert.isNotNull(declaring); Assert.isNotNull(simpleType); final AST ast= targetRewrite.getRoot().getAST(); if (!(simpleType.getName() instanceof QualifiedName)) { targetRewrite.getASTRewrite().replace(simpleType, ast.newQualifiedType(targetRewrite.getImportRewrite().addImport(declaring, ast), ast.newSimpleName(simpleType.getName().getFullyQualifiedName())), group); targetRewrite.getImportRemover().registerRemovedNode(simpleType); } }
private void addSimpleTypeQualification(final CompilationUnitRewrite targetRewrite, final ITypeBinding declaring, final SimpleType simpleType, final TextEditGroup group) { Assert.isNotNull(targetRewrite); Assert.isNotNull(declaring); Assert.isNotNull(simpleType); final AST ast= targetRewrite.getRoot().getAST(); if (!(simpleType.getName() instanceof QualifiedName)) { targetRewrite.getASTRewrite().replace(simpleType, ast.newQualifiedType(targetRewrite.getImportRewrite().addImport(declaring, ast), ast.newSimpleName(simpleType.getName().getFullyQualifiedName())), group); targetRewrite.getImportRemover().registerRemovedNode(simpleType); } }
private void addSimpleTypeQualification(final CompilationUnitRewrite targetRewrite, final ITypeBinding declaring, final SimpleType simpleType, final TextEditGroup group) { Assert.isNotNull(targetRewrite); Assert.isNotNull(declaring); Assert.isNotNull(simpleType); final AST ast= targetRewrite.getRoot().getAST(); if (!(simpleType.getName() instanceof QualifiedName)) { targetRewrite.getASTRewrite().replace(simpleType, ast.newQualifiedType(targetRewrite.getImportRewrite().addImport(declaring, ast), ast.newSimpleName(simpleType.getName().getFullyQualifiedName())), group); targetRewrite.getImportRemover().registerRemovedNode(simpleType); } }
private Type qualifiedType(String... names) { switch (names.length) { case 0: throw new IllegalArgumentException(null, "Expected one or more names, but got 0"); case 1: return simpleType(names[0]); default: Type type = ast.newSimpleType(ast.newSimpleName(names[0])); for (int i = 1; i < names.length; i++) { type = ast.newQualifiedType(type, ast.newSimpleName(names[i])); } return type; } }
@SuppressWarnings("unchecked") private static Type wrapParameterizedIfRequired(TypeDeclaration template, Type type) { AST ast = template.getAST(); SimpleName sn = ast.newSimpleName(template.getName().getIdentifier()); if (type == null) { type = ast.newSimpleType(sn); } else { type = ast.newQualifiedType(type, sn); } if (template.typeParameters().isEmpty()) { return type; } ParameterizedType parameterizedType = ast.newParameterizedType(type); for (int i = 0; i < template.typeParameters().size(); i++) { parameterizedType.typeArguments().add(ast.newWildcardType()); } return parameterizedType; }
private void qualifyToTopLevelClass(SimpleName toQualify) { ITypeBinding declaringClass= getDeclaringClassBinding(toQualify); if (declaringClass == null) return; Type newQualification= fNewLocationCuRewrite.getImportRewrite().addImport(declaringClass, fInitializerRewrite.getAST()); fNewLocationCuRewrite.getImportRemover().registerAddedImports(newQualification); SimpleName newToQualify= (SimpleName) fInitializerRewrite.createMoveTarget(toQualify); Type newType= fInitializerRewrite.getAST().newQualifiedType(newQualification, newToQualify); fInitializerRewrite.replace(toQualify, newType, null); }
private void qualifyToTopLevelClass(SimpleName toQualify) { ITypeBinding declaringClass= getDeclaringClassBinding(toQualify); if (declaringClass == null) return; Type newQualification= fNewLocationCuRewrite.getImportRewrite().addImport(declaringClass.getErasure(), fInitializerRewrite.getAST(), fNewLocationContext); fNewLocationCuRewrite.getImportRemover().registerAddedImports(newQualification); SimpleName newToQualify= (SimpleName) fInitializerRewrite.createMoveTarget(toQualify); Type newType= fInitializerRewrite.getAST().newQualifiedType(newQualification, newToQualify); fInitializerRewrite.replace(toQualify, newType, null); }
private void qualifyToTopLevelClass(SimpleName toQualify) { ITypeBinding declaringClass= getDeclaringClassBinding(toQualify); if (declaringClass == null) return; Type newQualification= fNewLocationCuRewrite.getImportRewrite().addImport(declaringClass.getErasure(), fInitializerRewrite.getAST(), fNewLocationContext); fNewLocationCuRewrite.getImportRemover().registerAddedImports(newQualification); SimpleName newToQualify= (SimpleName) fInitializerRewrite.createMoveTarget(toQualify); Type newType= fInitializerRewrite.getAST().newQualifiedType(newQualification, newToQualify); fInitializerRewrite.replace(toQualify, newType, null); }
type = createBaseType(ast, context, normalizedBinding); } else { type = currentType != null ? (Type) ast.newQualifiedType(currentType, ast.newSimpleName(getRawName(normalizedBinding))) : ast.newSimpleType(ast.newName(getRawName(normalizedBinding))); type = annotateType(normalizedBinding, ast, context, type);
type = createBaseType(ast, context, normalizedBinding, location); } else { type = currentType != null ? (Type) ast.newQualifiedType(currentType, ast.newSimpleName(getRawName(normalizedBinding))) : ast.newSimpleType(ast.newName(getRawName(normalizedBinding))); type = annotateType(normalizedBinding, ast, context, type, location);
type = createBaseType(ast, context, normalizedBinding); } else { type = currentType != null ? (Type) ast.newQualifiedType(currentType, ast.newSimpleName(getRawName(normalizedBinding))) : ast.newSimpleType(ast.newName(getRawName(normalizedBinding))); type = annotateType(normalizedBinding, ast, context, type);
type = createBaseType(ast, context, normalizedBinding); } else { type = currentType != null ? (Type) ast.newQualifiedType(currentType, ast.newSimpleName(getRawName(normalizedBinding))) : ast.newSimpleType(ast.newName(getRawName(normalizedBinding))); type = annotateType(normalizedBinding, ast, context, type);
type = createBaseType(ast, context, normalizedBinding, location); } else { type = currentType != null ? (Type) ast.newQualifiedType(currentType, ast.newSimpleName(getRawName(normalizedBinding))) : ast.newSimpleType(ast.newName(getRawName(normalizedBinding))); type = annotateType(normalizedBinding, ast, context, type, location);