Reference kinds
The total number of Java references kinds is 34×2=68. Table 2 lists the OpenUnderstand Java reference kinds, the kind names, and the kind examples for use with the Python API.
Table 2. Java references kinds details
| Reference kind full name | Description | Example code snippet |
|---|---|---|
| Java Call/Callby | Indicates an invocation of a method. | Call and Callby |
| Java Call/Callby Nondynamic | Indicates a non-dynamic invocation of a method. | Java Call Nondynamic and Callby Nondynamic |
| Java Cast/Castby | Indicates a type is used to cast an instance to a different type. | Java Cast and Castby |
| Java Contain/Containin | Indicates a class is in a package. | Java Contain and Containin |
| Java Couple/Coupleby | Indicates a coupling link as counted in the OO coupling metrics. A link is created from a class to any external class (a class that is not in the extends/implements hierarchy) that is referenced. | Java Couple and Coupleby |
| Java Extend Couple/Coupleby Java Extend Couple/Coupleby External Java Extend Couple/Coupleby Implicit Java Extend Couple/Coupleby Implicit External | Indicates one class or interface extends another. This extends relation is used when the extended class is in a file that is part of the project. If the extended class was found in a classpath .jar file, the relation is Java Extend Couple External. If the Indicates class implicitly extends the java.lang.Object class, the relation is Java Extend Couple Implicit. | Java Extend Couple and Extendby Coupleby |
| Java Implement Couple/Coupleby | Indicates a class implements an interface. | Java Implement Couple and Implementby Coupleby |
| Java Create/Createby | Indicates that an instance of a class is created (“new” operator) in a scope. | Java Create and Createby |
| Java Declare/Declarein | Indicates that a package is declared in a file or in a (parent) package. | Java Declare and Declarein |
| Java Define/Definein | Indicates that an entity is defined in a scope. | Java Define and Definein |
| Java Define/Definein Implicit | Todo: | Java Define and Definein Implicit |
| Java DotRef/DotRefby | Indicates that an entity name was used to the left of a “.” in a qualified name. | Java DotRef and DotRefby |
| Java Export/Exportby | Todo: | Java Export and Exportby |
| Java Import/Importby Java Import/Importby Demand | Java Import indicates a file imports an individual class. For example, the some_file.java file might contain: import pack1.some_class; Java Import Demand indicates a file has an on-demand import statement for a package or class. For example, the some_file.java file might contain: import pack1.*; | Java Import and Importby |
| Java Modify/Modifyby | Indicates that a variable’s value is modified or both read and set, as with the increment (++), decrement (--), and assignment/operator combinations (*=, /=, ...). | Java Modify and Modifyby |
| Java ModuleUse/ModuleUseby | Todo: | Java ModuleUse and ModuleUseby |
| Java Override/Overrideby | Indicates that a method overrides a method from a parent class. | Java Override and Overrideby |
| Java Provide/Provideby | Todo: | Java Provide and Provideby |
| Java Require/Requireby | Todo: | Java Require and Requireby |
| Java Set/Setby | Java Set indicates that a variable is set by a separate statement. | Java Set and Setby |
| Java Set/Setby Init | Java Set Init indicates that a variable is initialized in its declaration. | Java Set Init and Setby Init |
| Java Set/Setby Partial | Todo: | Java Set Partial and Setby Partial |
| Java Typed/Typedby | Indicates the type of a variable or parameter. | Java Typed and Typedby |
| Java Use/Useby | Indicates that a variable is used or read. | Java Use and Useby |
| Java Use/Useby Partial | Todo: | Java Use Partial and Useby Partial |
| Java Use/Useby Ptr | Todo: | Java Use Ptr and Useby Ptr |
| Java Use/Useby Return | Todo: | Java Use Return and Useby Return |
| Java Open/Openby | Todo: | Java Open and Openby |
| Java Throw/Throwby | Indicates that a method throws an exception. | Java Throw and Throwby |
| Java End | Indicates the end of a class, interface, or method. | Java End and Endby |
Reference kind examples
This section describes the example in Table 2 with more details.
Call and Callby
Indicates an invocation of a method.
class class1 {
void meth1() {
...
}
}
class class2 {
class1 some_obj;
void meth2() {
some_obj.meth1();
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Call | meth2 |
meth1 |
| Java Callby | meth1 |
meth2 |
Java Call Nondynamic and Callby Nondynamic
Indicates a non-dynamic invocation of a method.
class class1 {
void meth1() {
...
}
}
class class2 extends class1 {
class1 some_obj;
void meth1() {
super.meth1();
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Call Nondynamic | class2.meth1 |
class1.meth1 |
| Java Callby Nondynamic | class1.meth1 |
class2.meth1 |
Java Cast and Castby
Indicates a type is used to cast an instance to a different type.
class c1 {
...
}
class c2 extends c1 {
...
}
class c3 {
c2 b = new c2();
c1 a = (c1) b;
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Cast | c3 |
c1 |
| Java Castby | c1 |
c3 |
Java Contain and Containin
Indicates a class is in a package.
package some_pack;
class some_class {
...
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Contain | some_pack |
some_class |
| Java Containin | some_class |
some_pack |
Java Couple and Coupleby
Indicates a coupling link as counted in the OO coupling metrics. A link is created from a class to any external class (a class that is not in the extends/implements hierarchy) that is referenced.
public class c1 {
...
}
public class c2 {
cl obj;
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Couple | c2 |
c1 |
| Java Coupleby | c1 |
c2 |
Java Extend Couple and Extendby Coupleby
Indicates one class or interface extends another. This extends relation is used when the extended class is in a file that is part of the project. If the extended class was found in a classpath .jar file, the relation is Java Extend Couple External. If the Indicates class implicitly extends the java.lang.Object class, the relation is Java Extend Couple Implicit.
- [ ] Todo: add a short definition with and an example code and corresponding table for Java Extend Couple Implicit External and Java Extendby Coupleby Implicit External reference kind.
// Example 1:
class class1 {
...
}
class class2 extends class1 {
...
}
// Example 2:
class some_class extends java.io.Writer {
...
}
// Example 3:
class some_class {
...
}
// Example 4:
//Todo
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Extend Couple | Ex 1: class2 |
Ex 1: class2 |
| Java Extendby Coupleby | Ex 1: class1 |
Ex 1: class1 |
| Java Extend Couple External | Ex 2: some_class |
Ex 2: java.io.Writer |
| Java Extendby Coupleby External | Ex 2: java.io.Writer |
Ex 2: some_class |
| Java Extend Couple Implicit | Ex 3: some_class |
Ex 3: java.lang.Object |
| Java Extendby Coupleby Implicit | Ex 3: java.lang.Object |
Ex 3: some_class |
| Java Extend Couple Implicit External | Todo | Todo |
| Java Extendby Coupleby Implicit External | Todo | Todo |
Java Implement Couple and Implementby Coupleby
Indicates a class implements an interface.
interface some_interface {
...
}
class some_class implements some_interface {
...
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Implement Couple | some_class |
some_interface |
| Java Implementby Coupleby | some_interface |
some_class |
Java Create and Createby
Indicates that an instance of a class is created (new operator) in a scope.
class c1 {
...
}
class c2 {
c1 a = new c1();
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Create | c2 |
c1 |
| Java Createby | c1 |
c2 |
Java Declare and Declarein
Indicates that a package is declared in a file or in a (parent) package.

package technology.tabula.debug;
import java.awt.BasicStroke;
import java.awt.Color;
class Debug {
...
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Declare | Debug.java |
technology, technology.tabula.debug |
| Java Declarein | technology, technology.tabula.debug |
Debug.java |
Java Define and Definein
Indicates that an entity is defined in a scope.
//Example Define
class some_class {
int some_var = 5;
}
//Example Define implicit
//Todo
- [ ] Todo: add a short definition with and an example code and corresponding table for Define Implicit and Definein Implicit reference kind.
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Define | some_class |
some_var |
| Java Definein | some_var |
some_class |
| Java Define Implicit | Todo: | Todo: |
| Java Definein Implicit | Todo: | Todo: |
Java DotRef and DotRefby
Indicates that an entity name was used to the left of a “.” in a qualified name.
package some_pack;
class class1 {
static int covid;
}
class class2 {
void some_meth() {
some_pack.class1.covid = 2021;
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java DotRef | some_meth |
some_pack |
| Java DotRefby | some_pack |
some_meth |
Java Export and Exportby
- [ ] Todo: add a short definition with and an example code and corresponding table for this reference kind.
Java Import and Importby
Java Import indicates a file imports an individual class. For example, the some_file.java file might contain:
import pack1.some_class;
Java Import Demand indicates a file has an on-demand import statement for a package or class. For example, the some_file.java file might contain:
import pack1.*;
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Import | some_file |
pack1.some_class |
| Java Importby | pack1.some_class |
some_file |
| Java Import Demand | some_file |
pack1 |
| Java Importby Demand | pack1 |
some_file |
Java Modify and Modifyby
Indicates that a variable’s value is modified or both read and set, as with the increment (++), decrement (--), and assignment/operator combinations (*=, /=, ...).
class some_class {
void some_meth() {
int i = 5;
i++;
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Modify | some_meth |
i |
| Java Modifyby | i |
some_meth |
Modify (Deref) Partial and Modifyby (Deref) Partial
This reference is like Modify and Modifyby.
But, it is used when an entity modifies some elements of a variable of collection type.
public ProjectionProfile{
this.verticalProjection = new float[toFixed(areaHeight)];
this.horizontalProjection = new float[toFixed(areaWidth)];
private void addRectangle(Rectangle element) {
// calculate horizontal and vertical projection profiles
if (!area.contains(element)) {
return;
}
this.minCharHeight = (float) Math.min(this.minCharHeight, element.getHeight());
this.minCharWidth = (float) Math.min(this.minCharWidth, element.getWidth());
for (int k = toFixed(element.getLeft()); k < toFixed(element.getRight()); k++) {
this.horizontalProjection[k - toFixed(areaLeft)] += element.getHeight();
this.maxHorizontalProjection = Math.max(this.maxHorizontalProjection, this.horizontalProjection[k - toFixed(areaLeft)]);
}
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Modify Partial | addRectangle |
horizontalProjection |
| Java Modifyby Partial | horizontalProjection |
addRectangle |
Java ModuleUse and ModuleUseby
- [ ] Todo: add a short definition with and an example code and corresponding table for this reference kind.
Java Override and Overrideby
Indicates that a method overrides a method from a parent class.
class A {
int some_meth() {
...
}
}
class B extends A{
int some_meth() {
...
}
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Override | B.some_meth |
A.some_meth |
| Java Overrideby | A.some_meth |
B.some_meth |
Java Provide and Provideby
- [ ] Todo: add a short definition with and an example code and corresponding table for this reference kind.
Java Require and Requireby
- [ ] Todo: add a short definition with and an example code and corresponding table for this reference kind.
Java Set and Setby
Java Set indicates that a variable is set by a separate statement.
void some_meth() {
int i;
i = 5;
}
Java Set Init indicates that a variable is initialized in its declaration.
void some_meth() {
int i = 5;
}
- [ ] Todo: add a short definition with and an example code and corresponding table for Set Partial and Setby Partial reference kinds.
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Set | some_meth |
i |
| Java Setby | i |
some_meth |
| Java Set Init | some_meth |
i |
| Java Setby Init | i |
some_meth |
| Set Partial | Todo: | Todo: |
| Setby Partial | Todo: | Todo: |
Java Typed and Typedby
Indicates the type of a variable or parameter.
class class1 {
...
}
class class2 {
class1 some_obj;
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Typed | some_obj |
class1 |
| Java Typedby | class1 |
some_obj |
Java Use and Useby
Indicates that a variable is used or read.
class some_class {
int some_var;
void some_meth() {
int local_var = some_var; // read of some_var
}
}
- [ ] Todo: add a short definition with and an example code and corresponding table for Use Partial and Useby Partial reference kinds.
- [ ] Todo: add a short definition with and an example code and corresponding table for Use Ptr and Useby Ptr reference kinds.
- [ ] Todo: add a short definition with and an example code and corresponding table for Use Return and Useby Return reference kinds.
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Use | some_meth |
some_var |
| Java Useby | some_var |
some_meth |
| Java Use Partial | Todo: | Todo: |
| Java Useby Partial | Todo: | Todo: |
| Java Use Ptr | Todo: | Todo: |
| Java Useby Partial | Todo: | Todo: |
| Java Use Return | Todo: | Todo: |
| Java Useby Return | Todo: | Todo: |
Java Open and Openby
- [ ] Todo: add a short definition with and an example code and corresponding table for this reference kind.
Java Throw and Throwby
Indicates that a method throws an exception.
void some_meth() throws java.io.IOException {
...
}
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java Throw | some_meth |
java_io.IOException |
| Java Throwby | java_io.IOException |
some_meth |
Java End and Endby
Indicates the end of a class, interface, or method.
- [ ] Todo: Requires a better example (I cannot understand this kind in understand!)
| Reference kind string | Entity performing references | Entity being referenced |
|---|---|---|
| Java End | some_class |
some_class |
| Java Endby | some_class |
some_class |
References
[1] SciTools, “Understand,” 2020. https://www.scitools.com/ (accessed Sep. 11, 2020).