IntelliJ etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
IntelliJ etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Ekim 2023 Pazar

IntelliJ Idea Debug İpuçları - Stream

1. Stream'in başladığı yere breakpoint konulur
2. Sol alttaki Flat Mode veya Split Mode ile her stream işlemin nasıl gösterileceğini kontrol ederiz

27 Şubat 2023 Pazartesi

IntelliJ Idea Debug İpuçları - Watch View İçin Customize Data Views - Entry renderers

Watch View içindeki bir değişkene sağ tıklarız ve Customize Data Views seçilir. Şeklen şöyle

Şeklen şöyle

Sağ sekmedeki Java Type Renderers seçilir. Nesneyi açılmamış haliyle gösteren şey When rendering a node altına yazılır. Nesneyi açılmış haliyle gösteren şey When rendering a node altına yazılır


IntelliJ Idea Debug İpuçları - Object Marking

Giriş
Açıklaması şöyle
Marking is effectively the declaration of a new reference to an object. Like declaring a new global variable. 

Developers often track issues where they literally write on a piece of paper the object ID (or pointer value) for an object they're looking at. With object marking, we can give an instance a specific global name. We can then reference that instance out of any scope...

E.g., when you're debugging and want to make sure that the object you're looking at in a method is the one that will be sent to another method (and not a cloned copy). Just mark the object with a name. Then, in the other method, compare the argument to the marked object. 

You can use this in conditional breakpoints to stop at the right location. It's an amazingly useful feature.
Şeklen şöyle

Daha sonra marking ile işaretli olan nesne için bir global değişken tanımlarız. Şeklen şöyle. Burada Label deniliyor ancak aslında global bir değişken ismi.
Eğer istersek bu değişkeni condition olarak kullanabiliriz. Şeklen şöyle. 


 
Örnek
Şöyle yaparız
Thread.currentThread() == MyThread_DebugLabel

26 Şubat 2023 Pazar

IntelliJ Idea Appearance & Behavior Ekranı

Proje Ağacı
Show tree indent guides ve Use smaller indents in tree seçenekleri ile ağaç yardımcı dikey çizgiler ekleniyor ve ağaçtaki nesneler daha küçük çiziliyor

Ayrıca Archive Browser eklentisi ile proje ağacında zip dosyaları da görülebilir.

23 Şubat 2023 Perşembe

IntelliJ Idead Live Template

Giriş
Açıklaması şöyle
IntelliJ IDEA has a feature called “Live Templates” that allows you to quickly insert predefined code snippets using keyboard shortcuts. For example, you can type “sout” and press the Tab key to automatically expand it into a System.out.println() code block. You can customize and create your own live templates in the IntelliJ IDEA configuration.
1. Hazır Gelen Live Template
Giriş
İlk defa burada gördüm

Benim kullandıklarım
main 
main metodu yaratır

prfsi 
private final static int

sout
System.out.println satırını yaratır

psvm
main metodu yaratır

object.var
Değişkene eşitler

object.for
For döngüsü yaratır

Conditional statement'lar
boolean.if -> if(boolean)
boolean.else -> if(!boolean)
string.null -> if(string==null)
string.nn -> if(string!=null)
string.switch -> switch(string)

object.try
try...catch yaratır

object.castvar
Başka bir tipe cast eder

object.field
Yerel değişkeni sınıfın üye alanı yapar

object.opt
Optional.of() ile nesne yaratır

object.lambda
lambda yaratır

2. Custom Template
Settings > Editor > Live Templates ile ulaşılır.  Açıklaması şöyle
As you can see, IntelliJ already has several predefined sections depending on the programming language we are using, but we can also create our own section with the “+” symbol that appears on the right side of the window.
Örnek
Burada bir örnek var

Örnek - Edit variables
Açıklaması şöyle. Edit variables ile Live Template içinde kullanacağımız değişken için kod tanımlarız
In my case I have selected java and clicked on the add button (“+”) to add a new live template to this group, and then a new window will open asking us for the abbreviation of our shortcut, a description if we wish and the part of the code that corresponds to our new shortcut

