diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/CommentReader.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/CommentReader.java
index 24e61a5..e8eca5e 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/CommentReader.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/CommentReader.java
@@ -31,6 +31,8 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class CommentReader {
+
+  private static final String AT_TEST = "@Test";
   private static final String COMMENT_START = "//";
 
   private final Map<String, List<String>> commentsByMethod = newHashMap();
@@ -67,8 +69,9 @@
     MultiLineTextBuilder comment = new MultiLineTextBuilder();
     try {
       scanner = new Scanner(new FileInputStream(file));
-      String line;
+      String line = "";
       while (scanner.hasNextLine()) {
+        String prevLine = line;
         line = scanner.nextLine().replaceFirst("^\\s*", "");
         if (line.startsWith(COMMENT_START)) {
           String text = line.substring(COMMENT_START.length());
@@ -82,7 +85,7 @@
           continue;
         }
         line = line.trim();
-        String testName = testName(line);
+        String testName = testName(line, prevLine);
         if (line.length() == 0 || testName != null) {
           if (!comments.contains(comment)) {
             comments.add(comment.toString());
@@ -101,11 +104,12 @@
     }
   }
 
-  private static String testName(String line) {
-    if (!line.startsWith("@Test")) {
-      return null;
+  private static String testName(String line, String prevLine) {
+    String testName = null;
+    if (line.startsWith(AT_TEST) || prevLine.startsWith(AT_TEST)) {
+      int indexOfShould = line.indexOf("should");
+      testName = (indexOfShould == -1) ? null : line.substring(indexOfShould, line.indexOf("("));
     }
-    int indexOfShould = line.indexOf("should");
-    return (indexOfShould == -1) ? null : line.substring(indexOfShould, line.indexOf("("));
+    return testName;
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
index 33123c9..a2decb5 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
@@ -281,8 +281,7 @@
   //     kind: CREATE
   //   };
   // }
-  @Test
-  public void should_provide_Literals_for_source_of_simple_value_field() {
+  @Test public void should_provide_Literals_for_source_of_simple_value_field() {
     Message message = xtext.find("Example", " {", Message.class);
     CustomOption customFieldOption = (CustomOption) message.getElements().get(0);
     ComplexValueCurlyBracket complexValueCurlyBracket =
