diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log
new file mode 100644
index 000000000000..a4e99b222775
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/classAsArgument/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/classAsArgument/Annotated.class
+End of files
+Compiling files:
+src/Annotated.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/.name b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/.name
new file mode 100644
index 000000000000..1ad8637be091
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/.name
@@ -0,0 +1 @@
+classAsArgument
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/ant.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/ant.xml
new file mode 100644
index 000000000000..2581ca3fe84c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/ant.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/compiler.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/compiler.xml
new file mode 100644
index 000000000000..a1b41c52c724
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/compiler.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/copyright/profiles_settings.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/copyright/profiles_settings.xml
new file mode 100644
index 000000000000..3572571ad83c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/encodings.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/encodings.xml
new file mode 100644
index 000000000000..e206d70d8595
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/encodings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/misc.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/misc.xml
new file mode 100644
index 000000000000..492d8ee45ce4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/misc.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ IDEA jdk
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/modules.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/modules.xml
new file mode 100644
index 000000000000..c4d3af7bae81
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/scopes/scope_settings.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/scopes/scope_settings.xml
new file mode 100644
index 000000000000..922003b8433b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/uiDesigner.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/uiDesigner.xml
new file mode 100644
index 000000000000..3b0002030884
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/vcs.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/vcs.xml
new file mode 100644
index 000000000000..def6a6a18457
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/workspace.xml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/workspace.xml
new file mode 100644
index 000000000000..e3892d54faff
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/.idea/workspace.xml
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ localhost
+ 5050
+
+
+
+
+
+ 1336138927353
+ 1336138927353
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/A.java.new
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/classAsArgument.iml b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/classAsArgument.iml
new file mode 100644
index 000000000000..60a321a1ac4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/classAsArgument.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java
new file mode 100644
index 000000000000..655e62ac6607
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:42
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java
new file mode 100644
index 000000000000..bec2f9e97ecd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java
@@ -0,0 +1,13 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:42
+ * To change this template use File | Settings | File Templates.
+ */
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.CLASS) public @interface Ann {
+ Class[] value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java
new file mode 100644
index 000000000000..5c49f5d0ba47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java
@@ -0,0 +1,10 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:43
+ * To change this template use File | Settings | File Templates.
+ */
+@Ann({A.class})
+public class Annotated {
+}
diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/AnnotationTest.java b/jps/jps-builders/testSrc/org/jetbrains/ether/AnnotationTest.java
index 638c570e7b5a..42815470cae9 100644
--- a/jps/jps-builders/testSrc/org/jetbrains/ether/AnnotationTest.java
+++ b/jps/jps-builders/testSrc/org/jetbrains/ether/AnnotationTest.java
@@ -56,6 +56,10 @@ public class AnnotationTest extends IncrementalTestCase {
doTest();
}
+ public void testClassAsArgument() throws Exception {
+ doTest();
+ }
+
/* Discussion is needed --- unnecessarily conservative
public void testMetaAnnotationChanged() throws Exception {
doTest();
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java b/jps/model/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java
index fb1a9ee7eb5c..f45e8fa2e304 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java
@@ -154,6 +154,14 @@ class ClassfileAnalyzer {
final String methodDescr = getMethodDescr(value);
final int methodName = context.get(name);
+ if (value instanceof Type) {
+ final String className = ((Type)value).getClassName();
+
+ if (className != null) {
+ usages.addUsage(residence, UsageRepr.createClassUsage(context, context.get(className)));
+ }
+ }
+
usages.addUsage(residence, UsageRepr.createMethodUsage(context, methodName, type.className, methodDescr));
usages.addUsage(residence, UsageRepr.createMetaMethodUsage(context, methodName, type.className, methodDescr));