In this example we have created a Live Template to declare a logger in the class we want and in this way import it by simply typing in our code “log” and pressing the enter key to set it. As you can see, we have indicated the abbreviation with which we will call this shortcut (“log”), a brief description and then in “Edit variables” we have given value to the variable declared in the expression $CLASS_NAME$
Örnek - $END$
Açıklaması şöyle
To create a custom live template, go to Settings > Editor > Live Templates. Click the "+" icon to add a new template. Enter an abbreviation, a description, and the template text, then click "OK".
Şöyle yaparız
public static void main(String[] args) {
    $END$
}
Açıklaması şöyle. İmleç $END$ ile belirtilen yere gelir.
Now, when you type “main” and press Tab, the main method will be inserted, and your cursor will be placed at the $END$ position. 


22 Şubat 2023 Çarşamba

IntelliJ Idea HttpClient İle Debug

Giriş
Açıklaması şöyle
We just create a file inside root folder of the app, type any name we want and add .http extension at the end. HTTP request syntax is pretty simple.
Örnek
Şöyle yaparız
// Add new product to the database
POST http://localhost:8080/api/v1/admin
Content-Type: application/json
Accept: application/json

{
  "brand": "Bombbar",
  "category": "cookie",
  "name": "Protein cookie",
  "flavour": "Chocolate brownie",
  "caloriesPer100Gram": 271,
  "weight": 40
}

###

// Get info about the product from the database
GET http://localhost:8080/api/v1/client?brand=Bombbar
Accept: application/json
Örnek
Şöyle yaparız
POST http://localhost:8080/clients
Content-Type: application/json

{
  "clientId": "my-trusted-ui",
  "clientSecret": "Passw0rd#",
  "scope": "read, write",
  "authorizedGrantTypes": "password,refresh_token",
  "authorities": "USER,BUSINESS",
  "accessTokenValidity": 93601,
  "refreshTokenValidity": 604801,
  "additionalInformation": "none"
}


23 Ocak 2023 Pazartesi

IntelliJ Idea Debug İpuçları - Memory View

Giriş
Memory View penceresini açmak gerekir. Şöyle yaparız

Breakpoint ile durduğumuzda sınıflar yüklü değildir. Load classes tıklanır

Diff Sütunu
İki Break Point veya Step over arasındaki nesne sayısı farkını gösterir. Şeklen şöyle

Eğer bir nesneye çift tıklarsak bu nesnenin kullanıldığı her yeri görebiliriz.

Track New Instances
Array olmayan nesneler için kullanılabilir. Şeklen şöyle. Nesne için etkinse gözlük benzeri bir simge gösterilir

Eğer Track New Instances etkin değilse sağ tıklama menüsü şeklen şöyle.

Eğer etkinse sağ tıklama menüsü şeklen şöyle.

Show New Instances menüsüne tıklarsak şeklen şöyle. Sağ tarafta nesneni yaratılmasına sebep olan stack var.






IntelliJ Idea Debug İpuçları - Thread View

Threads View
Threads View açılır

Customize Threads View
Sağ tıklanır. Şeklen şöyle

Pencere şöyle

Eğer show thread groups seçerse Thread'ler artık grup isimlerine göre listelenirler. Şeklen şöyle


Thread Durumları
Monitor ise thread bir senkronizasyon nesnesi üzerinde bekliyordur. Şeklen şöyle

Async Stack Trace
Şeklen şöyle. ExecutorService.submit() gibi çağrıların nereden yapıldığını gösterir.





4 Kasım 2022 Cuma

IntelliJ Idea Sequence Diagram

Giriş
SequenceDiagram eklentisi kurulur. Sınıfın bir metodu üzerine gelinir ve Alt + S kullanılır.  Veya metod üzerine sağ tıklayıp "Sequence Diagram" menüsü seçilir

31 Ekim 2022 Pazartesi

IntelliJ Idea - Editor Kısayolları

Edit/Find/Select All Occurrences
Multiple selections içindir. Windows'ta Ctrl + Alt + Shift + J
Bir açıklama burada

25 Ekim 2022 Salı

IntelliJ Idea Syntax Highlighting

Giriş
İlk defa burada gördüm. Settings > Editor > Color Scheme > Java menüsüne gittim

