Kotlin: Add class modifiers

This commit is contained in:
Ian Lynagh
2021-12-09 15:25:42 +00:00
parent 08bb134022
commit 5342b13cb6
8 changed files with 120 additions and 26 deletions

View File

@@ -42,6 +42,9 @@ abstract class Modifiable extends Element {
/** Holds if this element has a `final` modifier or is implicitly final. */
predicate isFinal() { this.hasModifier("final") }
/** Holds if this element has a `sealed` modifier. */
predicate isSealed() { this.hasModifier("sealed") }
/** Holds if this element has a `public` modifier or is implicitly public. */
predicate isPublic() { this.hasModifier("public") }
@@ -51,6 +54,9 @@ abstract class Modifiable extends Element {
/** Holds if this element has a `private` modifier or is implicitly private. */
predicate isPrivate() { this.hasModifier("private") }
/** Holds if this element has an `internal` modifier. */
predicate isInternal() { this.hasModifier("internal") }
/** Holds if this element has a `volatile` modifier. */
predicate isVolatile() { this.hasModifier("volatile") }

View File

@@ -1,22 +1,34 @@
| classes.kt:0:0:0:0 | ClassesKt | ClassesKt |
| classes.kt:2:1:2:18 | ClassOne | ClassOne |
| classes.kt:4:1:6:1 | ClassTwo | ClassTwo |
| classes.kt:8:1:10:1 | ClassThree | ClassThree |
| classes.kt:12:1:15:1 | ClassFour | ClassFour |
| classes.kt:17:1:18:1 | ClassFive | ClassFive |
| classes.kt:28:1:30:1 | ClassSix | ClassSix |
| classes.kt:34:1:47:1 | ClassSeven | ClassSeven |
| classes.kt:49:1:51:1 | Direction | Direction |
| classes.kt:53:1:57:1 | Color | Color |
| classes.kt:63:1:91:1 | Class1 | Class1 |
| classes.kt:66:20:66:54 | new Object(...) { ... } | <anonymous class> |
| classes.kt:68:20:68:74 | new Object(...) { ... } | <anonymous class> |
| classes.kt:72:16:77:10 | new Object(...) { ... } | <anonymous class> |
| classes.kt:75:24:75:33 | new Object(...) { ... } | <anonymous class> |
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | <anonymous class> |
| classes.kt:85:16:85:25 | new Object(...) { ... } | <anonymous class> |
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | <anonymous class> |
| superChain.kt:0:0:0:0 | SuperChainKt | SuperChainKt |
| superChain.kt:1:1:1:33 | SuperChain1 | SuperChain1 |
| superChain.kt:2:1:2:60 | SuperChain2 | SuperChain2 |
| superChain.kt:3:1:3:60 | SuperChain3 | SuperChain3 |
| classes.kt:0:0:0:0 | ClassesKt | ClassesKt | |
| classes.kt:2:1:2:18 | ClassOne | ClassOne | final, public |
| classes.kt:4:1:6:1 | ClassTwo | ClassTwo | final, public |
| classes.kt:8:1:10:1 | ClassThree | ClassThree | abstract, public |
| classes.kt:12:1:15:1 | ClassFour | ClassFour | public |
| classes.kt:17:1:18:1 | ClassFive | ClassFive | final, public |
| classes.kt:28:1:30:1 | ClassSix | ClassSix | final, public |
| classes.kt:34:1:47:1 | ClassSeven | ClassSeven | final, public |
| classes.kt:49:1:51:1 | Direction | Direction | final, public |
| classes.kt:53:1:57:1 | Color | Color | final, public |
| classes.kt:63:1:91:1 | Class1 | Class1 | final, public |
| classes.kt:66:20:66:54 | new Object(...) { ... } | <anonymous class> | final |
| classes.kt:68:20:68:74 | new Object(...) { ... } | <anonymous class> | final |
| classes.kt:72:16:77:10 | new Object(...) { ... } | <anonymous class> | final |
| classes.kt:75:24:75:33 | new Object(...) { ... } | <anonymous class> | final |
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | <anonymous class> | final |
| classes.kt:85:16:85:25 | new Object(...) { ... } | <anonymous class> | final |
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | <anonymous class> | final |
| classes.kt:93:1:93:26 | pulicClass | pulicClass | final, public |
| classes.kt:94:1:94:29 | privateClass | privateClass | final, private |
| classes.kt:95:1:95:31 | internalClass | internalClass | final, internal |
| classes.kt:96:1:96:34 | noExplicitVisibilityClass | noExplicitVisibilityClass | final, public |
| classes.kt:98:1:104:1 | nestedClassVisibilities | nestedClassVisibilities | final, public |
| classes.kt:99:5:99:36 | pulicNestedClass | nestedClassVisibilities$pulicNestedClass | final, public |
| classes.kt:100:5:100:43 | protectedNestedClass | nestedClassVisibilities$protectedNestedClass | final, protected |
| classes.kt:101:5:101:39 | privateNestedClass | nestedClassVisibilities$privateNestedClass | final, private |
| classes.kt:102:5:102:41 | internalNestedClass | nestedClassVisibilities$internalNestedClass | final, internal |
| classes.kt:103:5:103:44 | noExplicitVisibilityNestedClass | nestedClassVisibilities$noExplicitVisibilityNestedClass | final, public |
| classes.kt:106:1:106:27 | sealedClass | sealedClass | public, sealed |
| classes.kt:107:1:107:23 | openClass | openClass | public |
| superChain.kt:0:0:0:0 | SuperChainKt | SuperChainKt | |
| superChain.kt:1:1:1:33 | SuperChain1 | SuperChain1 | public |
| superChain.kt:2:1:2:60 | SuperChain2 | SuperChain2 | public |
| superChain.kt:3:1:3:60 | SuperChain3 | SuperChain3 | public |

View File

@@ -88,4 +88,21 @@ class Class1 {
private fun getObject5() : Any {
return object : Interface3<Int?> { }
}
}
}
public class pulicClass {}
private class privateClass {}
internal class internalClass {}
class noExplicitVisibilityClass {}
class nestedClassVisibilities {
public class pulicNestedClass {}
protected class protectedNestedClass {}
private class privateNestedClass {}
internal class internalNestedClass {}
class noExplicitVisibilityNestedClass {}
}
sealed class sealedClass {}
open class openClass {}

View File

@@ -2,5 +2,5 @@ import java
from Class c
where c.fromSource()
select c, c.getQualifiedName()
select c, c.getQualifiedName(), concat(string s | c.hasModifier(s) | s, ", ")

View File

@@ -16,6 +16,18 @@ superCall
| classes.kt:81:16:81:38 | super(...) |
| classes.kt:85:16:85:25 | super(...) |
| classes.kt:89:16:89:44 | super(...) |
| classes.kt:93:1:93:26 | super(...) |
| classes.kt:94:1:94:29 | super(...) |
| classes.kt:95:1:95:31 | super(...) |
| classes.kt:96:1:96:34 | super(...) |
| classes.kt:98:1:104:1 | super(...) |
| classes.kt:99:5:99:36 | super(...) |
| classes.kt:100:5:100:43 | super(...) |
| classes.kt:101:5:101:39 | super(...) |
| classes.kt:102:5:102:41 | super(...) |
| classes.kt:103:5:103:44 | super(...) |
| classes.kt:106:1:106:27 | super(...) |
| classes.kt:107:1:107:23 | super(...) |
| superChain.kt:1:1:1:33 | super(...) |
| superChain.kt:2:33:2:57 | super(...) |
| superChain.kt:3:33:3:57 | super(...) |

View File

@@ -21,6 +21,18 @@ initBlocks
| classes.kt:81:16:81:38 | <obinit> |
| classes.kt:85:16:85:25 | <obinit> |
| classes.kt:89:16:89:44 | <obinit> |
| classes.kt:93:1:93:26 | <obinit> |
| classes.kt:94:1:94:29 | <obinit> |
| classes.kt:95:1:95:31 | <obinit> |
| classes.kt:96:1:96:34 | <obinit> |
| classes.kt:98:1:104:1 | <obinit> |
| classes.kt:99:5:99:36 | <obinit> |
| classes.kt:100:5:100:43 | <obinit> |
| classes.kt:101:5:101:39 | <obinit> |
| classes.kt:102:5:102:41 | <obinit> |
| classes.kt:103:5:103:44 | <obinit> |
| classes.kt:106:1:106:27 | <obinit> |
| classes.kt:107:1:107:23 | <obinit> |
| superChain.kt:1:1:1:33 | <obinit> |
| superChain.kt:2:1:2:60 | <obinit> |
| superChain.kt:3:1:3:60 | <obinit> |
@@ -42,6 +54,18 @@ initCall
| classes.kt:81:16:81:38 | <obinit>(...) |
| classes.kt:85:16:85:25 | <obinit>(...) |
| classes.kt:89:16:89:44 | <obinit>(...) |
| classes.kt:93:1:93:26 | <obinit>(...) |
| classes.kt:94:1:94:29 | <obinit>(...) |
| classes.kt:95:1:95:31 | <obinit>(...) |
| classes.kt:96:1:96:34 | <obinit>(...) |
| classes.kt:98:1:104:1 | <obinit>(...) |
| classes.kt:99:5:99:36 | <obinit>(...) |
| classes.kt:100:5:100:43 | <obinit>(...) |
| classes.kt:101:5:101:39 | <obinit>(...) |
| classes.kt:102:5:102:41 | <obinit>(...) |
| classes.kt:103:5:103:44 | <obinit>(...) |
| classes.kt:106:1:106:27 | <obinit>(...) |
| classes.kt:107:1:107:23 | <obinit>(...) |
| superChain.kt:1:1:1:33 | <obinit>(...) |
| superChain.kt:2:1:2:60 | <obinit>(...) |
| superChain.kt:3:1:3:60 | <obinit>(...) |

View File

@@ -21,6 +21,18 @@
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | classes.kt:59:1:59:23 | Interface1 |
| classes.kt:85:16:85:25 | new Object(...) { ... } | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:61:1:61:26 | Interface3<Integer> |
| classes.kt:93:1:93:26 | pulicClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:94:1:94:29 | privateClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:95:1:95:31 | internalClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:96:1:96:34 | noExplicitVisibilityClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:98:1:104:1 | nestedClassVisibilities | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:99:5:99:36 | pulicNestedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:100:5:100:43 | protectedNestedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:101:5:101:39 | privateNestedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:102:5:102:41 | internalNestedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:103:5:103:44 | noExplicitVisibilityNestedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:106:1:106:27 | sealedClass | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:107:1:107:23 | openClass | file://<external>/Object.class:0:0:0:0 | Object |
| superChain.kt:1:1:1:33 | SuperChain1 | file://<external>/Object.class:0:0:0:0 | Object |
| superChain.kt:1:1:1:33 | SuperChain1<T3,String> | file://<external>/Object.class:0:0:0:0 | Object |
| superChain.kt:1:1:1:33 | SuperChain1<T5,String> | file://<external>/Object.class:0:0:0:0 | Object |