Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.SemanticdbSymbols;

import javax.lang.model.element.Element;
Expand All @@ -25,7 +26,7 @@ public GlobalSymbolsCache(SemanticdbJavacOptions options) {
this.options = options;
}

public String semanticdbSymbol(Element sym, LocalSymbolsCache locals) {
public String semanticdbSymbol(Element sym, LocalSymbolsCache<Element, String> locals) {
String result = globals.get(sym);
if (result != null) return result;
String localResult = locals.get(sym);
Expand All @@ -37,7 +38,7 @@ public String semanticdbSymbol(Element sym, LocalSymbolsCache locals) {
return result;
}

private String uncachedSemanticdbSymbol(Element sym, LocalSymbolsCache locals) {
private String uncachedSemanticdbSymbol(Element sym, LocalSymbolsCache<Element, String> locals) {
if (sym == null) return SemanticdbSymbols.ROOT_PACKAGE;

if (sym instanceof PackageElement) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.NoRelativePathMode;
import com.sourcegraph.semanticdb.SemanticdbOptions;
import com.sourcegraph.semanticdb.UriScheme;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;
Expand All @@ -16,24 +20,13 @@
import static javax.tools.StandardLocation.SOURCE_OUTPUT;

/** Settings that can be configured alongside the -Xplugin compiler option. */
public class SemanticdbJavacOptions {

/** The directory to place META-INF and its .semanticdb files */
public Path targetroot;
public class SemanticdbJavacOptions extends SemanticdbOptions {

public Path sourceroot;
public boolean includeText = false;
public boolean verboseEnabled = false;
public final ArrayList<String> errors;
public final ArrayList<String> errors = new ArrayList<>();
public boolean alreadyReportedErrors = false;
public UriScheme uriScheme = UriScheme.DEFAULT;
public NoRelativePathMode noRelativePath = NoRelativePathMode.INDEX_ANYWAY;
public Path generatedTargetRoot;

public SemanticdbJavacOptions() {
errors = new ArrayList<>();
}

public static String missingRequiredDirectoryOption(String option) {
return String.format(
"missing argument '-%s'. To fix this problem, update the Java compiler option "
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.Semanticdb;

import com.sourcegraph.semanticdb.Semanticdb.*;
Expand All @@ -20,10 +21,11 @@

public final class SemanticdbSignatures {
private final GlobalSymbolsCache cache;
private final LocalSymbolsCache locals;
private final LocalSymbolsCache<Element, String> locals;
private final Types types;

public SemanticdbSignatures(GlobalSymbolsCache cache, LocalSymbolsCache locals, Types types) {
public SemanticdbSignatures(
GlobalSymbolsCache cache, LocalSymbolsCache<Element, String> locals, Types types) {
this.cache = cache;
this.locals = locals;
this.types = types;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.NoRelativePathMode;
import com.sourcegraph.semanticdb.Semanticdb;
import com.sourcegraph.semanticdb.SemanticdbDocumentBuilder;
import com.sourcegraph.semanticdb.SemanticdbPaths;
import com.sourcegraph.semanticdb.SemanticdbSymbols;
import com.sourcegraph.semanticdb.SemanticdbWriter;
import com.sourcegraph.semanticdb.UriScheme;

import com.sun.source.util.JavacTask;
import com.sun.source.util.TaskEvent;
Expand All @@ -12,6 +16,7 @@
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;

import javax.lang.model.element.Element;
import javax.tools.JavaFileObject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
Expand All @@ -21,6 +26,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Optional;

Expand Down Expand Up @@ -152,7 +158,8 @@ private void writeSemanticdb(TaskEvent event, Path output, Semanticdb.TextDocume

private static final class PerSourceState {
final SemanticdbDocumentBuilder documentBuilder = new SemanticdbDocumentBuilder();
final LocalSymbolsCache locals = new LocalSymbolsCache();
final LocalSymbolsCache<Element, String> locals =
new LocalSymbolsCache<>(new IdentityHashMap<>(), SemanticdbSymbols::local);
}

public static Path absolutePathFromUri(SemanticdbJavacOptions options, JavaFileObject file) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.Semanticdb;

import com.sun.source.tree.*;
Expand All @@ -22,7 +23,7 @@
public class SemanticdbTrees {
public SemanticdbTrees(
GlobalSymbolsCache globals,
LocalSymbolsCache locals,
LocalSymbolsCache<Element, String> locals,
String semanticdbUri,
Types types,
Trees trees,
Expand All @@ -37,7 +38,7 @@ public SemanticdbTrees(
}

private final GlobalSymbolsCache globals;
private final LocalSymbolsCache locals;
private final LocalSymbolsCache<Element, String> locals;
private final String semanticdbUri;
private final Types types;
private final Trees trees;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.Semanticdb;

import javax.lang.model.element.Element;
Expand All @@ -25,10 +26,11 @@ class SemanticdbTypeVisitor extends SimpleTypeVisitor8<Semanticdb.Type, Void> {
static final String ARRAY_SYMBOL = "scala/Array#";

private final GlobalSymbolsCache cache;
private final LocalSymbolsCache locals;
private final LocalSymbolsCache<Element, String> locals;
private final Types types;

SemanticdbTypeVisitor(GlobalSymbolsCache cache, LocalSymbolsCache locals, Types types) {
SemanticdbTypeVisitor(
GlobalSymbolsCache cache, LocalSymbolsCache<Element, String> locals, Types types) {
this.cache = cache;
this.locals = locals;
this.types = types;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_javac;

import com.sourcegraph.semanticdb.LocalSymbolsCache;
import com.sourcegraph.semanticdb.Semanticdb;

import com.sourcegraph.semanticdb.SemanticdbDocumentBuilder;
Expand Down Expand Up @@ -64,7 +65,7 @@
public class SemanticdbVisitor extends TreePathScanner<Void, Void> {

private final GlobalSymbolsCache globals;
private final LocalSymbolsCache locals;
private final LocalSymbolsCache<Element, String> locals;
private final Types types;
private final Trees trees;
private final CompilationUnitTree compUnitTree;
Expand All @@ -78,7 +79,7 @@ public class SemanticdbVisitor extends TreePathScanner<Void, Void> {

public SemanticdbVisitor(
GlobalSymbolsCache globals,
LocalSymbolsCache locals,
LocalSymbolsCache<Element, String> locals,
CompilationUnitTree compUnitTree,
SemanticdbJavacOptions options,
Types types,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.sourcegraph.semanticdb_kotlinc

import java.nio.file.Path
import com.sourcegraph.semanticdb.SemanticdbOptions
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar

class AnalyzerFirExtensionRegistrar(
private val sourceroot: Path,
private val options: SemanticdbOptions,
) : FirExtensionRegistrar() {
override fun ExtensionRegistrarContext.configurePlugin() {
+AnalyzerParamsProvider.getFactory(sourceroot)
+AnalyzerParamsProvider.getFactory(options)
+::AnalyzerCheckers
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package com.sourcegraph.semanticdb_kotlinc

import com.sourcegraph.semanticdb.SemanticdbOptions
import java.nio.file.Path
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent
import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent.Factory

open class AnalyzerParamsProvider(
session: FirSession,
val sourceroot: Path,
val options: SemanticdbOptions,
) : FirExtensionSessionComponent(session) {
val sourceroot: Path get() = options.sourceroot

companion object {
fun getFactory(sourceroot: Path): Factory {
return Factory { AnalyzerParamsProvider(it, sourceroot) }
fun getFactory(options: SemanticdbOptions): Factory {
return Factory { AnalyzerParamsProvider(it, options) }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sourcegraph.semanticdb_kotlinc

import com.sourcegraph.semanticdb.Semanticdb
import com.sourcegraph.semanticdb.SemanticdbOptions

import kotlin.contracts.ExperimentalContracts
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
Expand All @@ -14,13 +15,16 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
class AnalyzerRegistrar(private val callback: (Semanticdb.TextDocument) -> Unit = {}) :
CompilerPluginRegistrar() {
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
FirExtensionRegistrarAdapter.registerExtension(
AnalyzerFirExtensionRegistrar(sourceroot = configuration[KEY_SOURCES]!!)
)
val options =
SemanticdbOptions().apply {
sourceroot = configuration[KEY_SOURCES]!!
targetroot = configuration[KEY_TARGET]!!
}
FirExtensionRegistrarAdapter.registerExtension(AnalyzerFirExtensionRegistrar(options))
IrGenerationExtension.registerExtension(
PostAnalysisExtension(
sourceRoot = configuration[KEY_SOURCES]!!,
targetRoot = configuration[KEY_TARGET]!!,
sourceRoot = options.sourceroot,
targetRoot = options.targetroot,
callback = callback))
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sourcegraph.semanticdb_kotlinc

import com.sourcegraph.semanticdb.LocalSymbolsCache as SharedLocalSymbolsCache
import com.sourcegraph.semanticdb_kotlinc.SemanticdbSymbolDescriptor.Kind
import java.lang.System.err
import kotlin.contracts.ExperimentalContracts
Expand Down Expand Up @@ -210,26 +211,13 @@ class GlobalSymbolsCache(testing: Boolean = false) : Iterable<Symbol> {
override fun iterator(): Iterator<Symbol> = globals.values.iterator()
}

class LocalSymbolsCache : Iterable<Symbol> {
private val symbols = HashMap<FirBasedSymbol<*>, Symbol>()
private var localsCounter = 0
typealias LocalSymbolsCache = SharedLocalSymbolsCache<FirBasedSymbol<*>, Symbol>

val iterator: Iterable<Map.Entry<FirBasedSymbol<*>, Symbol>>
get() = symbols.asIterable()
@Suppress("FunctionName")
fun LocalSymbolsCache(): LocalSymbolsCache =
SharedLocalSymbolsCache(HashMap()) { Symbol.createLocal(it) }

val size: Int
get() = symbols.size

operator fun get(symbol: FirBasedSymbol<*>): Symbol? = symbols[symbol]

operator fun plus(symbol: FirBasedSymbol<*>): Symbol {
val result = Symbol.createLocal(localsCounter++)
symbols[symbol] = result
return result
}

override fun iterator(): Iterator<Symbol> = symbols.values.iterator()
}
operator fun LocalSymbolsCache.plus(symbol: FirBasedSymbol<*>): Symbol = put(symbol)

@ExperimentalContracts
class SymbolsCache(private val globals: GlobalSymbolsCache, private val locals: LocalSymbolsCache) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sourcegraph.semanticdb_kotlinc.test

import com.sourcegraph.semanticdb.Semanticdb
import com.sourcegraph.semanticdb.SemanticdbOptions

import com.sourcegraph.semanticdb_kotlinc.*
import com.sourcegraph.semanticdb_kotlinc.AnalyzerCheckers.Companion.visitors
Expand Down Expand Up @@ -162,7 +163,7 @@ class TestAnalyzerParamsProvider(
var globals: GlobalSymbolsCache,
var locals: LocalSymbolsCache,
sourceroot: Path,
) : AnalyzerParamsProvider(session, sourceroot) {
) : AnalyzerParamsProvider(session, SemanticdbOptions().apply { this.sourceroot = sourceroot }) {
companion object {
fun getFactory(
globals: GlobalSymbolsCache,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.sourcegraph.semanticdb;

import java.util.Map;
import java.util.function.IntFunction;

/** Per-file cache mapping compiler symbols to monotonically numbered SemanticDB local symbols. */
public final class LocalSymbolsCache<K, V> {
private final Map<K, V> symbols;
private final IntFunction<V> factory;
private int counter = 0;

public LocalSymbolsCache(Map<K, V> backing, IntFunction<V> factory) {
this.symbols = backing;
this.factory = factory;
}

public V get(K key) {
return symbols.get(key);
}

public V put(K key) {
V value = factory.apply(counter++);
symbols.put(key, value);
return value;
}

public int getSize() {
return symbols.size();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sourcegraph.semanticdb_javac;
package com.sourcegraph.semanticdb;

import java.util.Arrays;
import java.util.stream.Collectors;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.sourcegraph.semanticdb;

import java.nio.file.Path;

/** Settings shared between all SemanticDB-emitting compiler plugins. */
public class SemanticdbOptions {
public Path sourceroot;
public Path targetroot;
public boolean includeText = false;
public NoRelativePathMode noRelativePath = NoRelativePathMode.INDEX_ANYWAY;
public UriScheme uriScheme = UriScheme.DEFAULT;
}
Loading
Loading