Renkli Comment
Açıklaması şöyle
Here is how you do it, Preferences -> Editor -> Color Scheme -> Java -> Comments -> (Block Comment + Line Comment) -> Foreground color (#FFB206).

Rainbow Brackets
Bir örnek burada

Custom Renklendirme
Dark Theme kullanıyordum. Metod'lar renklendirmedim, ama sınıfları renklendirmek büyük projelerde çok faydalı

Interface ve Abstract Sınıflar
Abstract class ve interface'leri şöyle yaptım. Interface'ler açık mavi oldu. Abstract sınıflar kestane rengi oldu ve altı gök mavi olarak çizildi
<scheme name="Orcun Darcula" version="142" parent_scheme="Darcula">
  <metaInfo>
    <property name="created">2022-10-25T10:28:42</property>
    <property name="ide">Idea</property>
    <property name="ideVersion">2022.2.0.0</property>
    <property name="modified">2022-10-25T10:28:47</property>
    <property name="originalScheme">Orcun Darcula</property>
  </metaInfo>
  <attributes>
    <option name="ABSTRACT_CLASS_NAME_ATTRIBUTES">
      <value>
        <option name="FOREGROUND" value="aa0000" />
        <option name="EFFECT_COLOR" value="aaaa" />
        <option name="EFFECT_TYPE" value="1" />
      </value>
    </option>
    <option name="INTERFACE_NAME_ATTRIBUTES">
      <value>
        <option name="FOREGROUND" value="8080" />
      </value>
    </option>
  </attributes>
</scheme>

9 Ekim 2022 Pazar

IntelliJ Idea Debug İpuçları

Giriş
IntelliJ ile debug için Shai Almog tarafından gösterilen bazı açıklamalar burada. En önemli maddeler şöyle
Show method return values -> Debug işlemini yavaşlatır
IntelliJ Jump to Line -> Plugin gerektirir
Object Marking
Return Immediately
Drop Frame

1. Breakpoint İpuçları

2. Stream Debug


3. Debug Penceresi
Şeklen şöyle

Açıklaması şöyle
1. Show execution point
Başka bir frame'e gitsek bile, bu düğmeye tıklayınca breakpoint olan frame'e gider
2. Step over
Metodu atlar
3. Step in
Metodun içine girer
4. Force Step in
Açıklaması şöyle. Yani 2. madde durumunda kod bize ait değilse bile mümkünse kodu bulmaya çalışıyor, bulamazsa da kod üretip gösteriyor.
Q : Difference between "Step Into" and "Force Step Into" in the Intellij debugger?
A : From my own observation using the IntelliJ debugger over the years, if you try to step into a method call on a given line of code, the following will happen:

1. if the code being called be your own code, then the debugger will step into that method
2.  if the code being called be some third party library, then the debugger will ignore your request, and instead step over that line

By telling IntelliJ to force step into a line, in the case of a third party method, it will then try to find source code for that method. If it can't find source code, then it might show you an auto generated stub based on the byte code/library. But, there may not be any code shown, or if there is, it would be IntelliJ's best guess based on byte code.
5. Step out
Metoddan çıkar
6. Run to cursor
İmlecin olduğu yere kadar çalıştırır

7. Reset Frame veya Drop Frame
Bir metodun içindeysek ondan çıkar ve çağrıyı yapan yere gider. Yeni hali şeklen şöyle. Yeni ismi Reset Frame oldu. U dönüşü gibi olan sembol

Eski hali şeklen şöyle. Şekilde partitionLabels'da breakpoint var ve kod orada durmuş. Onu çağıran yere yani main'e gitmek için Drop Frame düğmesine tıklanır



Debug Oluğu (Gutter)
Burada şu düğmelervar
1. Resume program
2. View Breakpoints
3. Mute Breakpoints

Debug Oluğu (Gutter)

Remote JVM Debug
Docker üzerinde koşan uygulamayı debug için kullanılabilir
Shai Almog tarafından yazılan Remote Debugging and Developer Observability yazısı da önemli
Şeklen şöyle. Uygulama remote debug için hangi parametreler ile başlatıldıysa aynı parametrelerle ona bağlanıyor










12 Eylül 2022 Pazartesi

IntelliJ Idea Profiling

Giriş
Açıklaması şöyle
Sometimes, unfortunately, a breakpoint is not enough and you need to use some more serious tools. Mostly those are tools used to detect memory leaks and high CPU usage. The Profiler in IntelliJ provides a lot of the functionalities that previously we needed external tools for.

You can open the Profiler pane through the View Menu|Tool Windows|Profiler or it might already be visible somewhere in the left|bottom|right corners. If there is a Java process running it will appear there.

The interesting bits are hidden in the context menu.
Profiler ile
1. CPU and Memory Live Charts
2. Capture Memory Snapshot
3. Get Thread Dump

işlemleri yapılabilir

Ayarlar
Açıklaması şöyle
IntelliJ IDEA 2022.3 comes with some important profile improvements. You can exclude native calls:
Şeklen şöyle


CPU and Memory Live Charts
Ulaşmak için menü şöyle

Karşımıza çıkan şey için açıklama şöyle
This will show you a timeline graph of the memory and CPU usage of the app while it’s running.

It can be very useful if you want to gauge where the app is at in terms of resource usage or detect any abnormal spikes or drops in either of those.
Şeklen şöyle

Capture Memory Snapshot
Şeklen şöyle










IntelliJ Idea Breakpoint İpuçları

Giriş
IntelliJ ile debug için Shai Almog tarafından gösterilen bazı açıklamalar burada. Bazıları farklı şeyler söylese de bence temelde 3 çeşit breakpoint var
1. Line Breakpoint
2. Field Watchpoint veya Debug Field
3. Exception Breakpoint

1. Line Breakpoint
Seçenekler şöyle
Suspend
Şeklen şöyle. Eğer bu seçenek seçili değilse, Breakpoint'e gelince thread durmaz.

Conditional Breakpoints
Condition koymak istersek şöylen şöyle

Object Marking ile işaretli bir nesneye erişileceği gibi, genel koşullar da yazılabilir. Şeklen şöyle.

Suspending single thread only
Açıklaması şöyle
By default, in the pop up you’ll see the All radio button selected. However, if you choose the Thread one, you can suspend only the thread executing the line of code where the breakpoint is.

This is usually useful when you have threads, which, if suspended, might throw exceptions and die, like threads consuming from Kafka or querying a database with a timeout. Having only one thread stop might help you keep the app running and healthy while you examine the bit of code that might be problematic.
Şeklen şöyle. Sadece bu breakpoint'e gelen thread durdurulur. Diğer thread'ler çalışmaya devam eder.


Print debug statements
Açıklaması şöyle
In the default pop up, by default the Suspend checkbox is selected. If you deselect it, the window will expand revealing a whole lot more options. One of those is Evaluate and log which means that every time the debugger would normally suspend (no matter if it’s a normal breakpoint, with a condition, suspending one or all threads) it will print whatever the statement in that textbox evaluates to instead. It can either be a string literal or anything using the variables in the scope.
Çoklu thread kullanan uygulamalarda, "Suspend" kaldırılır ve "Evaluate and log" ile thread'in log basması sağlanabilir. Şeklen şöyle.


Şeklen şöyle

Eğer breakpoint tam metod ismine konulmuşsa, More yazısına tıklarsak Method entry veya Method exit seçimi yapabiliriz. Şeklen şöyle. Burada Suspend kaldırılmış ve Method exit seçili
Eğer istersek Condition yazılabilir.  Şeklen şöyle. 



2. Field Watchpoint veya Debug Field
Açıklaması şöyle
This isn’t a breakpoint since the execution never stops at the field. It stops in the line of code that accesses the field. You can optionally toggle this so it will stop only for write, only for read or in both cases.
Örnek
Şeklen şöyle. Burada üye alanı değiştiren yerde kod duracak


3. Exception Breakpoint
Açıklaması şöyle
The default IDE behavior of stopping on every exception is redundant and infuriating!
Açıklaması şöyle
Sometimes, though, you cannot pinpoint the exact line causing the problem. For example in multithreaded applications exceptions are being swallowed and appear as side effects somewhere else or you are not sure where the exception is thrown from due to lack of proper logging or you just need to approach the problem more generally. In those cases, you can add a breakpoint exception.

If you hit Ctrl + Shift + F8 | Cmd + Shift +F8 you’ll see this window listing all currently added breakpoints.
Örnek
Şeklen şöyle. Burada "Class filters" ile fırlatıldığı yer seçilebilir. Ayrıca "Catch Class Filters" ve "Instance Filters" önemli. 

Örnek
Şeklen şöyle. Burada IllegalArgumentException nereden fırlatılırsa kod orada duracak


Diğer Breakpoint Özellikleri
1. Grouping/Naming
Breakpoint'lere "Edit Description" ile açıklama verilebilir. Ayrıca breakpoint'ler gruplanabilir.

2. Tracepoints
Açıklaması şöyle
We can use a breakpoint as an ad hoc log that doesn’t suspend execution. You can just add printouts which can include expressions, etc. 

20 Temmuz 2022 Çarşamba

IntelliJ Idea Java Compiler Ekranı

Giriş
Bu ekranın yolu şöyle
Preferences -> Build, Execution, Deployment -> Compiler -> Java Compiler
--enable-preview Hatası Alıyorsak
"Use --release’" seçeneği kapatılır ve "Additional command line parameters" altına "--enable ..." seçeneği eklenir. Şeklen şöyle. Bu sadece derlemek içindir. Çalıştırmak için halen "Run/Debug Configurations" altında başka seçenekleri vermek lazım

Per-module bytecode version
Eğer bazı modüller projeden farklı bytecode üretecekse bu ekranda gösterilir. Şeklen şöyle. Burada "project bytecode version" Java 8 ama bazı modüller "Java 17" kullanıyor






6 Ocak 2022 Perşembe

IntelliJ Idea Run Menüsü

Run | Open Profiler Snapshot | Open
Bu menu altında hprof dosyaları incelenebilir.

13 Eylül 2021 Pazartesi

Intellij Idea ve Gradle

Intellij Idea ve Gradle
Gradle, Türkçe Locale ile çalışmayabiliyor. Hata da jacoco ile ortaya çıkıyor. Hata şöyle
java.lang.IllegalArgumentException: No enum constant org.jacoco.agent.rt.internal_c13123e.core.runtime.AgentOptions.OutputMode.fıle
O yüzden Intellij'i İngilizce locale ile başlatmak gerekebiliyor. Şöyle yaparız
Help"->"Edit Custom VM Options" açılır ve en alta
-Duser.language=en
satırı eklenir. Gradle şöyle kullanılır
.\gradlew -Duser.language=en build

Proje Yapısı
Proje Yapısı yazısına taşıdım

IntelliJ Terminal
Terminal aslında bir Power Shell terminali. Terminali iki şekilde kullanabiliriz.

1. gradle komutunu yazar ve Ctrl + Enter ile IntelliJ tarafından çalıştırılmasını isteyebiliriz.

2. Power Shell tarafından çalıştırılmasını isteyebiliriz.  gradlew.bat dosyasını çalıştırmak için Power Shell 
.\gradlew ...
şeklinde kullanmamızı istiyor. Ben en çok şunu kullanıyorum
.\gradlew build -x test
Gradle şöyle kullanılır
.\gradlew -Duser.language=en build
build.gradle Dosyası
Kullanılacak plugin'ler ve dependencies bu dosyaya yazılır

allprojects Block
Örnek
Şöyle yaparız
allprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
  }
}

