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 195d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassettiimport com.github.javaparser.resolution.MethodUsage; 205d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassettiimport com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration; 215d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassettiimport com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration; 225d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassettiimport com.github.javaparser.resolution.types.ResolvedReferenceType; 23e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti 24f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassettiimport java.util.HashSet; 25847f7c48337b56081b74ead7c93cc656817105bcFederico Tomassettiimport java.util.List; 26f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassettiimport java.util.Set; 27e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti 287fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti/** 29a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti * Common ancestor for most types. 30a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti * 317fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti * @author Federico Tomassetti 327fe8bb73b47f94245be6e14aa802fd3717ef8b60Federico Tomassetti */ 335d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassettipublic abstract class AbstractTypeDeclaration implements ResolvedReferenceTypeDeclaration { 34e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti 35f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti @Override 36a9313adb1a9e27207580d484238f353fc9a30327Federico Tomassetti public final Set<MethodUsage> getAllMethods() { 37f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti Set<MethodUsage> methods = new HashSet<>(); 38f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti 3955d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti Set<String> methodsSignatures = new HashSet<>(); 4055d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti 415d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassetti for (ResolvedMethodDeclaration methodDeclaration : getDeclaredMethods()) { 428d234965b572759181da7787fead07b225e9e5caFederico Tomassetti methods.add(new MethodUsage(methodDeclaration)); 4355d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti methodsSignatures.add(methodDeclaration.getSignature()); 44f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti } 45f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti 465d8d0cb7947efcf2282f7d056302dd905f348532Federico Tomassetti for (ResolvedReferenceType ancestor : getAllAncestors()) { 4755d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti for (MethodUsage mu : ancestor.getDeclaredMethods()) { 4855d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti String signature = mu.getDeclaration().getSignature(); 4955d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti if (!methodsSignatures.contains(signature)) { 5055d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti methodsSignatures.add(signature); 5155d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti methods.add(mu); 5255d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti } 5355d106b510714bd78b55c3690a165a50edac9679Federico Tomassetti } 54f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti } 55f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti 56f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti return methods; 57f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti } 58f20bec1be7e976300ef4857e347bc735ded0f305Federico Tomassetti 59f640162d77a6e37204544eb2ea29dd4ca815ce08Federico Tomassetti @Override 60f640162d77a6e37204544eb2ea29dd4ca815ce08Federico Tomassetti public final boolean isFunctionalInterface() { 61f640162d77a6e37204544eb2ea29dd4ca815ce08Federico Tomassetti return FunctionalInterfaceLogic.getFunctionalMethod(this).isPresent(); 62f640162d77a6e37204544eb2ea29dd4ca815ce08Federico Tomassetti } 63847f7c48337b56081b74ead7c93cc656817105bcFederico Tomassetti 64e21fca16e413a8bf31d613aa97a744d075c374ddFederico Tomassetti} 65