JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/resolution/types/ResolvedIntersectionType.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21
22package com.github.javaparser.resolution.types;
23
24import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
25
26import java.util.*;
27import java.util.stream.Collectors;
28
29/**
30 * An intersection type is defined in java as list of types separates by ampersands.
31 *
32 * @author Federico Tomassetti
33 */
34public class ResolvedIntersectionType implements ResolvedType {
35    private List<ResolvedTypeelements;
36
37    public ResolvedIntersectionType(Collection<ResolvedTypeelements) {
38        if (elements.size() < 2) {
39            throw new IllegalArgumentException("An intersection type should have at least two elements. This has " + elements.size());
40        }
41        this.elements = new LinkedList<>(elements);
42    }
43
44    @Override
45    public boolean equals(Object o) {
46        if (this == o) return true;
47        if (o == null || getClass() != o.getClass()) return false;
48
49        ResolvedIntersectionType that = (ResolvedIntersectionTypeo;
50
51        return new HashSet<>(elements).equals(new HashSet<>(that.elements));
52    }
53
54    @Override
55    public int hashCode() {
56        return new HashSet<>(elements).hashCode();
57    }
58
59    @Override
60    public String describe() {
61        return String.join(" & "elements.stream().map(ResolvedType::describe).collect(Collectors.toList()));
62    }
63
64    @Override
65    public boolean isAssignableBy(ResolvedType other) {
66        return elements.stream().allMatch(e -> e.isAssignableBy(other));
67    }
68
69    @Override
70    public ResolvedType replaceTypeVariables(ResolvedTypeParameterDeclaration tpResolvedType replacedMap<ResolvedTypeParameterDeclarationResolvedTypeinferredTypes) {
71        List<ResolvedTypeelementsReplaced = elements.stream()
72                .map(e -> e.replaceTypeVariables(tpreplacedinferredTypes))
73                .collect(Collectors.toList());
74        if (elementsReplaced.equals(elements)) {
75            return this;
76        } else {
77            return new ResolvedIntersectionType(elementsReplaced);
78        }
79    }
80
81}
82
MembersX
ResolvedIntersectionType:elements
ResolvedIntersectionType:describe
ResolvedIntersectionType:hashCode
ResolvedIntersectionType:replaceTypeVariables
ResolvedIntersectionType:ResolvedIntersectionType
ResolvedIntersectionType:equals:Block:that
ResolvedIntersectionType:isAssignableBy
ResolvedIntersectionType:equals
ResolvedIntersectionType:replaceTypeVariables:Block:elementsReplaced
Members
X