buildScript Block
Build işlemi için gereken ayarları içerir. Açıklaması şöyle
The “buildscript” block only controls dependencies for the buildscript process itself, not for the application code, which the top-level “dependencies” block controls.
Örnek
Şöyle yaparız
buildscript {
  repositories {
    google()
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.1.1'
  }
}
Açıklaması şöyle
But what does that block do? Basically it defines dependencies which are required for the build itself. Or in other words: It defines dependencies which are required to build your Application (whatever your “Application” is (Android App, Gradle Plugin, Swift Desktop Application…)).

In our Android example we have to define the Android Gradle Plugin dependency which helps us to build an APK:
plugins Block
Açıklaması şöyle
The “new” plugins block is not really new. It was already introduced in Gradle 2.1.
But there are some “limitations”. By default the plugin block can only resolve plugins which are either:
- Core Plugins (provides by Gradle themself). These are e.g.: org.gradle.java, org.gradle.groovy, org.gradle.java-gradle-plugin and so on…
- Published to the Gradle Plugin Portal.
war plugin yazısına bakabilirsiniz
spring-boot-gradle-plugin yazısına bakabilirsiniz

Örnek
ear çıktısı için şöyle yaparız
plugins {
id 'ear' }
Örnek
SpringBoot için şöyle yaparız
plugins {
id 'org.springframework.boot' version '2.1.2.RELEASE' }
repositories Block
Örnek ver

