IDEA-97381 (Cloneable class in secure context wrongly prompts for generic parameters)

This commit is contained in:
Bas Leijdekkers
2012-12-13 15:20:19 +01:00
parent 39f4d2b0b2
commit 7cf3221fa3
4 changed files with 31 additions and 9 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
* Copyright 2003-2012 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ package com.siyeh.ig.security;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiTypeParameter;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -28,27 +29,23 @@ public class CloneableClassInSecureContextInspection extends BaseInspection {
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message(
"cloneable.class.in.secure.context.display.name");
return InspectionGadgetsBundle.message("cloneable.class.in.secure.context.display.name");
}
@NotNull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message(
"cloneable.class.in.secure.context.problem.descriptor");
return InspectionGadgetsBundle.message("cloneable.class.in.secure.context.problem.descriptor");
}
public BaseInspectionVisitor buildVisitor() {
return new CloneableClassInSecureContextVisitor();
}
private static class CloneableClassInSecureContextVisitor
extends BaseInspectionVisitor {
private static class CloneableClassInSecureContextVisitor extends BaseInspectionVisitor {
@Override
public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so it doesn't drill down
if (aClass.isInterface() || aClass.isAnnotationType()) {
if (aClass.isInterface() || aClass.isAnnotationType() || aClass instanceof PsiTypeParameter) {
return;
}
if (!CloneUtils.isCloneable(aClass)) {
@@ -0,0 +1,6 @@
package com.siyeh.igtest.security.cloneable_class_in_secure_context;
class CloneableClassInSecureContext implements Cloneable {
}
interface EventListener<E extends Cloneable> {
}
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>CloneableClassInSecureContext.java</file>
<line>3</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Cloneable class in secure context</problem_class>
<description>Class &lt;code&gt;CloneableClassInSecureContext&lt;/code&gt; may be cloned, compromising security #loc</description>
</problem>
</problems>
@@ -0,0 +1,10 @@
package com.siyeh.ig.security;
import com.siyeh.ig.IGInspectionTestCase;
public class CloneableClassInSecureContextInspectionTest extends IGInspectionTestCase {
public void test() throws Exception {
doTest("com/siyeh/igtest/security/cloneable_class_in_secure_context", new CloneableClassInSecureContextInspection());
}
}