Skip to content

Commit 53098c7

Browse files
committed
lucene 6.6.0 , kotlin analyzer first stab
1 parent fc55df9 commit 53098c7

File tree

13 files changed

+556
-16
lines changed

13 files changed

+556
-16
lines changed

build.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,15 @@ Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
260260
<run-jflex dir="${gen.analysis.dir}/tcl" name="TclXref"/>
261261
<run-jflex dir="${gen.analysis.dir}/scala" name="ScalaSymbolTokenizer"/>
262262
<run-jflex dir="${gen.analysis.dir}/scala" name="ScalaXref"/>
263+
<!-- Kotlin tokenizer is below and has disabled buffer -->
264+
<run-jflex dir="${gen.analysis.dir}/kotlin" name="KotlinXref"/>
263265

264266
<!-- just those 4 below will not increase buffer size beyond lucene token limits -->
265267
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/plain" name="PlainFullTokenizer"/>
266268
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/plain" name="PlainSymbolTokenizer"/>
267269
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/javascript" name="JavaScriptSymbolTokenizer"/>
268-
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/java" name="JavaSymbolTokenizer"/>
270+
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/java" name="JavaSymbolTokenizer"/>
271+
<run-jflex-and-disable-buffer-expansion dir="${gen.analysis.dir}/kotlin" name="KotlinSymbolTokenizer"/>
269272

270273
<!-- old analysers that will produce tokens > 32766 chars, since they have the buffer increase code in -->
271274
<!--

nbproject/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ build.generated.dir=${build.dir}/generated
2121
run.classpath=\
2222
${javac.classpath}:\
2323
${build.classes.dir}
24-
lucene.version=6.5.1
24+
lucene.version=6.6.0
2525
lucene-core.jar=lucene-core-${lucene.version}.jar
2626
file.reference.opengrok-dev-test=test
2727
debug.test.classpath=${run.test.classpath}

opengrok-web-nbproject/nbproject/project.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ endorsed.classpath=
3434
excludes=
3535
file.reference.bcel-6.0.jar=../lib/bcel-6.0.jar
3636
file.reference.json-simple-1.1.1.jar=../lib/json-simple-1.1.1.jar
37-
j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-storeconfig.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/ecj-4.5.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/tomcat-jni.jar:${j2ee.server.home}/lib/tomcat-util-scan.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-websocket.jar:${j2ee.server.home}/lib/websocket-api.jar
38-
lucene.version=6.5.1
37+
j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-storeconfig.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/ecj-4.6.3.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jaspic-api.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/tomcat-jni.jar:${j2ee.server.home}/lib/tomcat-util-scan.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-websocket.jar:${j2ee.server.home}/lib/websocket-api.jar
38+
lucene.version=6.6.0
3939
lucene-core.jar=lucene-core-${lucene.version}.jar
4040
lucene-analyzers-common.jar=lucene-analyzers-common-${lucene.version}.jar
4141
lucene-queryparser.jar=lucene-queryparser-${lucene.version}.jar

platform/solaris/ips/create.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ PKG pkgsend add file doc/ctags.config mode=0444 owner=root group=sys path=/usr/o
215215

216216

217217
# install libs
218-
LV=6.5.1
218+
LV=6.6.0
219219
for file in ant.jar \
220220
bcel-6.0.jar \
221221
lucene-analyzers-common-${LV}.jar \

platform/solaris/pkgdef/prototype

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ f none usr/opengrok/doc/opengrok-agent.properties=platform/solaris/default/openg
6363
f none usr/opengrok/lib/opengrok.jar=dist/opengrok.jar 0444 root bin
6464
f none usr/opengrok/lib/ant.jar=dist/lib/ant.jar 0444 root bin
6565
f none usr/opengrok/lib/bcel-6.0.jar=lib/bcel-6.0.jar 0444 root bin
66-
f none usr/opengrok/lib/lucene-core-6.5.1.jar=lib/lucene-core-6.5.1.jar 0444 root bin
67-
f none usr/opengrok/lib/lucene-analyzers-common-6.5.1.jar=lib/lucene-analyzers-common-6.5.1.jar 0444 root bin
68-
f none usr/opengrok/lib/lucene-queryparser-6.5.1.jar=lib/lucene-queryparser-6.5.1.jar 0444 root bin
69-
f none usr/opengrok/lib/lucene-suggest-6.5.1.jar=lib/lucene-suggest-6.5.1.jar 0444 root bin
66+
f none usr/opengrok/lib/lucene-core-6.6.0.jar=lib/lucene-core-6.6.0.jar 0444 root bin
67+
f none usr/opengrok/lib/lucene-analyzers-common-6.6.0.jar=lib/lucene-analyzers-common-6.6.0.jar 0444 root bin
68+
f none usr/opengrok/lib/lucene-queryparser-6.6.0.jar=lib/lucene-queryparser-6.6.0.jar 0444 root bin
69+
f none usr/opengrok/lib/lucene-suggest-6.6.0.jar=lib/lucene-suggest-6.6.0.jar 0444 root bin
7070
f none usr/opengrok/lib/jrcs.jar=lib/jrcs.jar 0444 root bin
7171
f none usr/opengrok/lib/swing-layout-0.9.jar=lib/swing-layout-0.9.jar 0444 root bin
7272
f none usr/opengrok/lib/json-simple-1.1.1.jar=lib/json-simple-1.1.1.jar 0444 root bin

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
5858
</modules>
5959

