1 /******************************************************************************* 2 * Copyright (c) 2008, 2019 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.pde.api.tools.internal.builder; 15 16 import java.util.Set; 17 18 import org.eclipse.jdt.core.Flags; 19 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference; 20 import org.eclipse.pde.api.tools.internal.provisional.model.IApiType; 21 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem; 22 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes; 23 24 /** 25 * Detects leaks in method return types 26 * 27 * @since 1.1 28 */ 29 public class LeakReturnTypeDetector extends MethodLeakDetector { 30 31 /** 32 * @param nonApiPackageNames 33 */ LeakReturnTypeDetector(Set<String> nonApiPackageNames)34 public LeakReturnTypeDetector(Set<String> nonApiPackageNames) { 35 super(nonApiPackageNames); 36 } 37 38 @Override getSeverityKey()39 protected String getSeverityKey() { 40 return IApiProblemTypes.LEAK_METHOD_RETURN_TYPE; 41 } 42 43 @Override getReferenceKinds()44 public int getReferenceKinds() { 45 return IReference.REF_RETURNTYPE; 46 } 47 48 @Override getProblemFlags(IReference reference)49 protected int getProblemFlags(IReference reference) { 50 return IApiProblem.LEAK_RETURN_TYPE; 51 } 52 53 @Override isProblem(IReference reference)54 protected boolean isProblem(IReference reference) { 55 if (super.isProblem(reference) == true) { 56 return true; 57 } 58 IApiType type = (IApiType) reference.getResolvedReference(); 59 int modifiers = type.getModifiers(); 60 return Flags.isPackageDefault(modifiers); 61 } 62 63 } 64