2014-04-23 15 views
16

W przypadku intellij idea, jak mogę dowiedzieć się, co sprawia, że ​​zmienna jest widoczna?co sprawia, że ​​zmienna jest widoczna (intellij idea)

Przykładem kiedy to trudno:

  • Załóżmy obejrzysz class A i widzisz zmienną something. Jeśli przejdziesz do źródła, zobaczysz, że jest on zdefiniowany w trait X. Ale nie masz bezpośrednio extend cechy X. Co zatem rozszerzasz, co sprawia, że ​​ta zmienna jest widoczna? Jeśli masz głęboko zagnieżdżoną hierarchię, śledzenie może być trudne.

Wszelkie zalecenia lub rozwiązania?

EDIT: stworzył problem w ich systemie śledzenia: http://youtrack.jetbrains.com/issue/IDEA-124369

+1

, więc chodzi o integrację scala, a nie java? –

+0

Dotyczy to również java. Masz opcje, jak ustawić zmienną/typ w pliku. – VasyaNovikov

+0

Używam IDEA codziennie i mam przez długi czas i jeśli ta funkcja jest dostępna, nie jestem tego świadomy. JetBrains bardzo reaguje na prośby o funkcję, więc prawdopodobnie powinieneś o to poprosić. –

Odpowiedz

-2

jeśli chcesz klasy, pola lub metody, aby były widoczne, trzeba wdrożyć je jako publiczne. Jeśli to było twoje pytanie.

+0

Niestety, nie, pytanie dotyczyło wsparcia dla IDE i nawigacji po kodzie. Kod jest więc już napisany i teraz poruszasz się po nim. – VasyaNovikov

0

Znam dwa prawie rozwiązania tego problemu.

Zgłoszenie do zgłoszenia, jak wspomniano, rozwiązuje ten problem w przypadku zmiennych lokalnych.

Mówiąc bardziej ogólnie, funkcja "znajdowanie zastosowań" zapewnia porządny mały podział według typu i pliku różnych zastosowań zmiennej. Z tego widać, czy jest zaangażowany w statyczny import.

To nie jest doskonałe, ale z chwilą zastanowienia te dwie są na ogół wystarczające, aby dowiedzieć się, co chcesz.

+0

Niestety, ani 'find usages' ani' go-to-declaration' nie rozwiązuje w pełni problemu. Podejścia te nadal nie obejmują "podkreślenia" instrukcji importowych, takich jak 'import smth._'. Nie pomagają również w przechodzeniu przez drzewo miksów ... – VasyaNovikov

+0

W takim przypadku przeciwstawiasz się ograniczeniom implementacji IntelliJ. Przepraszam. Wszystko, co możesz zrobić, to użyć "Znajdź w ścieżce" (domyślnie CTRL + SHIFT + F), aby wyszukać ciąg znaków według potrzeb. Przynajmniej IDEA wykonuje takie wyszukiwania * szybko *:/ –

+0

Tak, sposób, w jaki obecnie wykonujemy tego rodzaju pracę, polega na użyciu "Znajdź wszystkie zastosowania" itp. Komentarze przekonały mnie, że nie ma takiej wbudowanej funkcji, więc przynajmniej stworzyłem "żądanie funkcji" na ich stronie .. – VasyaNovikov

0

Użyj kombinacji ctrl + b lub F4, aby przejść do kodu źródłowego. Alternatywnie możesz użyć kombinacji ctrl + shift + a, aby uzyskać opcję/akcję. Możesz również znaleźć skróty na stronie http://gaerfield.github.io/ide-shortcuts/. Mam nadzieję, że to pomoże.

+0

Cześć, przepraszam, nie, pytanie jest inne. Mówiąc z grubsza, chcę przejść do instrukcji import/mixin w bieżącym pliku/widoku, a nie w źródłowym kodzie źródłowym. Bardziej szczegółowy, patrz sam opis pytania. – VasyaNovikov

0

Nie sądzę, że IntelliJ IDEA ma skrót do "znajdowania tego, co czyni zmienną widoczną".

Można go jednak określić za pomocą opcji "Znajdź użycie" (Alt + F7). Na przykład:

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

Więc Znajdź Usages na „Plik”, mówi, że jej z opakowania „File” (w nagłówku nowej karcie to również pokazuje pełną nazwę pakietu, ex: Znajdź zwyczajów java. nio.file w plikach projektu). Podczas gdy Find Usages na func powie Ci, że jest to Metoda (i nagłówek Tab mówi: Znajdź Użycie func() w Projekcie i Bibliotekach)

Teraz możesz określić, co dokładnie powoduje, że zmienna jest widoczna . Działa to również w przypadku importu, ponieważ pokazuje pakiet, z którego jest importowany, i można następnie szukać importu tych pakietów.

+0

IMO, to jest to samo, co przeskakiwanie do źródła ('Ctrl B'). Skaczesz, a potem znasz nazwę pakietu. Nadal nie wiesz, co spowodowało, że ta zmienna była widoczna w twoim kontekście. Na przykład: 'cecha A {def gdzieAmI = 1}; cecha B rozszerza A; class Mystery extends B with Other with Other2 with Other3 {println (whereAmI)} 'Teraz patrząc na źródło' Mystery', nie mogę zrozumieć, skąd pochodzi zmienna. Czy to z 'B'? Lub z "Innego"? A może z obiektu, który wyrósł "A" i zaimportowaliśmy zawartość obiektu? – VasyaNovikov

+0

... W rzeczywistości "Find Usages" zostało już wcześniej zaproponowane. Niestety, nie działa, z powodu opisanych przyczyn. – VasyaNovikov

+0

Tak, masz rację, więc krótka odpowiedź brzmi: nie, nie możesz jej znaleźć w tej chwili. – KarateKid

0

Z tego co zrozumiałem, chcesz zobaczyć kod, który tworzy obiekt, którego używasz, na przykład Mystery someMystery;.
To daje dwie opcje do wypełnienia someMystery:

  1. someMystery = ... gdzie ...to Twój kod do wypełnienia someMystery, a jeśli tak, powinieneś postępować zgodnie z tym kodem (z ctrl + B tak daleko, jak potrzebujesz) do punktu, w którym faktycznie tworzy obiekt Mystery.
  2. Użyj CDI, aby wypełnić tę instancję obiektu, w takim przypadku należy zajrzeć do mechanizmu CDI, aby zobaczyć, w jaki sposób jest wypełniana instancja obiektu.

W obu IMO nie ma sposobu, aby wiedzieć na pewno, jeśli instancja someMystery jest jakiś bardziej konkretny klasy niż Mystery, ponieważ decyduje w czasie wykonywania, a nie w czasie kompilacji, więc następny zakład byłoby uruchom program w debugowaniu i zobacz, jaki obiekt trafi do someMystery, chociaż nie masz gwarancji, że za każdym razem otrzymasz ten sam typ obiektu.

PS. Moja odpowiedź jest całkowicie oparta na moim zrozumieniu tematu w języku Java, nie mogę powiedzieć, czy jest ona ważna również dla scala.

+0

Niezupełnie. Szukam, co sprawia, że ​​zmienna _be visible_ w czasie kompilacji w bieżącym bloku kodu. Przykładem, kiedy trudno jest zrozumieć, jest głęboka hierarchia 'extends'. Wiesz, że w końcu jest to członek 'cechy X'. Ale nie rozszerzasz bezpośrednio 'X'. Skąd zatem pochodzi twój kod? W każdym razie jest to określone w numerze. – VasyaNovikov

+0

P.S. Zmodyfikowałem tekst, aby spróbować go wyraźniej. – VasyaNovikov

Powiązane problemy