6060
<properties>
61-
<lucene.version>6.5.1</lucene.version>
61+
<lucene.version>6.6.0</lucene.version>
6262
<mavenjavadocplugin.version>2.10.4</mavenjavadocplugin.version>
6363
<compileSource>1.8</compileSource>
6464
<compileTarget>1.8</compileTarget>

src/org/opensolaris/opengrok/analysis/Ctags.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,13 @@ private void initialize() throws IOException {
123123
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*class[[:space:]]+([a-zA-Z0-9_]+)/\\4/c,classes/");
124124
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*object[[:space:]]+([a-zA-Z0-9_]+)/\\4/o,objects/");
125125
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*case class[[:space:]]+([a-zA-Z0-9_]+)/\\4/C,case classes/");
126-
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*case object[[:space:]]+([a-zA-Z0-9_]+)/\\4/O,case objects/");
126+
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*case object[[:space:]]+([a-zA-Z0-9_]+)/\\4/O,case objects/");
127127
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private|protected)?[[:space:]]*trait[[:space:]]+([a-zA-Z0-9_]+)/\\4/t,traits/");
128128
command.add("--regex-scala=/^[[:space:]]*type[[:space:]]+([a-zA-Z0-9_]+)/\\1/T,types/");
129129
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*def[[:space:]]+([a-zA-Z0-9_]+)/\\3/m,methods/");
130130
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*val[[:space:]]+([a-zA-Z0-9_]+)/\\3/l,constants/");
131131
command.add("--regex-scala=/^[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*var[[:space:]]+([a-zA-Z0-9_]+)/\\3/v,variables/");
132-
command.add("--regex-scala=/^[[:space:]]*package[[:space:]]+([a-zA-Z0-9_.]+)/\\1/p,packages/");
132+
command.add("--regex-scala=/^[[:space:]]*package[[:space:]]+([a-zA-Z0-9_.]+)/\\1/p,packages/");
133133

134134
command.add("--langdef=haskell"); // below was added with #912
135135
command.add("--langmap=haskell:.hs.hsc");
@@ -191,6 +191,20 @@ private void initialize() throws IOException {
191191
command.add("--regex-rust=/^[[:space:]]*macro_rules![[:space:]]+([[:alnum:]_]+)/\\1/d,macros,macro definitions/");
192192
command.add("--regex-rust=/^[[:space:]]*let[[:space:]]+(mut)?[[:space:]]+([[:alnum:]_]+)/\\2/V,variables/");
193193

194+
command.add("--langdef=kotlin");
195+
command.add("--langmap=kotlin:.kt");
196+
command.add("--langmap=kotlin:+.kts");
197+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private[^ ]*|protected)?[[:space:]]*class[[:space:]]+([[:alnum:]_:]+)/\\4/c,classes/");
198+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private[^ ]*|protected)?[[:space:]]*object[[:space:]]+([[:alnum:]_:]+)/\\4/o,objects/");
199+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private[^ ]*|protected)?[[:space:]]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*data class[[:space:]]+([[:alnum:]_:]+)/\\6/c,data classes/");
200+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy)[[:space:]]*)*(private[^ ]*|protected)?[[:space:]]*interface[[:space:]]+([[:alnum:]_:]+)/\\4/i,interfaces/");
201+
command.add("--regex-kotlin=/^[ \\t]*type[[:space:]]+([[:alnum:]_:]+)/\\1/T,types/");
202+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy|private[^ ]*(\\[[a-z]*\\])*|protected)[[:space:]]*)*fun[[:space:]]+([[:alnum:]_:]+)/\\4/m,methods/");
203+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy|private[^ ]*|protected)[[:space:]]*)*val[[:space:]]+([[:alnum:]_:]+)/\\3/co,constants/");
204+
command.add("--regex-kotlin=/^[ \\t]*((abstract|final|sealed|implicit|lazy|private[^ ]*|protected)[[:space:]]*)*var[[:space:]]+([[:alnum:]_:]+)/\\3/va,variables/");
205+
command.add("--regex-kotlin=/^[ \\t]*package[[:space:]]+([[:alnum:]_.:]+)/\\1/p,packages/");
206+
command.add("--regex-kotlin=/^[ \\t]*import[[:space:]]+([[:alnum:]_.:]+)/\\1/p,imports/");
207+
194208
//PLEASE add new languages ONLY with POSIX syntax (see above wiki link)
195209

