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