dependencies Block
Dependency tipleri şunlar olabilir
compile
compileOnly
implementation
testImplementation
testRuntimeOnly

compileOnly
Örnek - lombok
Şöyle yaparız
configurations {
  compileOnly {
    extendsFrom annotationProcessor
  }
}

repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  implementation 'org.springframework.boot:spring-boot-starter-data-rest'
  implementation 'org.springframework.boot:spring-boot-starter-web'
  compileOnly 'org.projectlombok:lombok'
  runtimeOnly 'com.h2database:h2'
  annotationProcessor 'org.projectlombok:lombok'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Custom Task Block
Örnek
Şöyle yaparız
task hello {
    doLast {
        println 'Hello Baeldung!'
    }
}
Örnek - Zip
Şöyle yaparız. build->distributions altında bir foo.zip dosyası yaratır
// Task for building the zip file for upload
task buildZip(type: Zip) {
  // set the base name of the zip file
  from compileJava
  from processResources
  into('lib') {
    from configurations.runtimeClasspath
  }
}
build.dependsOn buildZip
Custom Gradle File Block
apply from ile kendi dosyamız da dahil edilebilir.
Örnek
Şöyle yaparız
apply from: "$rootDir/gradle/utils.gradle"
settings.gradle Dosyası
settings.gradle Dosyası yazısına taşıdım