196210
/* Add extra command line options for ctags. */
@@ -246,7 +260,7 @@ public Definitions doCtags(String file) throws IOException {
246260
// this means the ctags process is dead so we must restart it.
247261
ctagsRunning = false;
248262
LOGGER.log(Level.WARNING, "Ctags process exited with exit value {0}",
249-
exitValue);
263+
exitValue);
250264
} catch (IllegalThreadStateException exp) {
251265
ctagsRunning = true;
252266
// The ctags process is still running.
@@ -505,15 +519,15 @@ private void addTag(Definitions defs, Interner<String> seenSymbols,
505519
// multiple definitions, multiple definitions can have the same type,
506520
// one line can contain multiple definitions). Intern them to minimize
507521
// the space consumed by them (see bug #809).
508-
int lineno=0;
522+
int lineno = 0;
509523
try {
510-
lineno=Integer.parseInt(lnum);
524+
lineno = Integer.parseInt(lnum);
511525
} catch (NumberFormatException nfe) {
512526
LOGGER.log(Level.WARNING, "CTags line number parsing problem(but I will continue with line # 0) for symbol {0}", symbol);
513527
}
514528
defs.addTag(lineno, seenSymbols.intern(symbol.trim()),
515529
seenSymbols.intern(type.trim()), seenSymbols.intern(text.trim()),
516530
namespace == null ? null : seenSymbols.intern(namespace.trim()), signature);
517-
531+
518532
}
519533
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
* CDDL HEADER START
3+
*
4+
* The contents of this file are subject to the terms of the
5+
* Common Development and Distribution License (the "License").
6+
* You may not use this file except in compliance with the License.
7+
*
8+
* See LICENSE.txt included in this distribution for the specific
9+
* language governing permissions and limitations under the License.
10+
*
11+
* When distributing Covered Code, include this CDDL HEADER in each
12+
* file and include the License file at LICENSE.txt.
13+
* If applicable, add the following below this CDDL HEADER, with the
14+
* fields enclosed by brackets "[]" replaced with your own identifying
15+
* information: Portions Copyright [yyyy] [name of copyright owner]
16+
*
17+
* CDDL HEADER END
18+
*/
19+
20+
/*
21+
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
22+
*/
23+
package org.opensolaris.opengrok.analysis.kotlin;
24+
25+
import java.util.HashSet;
26+
import java.util.Set;
27+
28+
/**
29+
* Holds static hash set containing the Kotlin keywords
30+
*/
31+
public class Consts {
32+
33+
public static final Set<String> kwd = new HashSet<String>();
34+
35+
static {
36+
kwd.add("abstract");
37+
kwd.add("annotation");
38+
kwd.add("as");
39+
kwd.add("break");
40+
kwd.add("by");
41+
kwd.add("catch");
42+
kwd.add("class");
43+
kwd.add("companion");
44+
kwd.add("const");
45+
kwd.add("constructor");
46+
kwd.add("continue");
47+
kwd.add("crossinline");
48+
kwd.add("data");
49+
kwd.add("do");
50+
kwd.add("dynamic");
51+
kwd.add("else");
52+
kwd.add("enum");
53+
kwd.add("external");
54+
kwd.add("false");
55+
kwd.add("final");
56+
kwd.add("finally");
57+
kwd.add("for");
58+
kwd.add("fun");
59+
kwd.add("get");
60+
kwd.add("if");
61+
kwd.add("import");
62+
kwd.add("in");
63+
kwd.add("infix");
64+
kwd.add("inline");
65+
kwd.add("inner");
66+
kwd.add("interface");
67+
kwd.add("internal");
68+
kwd.add("is");
69+
kwd.add("lateinit");
70+
kwd.add("noinline");
71+
kwd.add("nullobject");
72+
kwd.add("open");
73+
kwd.add("operator");
74+
kwd.add("out");
75+
kwd.add("override");
76+
kwd.add("package");
77+
kwd.add("private");
78+
kwd.add("protected");
79+
kwd.add("public");
80+
kwd.add("reified");
81+
kwd.add("return");
82+
kwd.add("sealed");
83+
kwd.add("set");
84+
kwd.add("super");
85+
kwd.add("tailrec");
86+
kwd.add("this");
87+
kwd.add("throw");
88+
kwd.add("true");
89+
kwd.add("try");
90+
kwd.add("val");
91+
kwd.add("var");
92+
kwd.add("vararg");
93+
kwd.add("when");
94+
kwd.add("where");
95+
kwd.add("while");
96+
}
97+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* CDDL HEADER START
3+
*
4+
* The contents of this file are subject to the terms of the
5+
* Common Development and Distribution License (the "License").
6+
* You may not use this file except in compliance with the License.
7+
*
8+
* See LICENSE.txt included in this distribution for the specific
9+
* language governing permissions and limitations under the License.
10+
*
11+
* When distributing Covered Code, include this CDDL HEADER in each
12+
* file and include the License file at LICENSE.txt.
13+
* If applicable, add the following below this CDDL HEADER, with the
14+
* fields enclosed by brackets "[]" replaced with your own identifying
15+
* information: Portions Copyright [yyyy] [name of copyright owner]
16+
*
17+
* CDDL HEADER END
18+
*/
19+
20+
/*
21+
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
22+
*/
23+
package org.opensolaris.opengrok.analysis.kotlin;
24+
25+
import java.io.IOException;
26+
import java.io.Reader;
27+
import java.io.Writer;
28+
import org.opensolaris.opengrok.analysis.Definitions;
29+
import org.opensolaris.opengrok.analysis.FileAnalyzer;
30+
import org.opensolaris.opengrok.analysis.FileAnalyzerFactory;
31+
import org.opensolaris.opengrok.analysis.JFlexXref;
32+
import org.opensolaris.opengrok.analysis.plain.AbstractSourceCodeAnalyzer;
33+
import org.opensolaris.opengrok.configuration.Project;
34+
import org.opensolaris.opengrok.history.Annotation;
35+
36+
/**
37+
*
38+
* @author Lubos Kosco
39+
*/
40+
public class KotlinAnalyzer extends AbstractSourceCodeAnalyzer {
41+
42+
/**
43+
* Creates a new instance of KotlinAnalyzer
44+
* @param factory name
45+
*/
46+
protected KotlinAnalyzer(FileAnalyzerFactory factory) {
47+
super(factory);
48+
SymbolTokenizer=new KotlinSymbolTokenizer(FileAnalyzer.dummyReader);
49+
}
50+
51+
@Override
52+
protected JFlexXref newXref(Reader reader) {
53+
return new KotlinXref(reader);
54+
}
55+
56+
@Override
57+
protected boolean supportsScopes() {
58+
return true;
59+
}
60+
61+
static void writeXref(Reader in, Writer out, Definitions defs, Annotation annotation, Project project) throws IOException {
62+
KotlinXref xref = new KotlinXref(in);
63+
AbstractSourceCodeAnalyzer.writeXref(xref, in, out, defs, annotation, project);
64+
}
65+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* CDDL HEADER START
3+
*
4+
* The contents of this file are subject to the terms of the
5+
* Common Development and Distribution License (the "License").
6+
* You may not use this file except in compliance with the License.
7+
*
8+
* See LICENSE.txt included in this distribution for the specific
9+
* language governing permissions and limitations under the License.
10+
*
11+
* When distributing Covered Code, include this CDDL HEADER in each
12+
* file and include the License file at LICENSE.txt.
13+
* If applicable, add the following below this CDDL HEADER, with the
14+
* fields enclosed by brackets "[]" replaced with your own identifying
15+
* information: Portions Copyright [yyyy] [name of copyright owner]
16+
*
17+
* CDDL HEADER END
18+
*/
19+
20+
/*
21+
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
22+
*/
23+
24+
package org.opensolaris.opengrok.analysis.kotlin;
25+
26+
import java.io.IOException;
27+
import java.io.Reader;
28+
import java.io.Writer;
29+
import org.opensolaris.opengrok.analysis.Definitions;
30+
import org.opensolaris.opengrok.analysis.FileAnalyzer;
31+
import org.opensolaris.opengrok.analysis.FileAnalyzer.Genre;
32+
import org.opensolaris.opengrok.analysis.FileAnalyzerFactory;
33+
import org.opensolaris.opengrok.configuration.Project;
34+
import org.opensolaris.opengrok.history.Annotation;
35+
36+
public class KotlinAnalyzerFactory extends FileAnalyzerFactory {
37+
38+
private static final String name = "Kotlin";
39+
40+
private static final String[] SUFFIXES = {
41+
"KT",
42+
"KTS",
43+
};
44+
45+
public KotlinAnalyzerFactory() {
46+
super(null, null, SUFFIXES, null, null, "text/plain", Genre.PLAIN, name);
47+
}
48+
49+
@Override
50+
protected FileAnalyzer newAnalyzer() {
51+
return new KotlinAnalyzer(this);
52+
}
53+
54+
@Override
55+
public void writeXref(Reader in, Writer out, Definitions defs, Annotation annotation, Project project)
56+
throws IOException {
57+
KotlinAnalyzer.writeXref(in, out, defs, annotation, project);
58+
}
59+
}

0 commit comments

Comments
 (0)