Skip to content

Commit

Permalink
Merge pull request #401 from olafurpg/copy-apply
Browse files Browse the repository at this point in the history
Support more synthetic Scala symbols
  • Loading branch information
olafurpg authored Feb 24, 2022
2 parents 36570f0 + de10077 commit 2ddfbf4
Show file tree
Hide file tree
Showing 10 changed files with 98 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ private Semanticdb.TextDocuments textDocumentsParseFrom(Path semanticdbPath) thr
}

private boolean isIgnoredOverriddenSymbol(String symbol) {
// Skip java/lang/Object# since it's the parent of all classes
// Skip java/lang/Object# and similar symbols from Scala since it's the parent of all classes
// making it noisy for "find implementations" results.
return symbol.equals("java/lang/Object#");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,24 @@ public static List<String> alternativeSymbols(Semanticdb.SymbolInformation info)
owner.owner, owner.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Type)));
}
break;
case Parameter:
SymbolDescriptor owner = SymbolDescriptor.parseFromSymbol(sym.owner);
if (owner.descriptor.name.equals("copy")) {
// case classes copy method parameter.
alternatives.add(
SemanticdbSymbols.global(
owner.owner, sym.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Term)));
} else if (owner.descriptor.name.equals("apply")) {
// case class companion apply constructor parameter.
SymbolDescriptor grandparent = SymbolDescriptor.parseFromSymbol(owner.owner);
String companion =
SemanticdbSymbols.global(
grandparent.owner,
grandparent.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Type));
alternatives.add(
SemanticdbSymbols.global(
companion, sym.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Term)));
}
case Term:
alternatives.add(
SemanticdbSymbols.global(
Expand Down
6 changes: 3 additions & 3 deletions tests/minimized-scala/src/main/scala/minimized/Issue396.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package minimized
case class Issue396(a: Int)
object Issue396App {
println(Issue396)
Issue396.apply(42).copy(a = 41)
Issue396.apply(42).productElement(0)
Issue396.apply(42).productElementName(0)
Issue396.apply(a = 42).copy(a = 41)
Issue396.apply(a = 42).productElement(0)
Issue396.apply(a = 42).productElementName(0)
}
19 changes: 12 additions & 7 deletions tests/snapshots/src/main/generated/minimized/Issue396.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,28 @@ case class Issue396(a: Int)
// ^^^^^^^^ synthetic_definition minimized/Issue396#productElementName(). def productElementName(x$1: Int): String
// definition minimized/Issue396#`<init>`(). def this(a: Int)
// ^ definition minimized/Issue396#a. val a: Int
// ^ synthetic_definition minimized/Issue396.apply().(a) a: Int
// ^ synthetic_definition minimized/Issue396#copy().(a) default a: Int
// ^^^ reference scala/Int#
object Issue396App {
// ^^^^^^^^^^^ definition minimized/Issue396App. object Issue396App
println(Issue396)
//^^^^^^^ reference scala/Predef.println(+1).
// ^^^^^^^^ reference minimized/Issue396.
Issue396.apply(42).copy(a = 41)
Issue396.apply(a = 42).copy(a = 41)
//^^^^^^^^ reference minimized/Issue396.
// ^^^^^ reference minimized/Issue396.apply().
// ^^^^ reference minimized/Issue396#copy().
// ^ reference minimized/Issue396#copy().(a)
Issue396.apply(42).productElement(0)
// ^ reference minimized/Issue396.apply().(a)
// ^^^^ reference minimized/Issue396#copy().
// ^ reference minimized/Issue396#copy().(a)
Issue396.apply(a = 42).productElement(0)
//^^^^^^^^ reference minimized/Issue396.
// ^^^^^ reference minimized/Issue396.apply().
// ^^^^^^^^^^^^^^ reference minimized/Issue396#productElement().
Issue396.apply(42).productElementName(0)
// ^ reference minimized/Issue396.apply().(a)
// ^^^^^^^^^^^^^^ reference minimized/Issue396#productElement().
Issue396.apply(a = 42).productElementName(0)
//^^^^^^^^ reference minimized/Issue396.
// ^^^^^ reference minimized/Issue396.apply().
// ^^^^^^^^^^^^^^^^^^ reference minimized/Issue396#productElementName().
// ^ reference minimized/Issue396.apply().(a)
// ^^^^^^^^^^^^^^^^^^ reference minimized/Issue396#productElementName().
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ case class MinimizedCaseClass(value: String) {
// ^^^^^^^^^^^^^^^^^^ synthetic_definition minimized/MinimizedCaseClass#copy(). def copy(value: String): MinimizedCaseClass
// definition minimized/MinimizedCaseClass#`<init>`(). def this(value: String)
// ^^^^^ definition minimized/MinimizedCaseClass#value. val value: String
// ^^^^^ synthetic_definition minimized/MinimizedCaseClass#copy().(value) default value: String
// ^^^^^ synthetic_definition minimized/MinimizedCaseClass.apply().(value) value: String
// ^^^^^^ reference scala/Predef.String#
def this() = this("value")
// ^^^^ definition minimized/MinimizedCaseClass#`<init>`(+1). def this()
Expand Down
6 changes: 6 additions & 0 deletions tests/snapshots/src/main/generated/ujson/Exceptions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@ case class ParseException(clue: String, index: Int)
// ^^^^^^^^^^^^^^ synthetic_definition ujson/ParseException#productElement(). def productElement(x$1: Int): Any
// definition ujson/ParseException#`<init>`(). def this(clue: String, index: Int)
// ^^^^ definition ujson/ParseException#clue. val clue: String
// ^^^^ synthetic_definition ujson/ParseException.apply().(clue) clue: String
// ^^^^ synthetic_definition ujson/ParseException#copy().(clue) default clue: String
// ^^^^^^ reference scala/Predef.String#
// ^^^^^ definition ujson/ParseException#index. val index: Int
// ^^^^^ synthetic_definition ujson/ParseException.apply().(index) index: Int
// ^^^^^ synthetic_definition ujson/ParseException#copy().(index) default index: Int
// ^^^ reference scala/Int#
extends Exception(clue + " at index " + index) with ParsingFailedException
// ^^^^^^^^^ reference scala/package.Exception#
Expand All @@ -36,6 +40,8 @@ case class IncompleteParseException(msg: String)
// ^^^^^^^^^^^^^^^^^^^^^^^^ synthetic_definition ujson/IncompleteParseException. object IncompleteParseException
// definition ujson/IncompleteParseException#`<init>`(). def this(msg: String)
// ^^^ definition ujson/IncompleteParseException#msg. val msg: String
// ^^^ synthetic_definition ujson/IncompleteParseException.apply().(msg) msg: String
// ^^^ synthetic_definition ujson/IncompleteParseException#copy().(msg) default msg: String
// ^^^^^^ reference scala/Predef.String#
extends Exception(msg) with ParsingFailedException
// ^^^^^^^^^ reference scala/package.Exception#
Expand Down
26 changes: 26 additions & 0 deletions tests/snapshots/src/main/generated/ujson/IndexedValue.scala
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,12 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^ synthetic_definition ujson/IndexedValue.Str#productElementName(). def productElementName(x$1: Int): String
// definition ujson/IndexedValue.Str#`<init>`(). def this(index: Int, value0: CharSequence)
// ^^^^^ definition ujson/IndexedValue.Str#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Str#copy().(index) default index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Str.apply().(index) index: Int
// ^^^ reference scala/Int#
// ^^^^^^ definition ujson/IndexedValue.Str#value0. val value0: CharSequence
// ^^^^^^ synthetic_definition ujson/IndexedValue.Str.apply().(value0) value0: CharSequence
// ^^^^^^ synthetic_definition ujson/IndexedValue.Str#copy().(value0) default value0: CharSequence
// ^^^^ reference java/
// ^^^^ reference java/lang/
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
Expand All @@ -65,8 +69,10 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^ synthetic_definition ujson/IndexedValue.Obj#productElementName(). def productElementName(x$1: Int): String
// definition ujson/IndexedValue.Obj#`<init>`(). def this(index: Int, value0: (CharSequence, IndexedValue)*)
// ^^^^^ definition ujson/IndexedValue.Obj#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Obj.apply().(index) index: Int
// ^^^ reference scala/Int#
// ^^^^^^ definition ujson/IndexedValue.Obj#value0. val value0: (CharSequence, IndexedValue)*
// ^^^^^^ synthetic_definition ujson/IndexedValue.Obj.apply().(value0) value0: (CharSequence, IndexedValue)*
// ^^^^ reference java/
// ^^^^ reference java/lang/
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
Expand All @@ -81,8 +87,10 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^ synthetic_definition ujson/IndexedValue.Arr.apply(). def apply(index: Int, value: IndexedValue*): Arr
// definition ujson/IndexedValue.Arr#`<init>`(). def this(index: Int, value: IndexedValue*)
// ^^^^^ definition ujson/IndexedValue.Arr#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Arr.apply().(index) index: Int
// ^^^ reference scala/Int#
// ^^^^^ definition ujson/IndexedValue.Arr#value. val value: IndexedValue*
// ^^^^^ synthetic_definition ujson/IndexedValue.Arr.apply().(value) value: IndexedValue*
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand All @@ -95,12 +103,20 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^ synthetic_definition ujson/IndexedValue.Num.apply(). def apply(index: Int, s: CharSequence, decIndex: Int, expIndex: Int): Num
// definition ujson/IndexedValue.Num#`<init>`(). def this(index: Int, s: CharSequence, decIndex: Int, expIndex: Int)
// ^^^^^ definition ujson/IndexedValue.Num#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(index) default index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(index) index: Int
// ^^^ reference scala/Int#
// ^ definition ujson/IndexedValue.Num#s. val s: CharSequence
// ^ synthetic_definition ujson/IndexedValue.Num.apply().(s) s: CharSequence
// ^ synthetic_definition ujson/IndexedValue.Num#copy().(s) default s: CharSequence
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
// ^^^^^^^^ definition ujson/IndexedValue.Num#decIndex. val decIndex: Int
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(decIndex) default decIndex: Int
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(decIndex) decIndex: Int
// ^^^ reference scala/Int#
// ^^^^^^^^ definition ujson/IndexedValue.Num#expIndex. val expIndex: Int
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(expIndex) expIndex: Int
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(expIndex) default expIndex: Int
// ^^^ reference scala/Int#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand All @@ -113,8 +129,12 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^^^^ synthetic_definition ujson/IndexedValue.NumRaw#productElementName(). def productElementName(x$1: Int): String
// definition ujson/IndexedValue.NumRaw#`<init>`(). def this(index: Int, d: Double)
// ^^^^^ definition ujson/IndexedValue.NumRaw#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.NumRaw.apply().(index) index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.NumRaw#copy().(index) default index: Int
// ^^^ reference scala/Int#
// ^ definition ujson/IndexedValue.NumRaw#d. val d: Double
// ^ synthetic_definition ujson/IndexedValue.NumRaw#copy().(d) default d: Double
// ^ synthetic_definition ujson/IndexedValue.NumRaw.apply().(d) d: Double
// ^^^^^^ reference scala/Double#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand All @@ -127,6 +147,8 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^^^ synthetic_definition ujson/IndexedValue.False#copy(). def copy(index: Int): False
// definition ujson/IndexedValue.False#`<init>`(). def this(index: Int)
// ^^^^^ definition ujson/IndexedValue.False#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.False.apply().(index) index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.False#copy().(index) default index: Int
// ^^^ reference scala/Int#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand All @@ -142,6 +164,8 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^^ synthetic_definition ujson/IndexedValue.True#productElementName(). def productElementName(x$1: Int): String
// definition ujson/IndexedValue.True#`<init>`(). def this(index: Int)
// ^^^^^ definition ujson/IndexedValue.True#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.True.apply().(index) index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.True#copy().(index) default index: Int
// ^^^ reference scala/Int#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand All @@ -157,6 +181,8 @@ object IndexedValue extends Transformer[IndexedValue]{
// ^^^^ synthetic_definition ujson/IndexedValue.Null. object Null
// definition ujson/IndexedValue.Null#`<init>`(). def this(index: Int)
// ^^^^^ definition ujson/IndexedValue.Null#index. val index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Null.apply().(index) index: Int
// ^^^^^ synthetic_definition ujson/IndexedValue.Null#copy().(index) default index: Int
// ^^^ reference scala/Int#
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
// reference java/lang/Object#`<init>`().
Expand Down
4 changes: 4 additions & 0 deletions tests/snapshots/src/main/generated/ujson/Readable.scala
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,12 @@ object Readable extends ReadableLowPri{
// ^ definition ujson/Readable.fromTransformer#[T] T
// definition ujson/Readable.fromTransformer#`<init>`(). def this(t: T, w: Transformer[T])
// ^ definition ujson/Readable.fromTransformer#t. val t: T
// ^ synthetic_definition ujson/Readable.fromTransformer#copy().(t) default t: T
// ^ synthetic_definition ujson/Readable.fromTransformer.apply().(t) t: T
// ^ reference ujson/Readable.fromTransformer#[T]
// ^ definition ujson/Readable.fromTransformer#w. val w: Transformer[T]
// ^ synthetic_definition ujson/Readable.fromTransformer#copy().(w) default w: Transformer[T]
// ^ synthetic_definition ujson/Readable.fromTransformer.apply().(w) w: Transformer[T]
// ^^^^^^^^^^^ reference ujson/Transformer#
// ^ reference ujson/Readable.fromTransformer#[T]
// ^^^^^^^^ reference ujson/Readable#
Expand Down
Loading

0 comments on commit 2ddfbf4

Please sign in to comment.