AbstractTypeDeclaration.java revision a9313adb1a9e27207580d484238f353fc9a30327
1683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti/*
2683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Copyright 2016 Federico Tomassetti
3683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti *
4683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Licensed under the Apache License, Version 2.0 (the "License");
5683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * you may not use this file except in compliance with the License.
6683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * You may obtain a copy of the License at
7683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti *
8683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * http://www.apache.org/licenses/LICENSE-2.0
9683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti *
10683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Unless required by applicable law or agreed to in writing, software
11683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * distributed under the License is distributed on an "AS IS" BASIS,
12683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * See the License for the specific language governing permissions and
14683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * limitations under the License.
15683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti */
16683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti
179c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettipackage com.github.javaparser.symbolsolver.logic;
18e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti
199c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
209c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration;
2108322b4714f672bed5ec424d3ace0a40da9ccd47Federico Tomassettiimport com.github.javaparser.symbolsolver.model.methods.MethodUsage;
2208322b4714f672bed5ec424d3ace0a40da9ccd47Federico Tomassettiimport com.github.javaparser.symbolsolver.model.typesystem.ReferenceType;
23e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti
24f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassettiimport java.util.HashSet;
25f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassettiimport java.util.Set;
26e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti
277fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti/**
28a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti * Common ancestor for most types.
29a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti *
307fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti * @author Federico Tomassetti
317fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti */
32e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassettipublic abstract class AbstractTypeDeclaration implements TypeDeclaration {
33e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti
34f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti    @Override
35a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti    public final Set<MethodUsage> getAllMethods() {
36f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti        Set<MethodUsage> methods = new HashSet<>();
37f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti
3855d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti        Set<String> methodsSignatures = new HashSet<>();
3955d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti
40f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti        for (MethodDeclaration methodDeclaration : getDeclaredMethods()) {
418d234965b572759181da7787fead07b225e9e5caFederico Tomassetti            methods.add(new MethodUsage(methodDeclaration));
4255d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti            methodsSignatures.add(methodDeclaration.getSignature());
43f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti        }
44f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti
4582eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti        for (ReferenceType ancestor : getAllAncestors()) {
4655d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti            for (MethodUsage mu : ancestor.getDeclaredMethods()) {
4755d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti                String signature = mu.getDeclaration().getSignature();
4855d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti                if (!methodsSignatures.contains(signature)) {
4955d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti                    methodsSignatures.add(signature);
5055d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti                    methods.add(mu);
5155d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti                }
5255d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti            }
53f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti        }
54f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti
55f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti        return methods;
56f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti    }
57f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti
58e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti}
59