Skip to content
Snippets Groups Projects
Verified Commit 670e313c authored by Igor Drozdov's avatar Igor Drozdov :two:
Browse files

Move ResultSet logic into a separate file

parent 6be59c40
No related branches found
No related tags found
1 merge request!107796Enable Code Navigation for Java Applications
......@@ -30,11 +30,6 @@ type HoverRef struct {
HoverId Id `json:"inV"`
}
type ResultSetRef struct {
ResultSetId Id `json:"outV"`
RefId Id `json:"inV"`
}
func NewHovers() (*Hovers, error) {
file, err := os.CreateTemp("", "hovers")
if err != nil {
......
......@@ -13,11 +13,10 @@ const (
)
type Ranges struct {
DefRefs map[Id]Item
References *References
Hovers *Hovers
Cache *cache
ResultSetCache *cache
DefRefs map[Id]Item
References *References
ResultSet *ResultSet
Cache *cache
}
type RawRange struct {
......@@ -52,7 +51,7 @@ type SerializedRange struct {
}
func NewRanges() (*Ranges, error) {
hovers, err := NewHovers()
resultSet, err := NewResultSet()
if err != nil {
return nil, err
}
......@@ -67,17 +66,11 @@ func NewRanges() (*Ranges, error) {
return nil, err
}
resultSetCache, err := newCache("results-set", Id(0))
if err != nil {
return nil, err
}
return &Ranges{
DefRefs: make(map[Id]Item),
References: references,
Hovers: hovers,
Cache: cache,
ResultSetCache: resultSetCache,
DefRefs: make(map[Id]Item),
References: references,
Cache: cache,
ResultSet: resultSet,
}, nil
}
......@@ -91,12 +84,8 @@ func (r *Ranges) Read(label string, line []byte) error {
if err := r.addItem(line); err != nil {
return err
}
case "textDocument/references":
if err := r.addResultSet(line); err != nil {
return err
}
default:
return r.Hovers.Read(label, line)
return r.ResultSet.Read(label, line)
}
return nil
......@@ -120,7 +109,7 @@ func (r *Ranges) Serialize(f io.Writer, rangeIds []Id, docs map[Id]string) error
StartLine: entry.Line,
StartChar: entry.Character,
DefinitionPath: r.definitionPathFor(docs, entry.RefId),
Hover: r.hoverFor(entry.RefId),
Hover: r.ResultSet.HoverFor(entry.RefId),
References: r.References.For(docs, entry.RefId),
}
if err := encoder.Encode(serializedRange); err != nil {
......@@ -140,20 +129,11 @@ func (r *Ranges) Serialize(f io.Writer, rangeIds []Id, docs map[Id]string) error
return nil
}
func (r *Ranges) hoverFor(refId Id) json.RawMessage {
var resultSetId Id
if err := r.ResultSetCache.Entry(refId, &resultSetId); err != nil {
return nil
}
return r.Hovers.For(resultSetId)
}
func (r *Ranges) Close() error {
for _, err := range []error{
r.Cache.Close(),
r.References.Close(),
r.Hovers.Close(),
r.ResultSet.Close(),
} {
if err != nil {
return err
......@@ -229,15 +209,6 @@ func (r *Ranges) addItem(line []byte) error {
return nil
}
func (r *Ranges) addResultSet(line []byte) error {
var ref ResultSetRef
if err := json.Unmarshal(line, &ref); err != nil {
return err
}
return r.ResultSetCache.SetEntry(ref.RefId, ref.ResultSetId)
}
func (r *Ranges) getRange(rangeId Id) (*Range, error) {
var rg Range
if err := r.Cache.Entry(rangeId, &rg); err != nil {
......
package parser
import (
"encoding/json"
)
type ResultSet struct {
Hovers *Hovers
RefsCache *cache
}
type RawResultSetRef struct {
ResultSetId Id `json:"outV"`
RefId Id `json:"inV"`
}
func NewResultSet() (*ResultSet, error) {
hovers, err := NewHovers()
if err != nil {
return nil, err
}
refsCache, err := newCache("results-set-refs", Id(0))
if err != nil {
return nil, err
}
return &ResultSet{
Hovers: hovers,
RefsCache: refsCache,
}, nil
}
func (r *ResultSet) Read(label string, line []byte) error {
switch label {
case "textDocument/references":
if err := r.addResultSetRef(line); err != nil {
return err
}
default:
return r.Hovers.Read(label, line)
}
return nil
}
func (r *ResultSet) HoverFor(refId Id) json.RawMessage {
var resultSetId Id
if err := r.RefsCache.Entry(refId, &resultSetId); err != nil {
return nil
}
return r.Hovers.For(resultSetId)
}
func (r *ResultSet) Close() error {
for _, err := range []error{
r.RefsCache.Close(),
r.Hovers.Close(),
} {
if err != nil {
return err
}
}
return nil
}
func (r *ResultSet) addResultSetRef(line []byte) error {
var ref RawResultSetRef
if err := json.Unmarshal(line, &ref); err != nil {
return err
}
return r.RefsCache.SetEntry(ref.RefId, ref.ResultSetId)
}
package parser
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestResultSetRead(t *testing.T) {
r := setupResultSet(t)
var id Id
require.NoError(t, r.RefsCache.Entry(2, &id))
require.Equal(t, Id(1), id)
require.NoError(t, r.Close())
}
func setupResultSet(t *testing.T) *ResultSet {
r, err := NewResultSet()
require.NoError(t, err)
require.NoError(t, r.Read("textDocument/references", []byte(`{"id":4,"label":"textDocument/references","outV":"1","inV":2}`)))
return r
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment