24 Stimmen

Was bewirkt, dass eine Variable sichtbar ist (IntelliJ IDEA)

Mit IntelliJ IDEA, wie finde ich heraus, was eine Variable sichtbar macht?

Ein Beispiel, wann es schwierig ist:

  • Angenommen, du betrachtest Klasse A und siehst eine Variable etwas. Wenn du zur Quelle springst, siehst du, dass sie in Trait X definiert ist. Aber du erweiterst den Trait X nicht direkt. Was erweiterst du dann, dass diese Variable sichtbar macht? Bei einer tief verschachtelten Hierarchie kann das Tracking schwierig sein.

Irgendwelche Empfehlungen oder Lösungen?

EDIT: Bitte stimmen Sie für das Feature, wenn Sie interessiert sind: http://youtrack.jetbrains.com/issue/IDEA-124369

1voto

KarateKid Punkte 3236

Ich denke nicht, dass IntelliJ IDEA eine Abkürzung für "finden, was eine Variable sichtbar macht", hat.

Sie können es jedoch mit der Option "Verwendungen suchen" (Alt + F7) bestimmen. Zum Beispiel:

import java.nio._
object TempObj extends App {
   def func = 2
   val p = file.Paths.get("some-path")
   func
}

Also zeigt "Verwendungen suchen" von "file" an, dass es aus dem Paket "file" stammt (im Titel des neuen Tabs wird auch der vollständige Paketname angezeigt, z.B. Verwendungen von java.nio.file in Projektdateien). Während "Verwendungen suchen" von func anzeigt, dass es sich um eine Methode handelt (Und der Tab-Titel lautet nun: Verwendungen von func() in Projekt- und Bibliotheken)

Also können Sie somit herausfinden, was die Variable sichtbar macht. Dies funktioniert auch bei Imports, da es das Paket anzeigt, aus dem es importiert wird, und Sie dann nach dem Import dieses Pakets suchen können.

0voto

Chris Kitching Punkte 2540

Ich kenne zwei fast-Lösungen für dieses Problem.

Die "Gehe-zur-Deklaration" - wie von Ihnen erwähnt - löst dieses Problem im Fall von lokalen Variablen.

Allgemeiner gesagt, die Funktion "Verwendungen finden" gibt Ihnen eine schöne kleine Aufschlüsselung nach Typ und Datei von verschiedenen Verwendungen der Variablen. Davon aus können Sie sehen, ob sie in einem statischen Import involviert ist.

Es ist nicht perfekt, aber mit einem Moment des Nachdenkens sind diese beiden im Allgemeinen ausreichend, um herauszufinden, was Sie wollen.

0voto

Bhaskar Punkte 169

Verwenden Sie Strg+B oder F4, um zum Quellcode zu springen. Alternativ können Sie Strg+Umschalt+A verwenden, um eine Option/Aktion zu erhalten. Sie können auch Tastenkombinationen unter http://gaerfield.github.io/ide-shortcuts/ finden. Hoffentlich wird es Ihnen helfen.

0voto

Teodor Filipov Punkte 1

Von dem, was ich verstanden habe, möchten Sie den Code sehen, der ein Objekt erstellt, das Sie verwenden, z. B. Mystery someMystery;.
Das gibt Ihnen zwei Möglichkeiten, someMystery zu befüllen:

  1. someMystery = ... wobei ... Ihr Code zum Bevölkern von someMystery ist und wenn das der Fall ist, sollten Sie diesen Code verfolgen (mit Strg+B, so weit Sie müssen) bis zu dem Punkt, an dem es tatsächlich das Mystery-Objekt erstellt.
  2. Verwenden Sie CDI, um diese Objektinstanz für Sie zu befüllen, in diesem Fall sollten Sie sich den CDI-Mechanismus genauer ansehen, um zu sehen, auf welche Weise die Objektinstanz befüllt wird.

So oder so gibt es meiner Meinung nach keine Möglichkeit sicher zu wissen, ob die someMystery-Instanz von einer konkreteren Klasse als Mystery ist, weil dies zur Laufzeit entschieden wird, nicht zur Kompilierzeit. Ihr nächster Schritt wäre also, das Programm im Debug-Modus auszuführen und zu sehen, welches Objekt in someMystery geht, obwohl Sie nicht garantiert sind, jedes Mal dasselbe Typobjekt zu erhalten.

PS. Meine Antwort basiert ausschließlich auf meinem Verständnis des Themas in Java, kann nicht sagen, ob es auch für Scala gültig ist.

0voto

ljleb Punkte 171

Dies ist möglicherweise nicht genau die Antwort, die Sie erhofft haben.

Vielleicht hilft es jedoch, sich selbst zu zitieren:

Wenn Sie eine stark verschachtelte Hierarchie haben, kann das Tracking schwierig sein.

Haben Sie schon einmal darüber nachgedacht, Komposition anstelle von Vererbung zu verwenden? Möglicherweise würde dies die Notwendigkeit für das von Ihnen gesuchte Feature beseitigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X