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