gradle/wrapper/gradle-wrapper.properties Dosyası
Bu dosyada kullanılacak gradle sürümü belirtilir. Kullanılan gradle sürümü ".gradle" dizini altında görülebilir. Kullanılmayan sürüm silinebilir.

Tasks
Eklenen plugin'ler task tanımlarlar 

application
build
build setup
distribution
documentation
help
other
verification

Intellij Build And Run
Intellij "Build and Run Using" ve     "Run tests Using" işlemleri için normalde altta gradle kullanır.







29 Temmuz 2021 Perşembe

IntelliJ Idea - Analyze Menüsü

Giriş
Bu menü Project penceresinde bir dizine sağ tıklayınca çıkıyor veya tepedeki Run/Analyze menüsü ile de erişilebilir.

Unused declaration
Dead code bulmak için kullanılabilir. "Analyze/Run Inspection by Name" seçilir. Ctrl + Alt+ Shift + I kısa yoldur. İsim olarak "Unused declaration" yazılır.

Stack Trace
Stack trace çıktısını formatlı olarak görmek için şöyle yaparız
Analyze -> Stack Trace -> Paste the copied logs -> Hit OK

IntelliJ Idea - Navigation Menüsü

Arayüzden sınıfa gitmek için Ctrl + Alt + Sol Fare düğmesine basılır. Açılan penceredeki liste arayüzden kalıtan sınıflardır.

Back - Go to last/previous cursor position
Bir önceki imleç pozisyonuna gitmek için Ctrl + ALT + Sol Ok kullanılır

Class Structure
Sınıfın yapısını görmek için Ctrl + F12 ile popup açılır.

Jump Directly To The Test File Or Create a New Test
Sınıf için yazılan Test'e Ctrl+Shift+T ile gidilir

Metodun nereden çağrıldığının Görmek
3 tane yöntem var
1. Go to Declaration
Metodun nereden çağrıldığının popup olarak görmek için Ctrl + B kullanılır
2.  Call Hierarchy
Metodun nereden çağrıldığının hiyerarşisini  ayrı bir pencerede Ctrl + Alt + H ile görmek mümkün.
3. Find Usages
Metodun nerede kullanıldığını ayrı bir pencerede Alt+ F7 ile görmek mümkün.

Go to Implementation
Metodumuzu override eden yerlere gitmek için CTRL + ALT + B kullanılır

Matching Brace
Ctrl + Shift + M ile görmek mümkün.

Type Hierarchy
Sınıfın kalıtım hiyerarşisini Ctrl + H ile görmek mümkün.