diff --git a/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java b/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java index 265d1bf52e35..a501e2fecd7a 100644 --- a/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java +++ b/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java @@ -6,7 +6,7 @@ import com.sun.source.tree.Tree; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.tree.JCTree; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; +import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; /** * Used via reflection in {@link JavacTreeRefScanner#createASTScanner()} @@ -18,7 +18,7 @@ public class Javac8RefScanner extends JavacTreeRefScanner { JCTree.JCLambda lambda = (JCTree.JCLambda)node; final Type type = lambda.type; final Symbol.TypeSymbol symbol = type.asElement(); - sink.sinkDeclaration(new JavacDefSymbol(symbol, Tree.Kind.LAMBDA_EXPRESSION, lambda.pos)); + sink.sinkReference(new JavacRefSymbol(symbol, Tree.Kind.LAMBDA_EXPRESSION)); return super.visitLambdaExpression(node, sink); } @@ -26,7 +26,8 @@ public class Javac8RefScanner extends JavacTreeRefScanner { public Tree visitMemberReference(MemberReferenceTree node, JavacTreeScannerSink sink) { JCTree.JCMemberReference memberRef = (JCTree.JCMemberReference)node; final Symbol methodSymbol = memberRef.sym; - sink.sinkDeclaration(new JavacDefSymbol(methodSymbol, Tree.Kind.MEMBER_REFERENCE, memberRef.pos)); + sink.sinkReference(new JavacRefSymbol(methodSymbol, Tree.Kind.IDENTIFIER)); + sink.sinkReference(new JavacRefSymbol(memberRef.type.asElement(), Tree.Kind.MEMBER_REFERENCE)); return super.visitMemberReference(node, sink); } } diff --git a/jps/javac-ref-scanner-8/testData/referenceIndex/lambda/initialIndex.txt b/jps/javac-ref-scanner-8/testData/referenceIndex/lambda/initialIndex.txt index 9866689e037a..f2c20fa56dc4 100644 --- a/jps/javac-ref-scanner-8/testData/referenceIndex/lambda/initialIndex.txt +++ b/jps/javac-ref-scanner-8/testData/referenceIndex/lambda/initialIndex.txt @@ -5,7 +5,7 @@ Backward References: Lambda in Lambda Lambda.(0) in Lambda Lambda.main(1) in Lambda -fun_expr(java.lang.Runnable at 80) in Lambda +fun_expr(java.lang.Runnable) in Lambda java.lang.Object.(0) in Lambda java.lang.String in Lambda java.lang.Thread in Lambda \ No newline at end of file diff --git a/jps/javac-ref-scanner-8/testData/referenceIndex/methodReference/initialIndex.txt b/jps/javac-ref-scanner-8/testData/referenceIndex/methodReference/initialIndex.txt index 4acfc9f3c523..6d3d1d9f80ae 100644 --- a/jps/javac-ref-scanner-8/testData/referenceIndex/methodReference/initialIndex.txt +++ b/jps/javac-ref-scanner-8/testData/referenceIndex/methodReference/initialIndex.txt @@ -5,6 +5,7 @@ Backward References: MethodReference in MethodReference MethodReference.(0) in MethodReference MethodReference.main(1) in MethodReference +fun_expr(java.lang.Runnable) in MethodReference java.lang.Object.(0) in MethodReference java.lang.String in MethodReference java.lang.Thread in MethodReference diff --git a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java index 2b1033a76f1e..d3cba4f604d9 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java @@ -85,17 +85,15 @@ public class BackwardReferenceIndexWriter { myIndex.close(); } - synchronized List asLightUsages(Collection symbols) { + synchronized void writeReferences(JavaFileObject file, Collection refs) { final ByteArrayEnumerator byteSeqEum = myIndex.getByteSeqEum(); - return ContainerUtil.mapNotNull(symbols, new Function() { + final List usages = ContainerUtil.mapNotNull(refs, new Function() { @Override public LightUsage fun(JavacRefSymbol symbol) { return LightUsage.fromSymbol(symbol, byteSeqEum); } }); - } - synchronized void writeReferences(JavaFileObject file, Collection usages) { final int fileId = enumerateFile(file); if (myRebuild) { for (LightUsage usage : usages) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceRegistrar.java b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceRegistrar.java index d73fc82368cd..6ee7f11e84a1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceRegistrar.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceRegistrar.java @@ -18,12 +18,10 @@ package org.jetbrains.jps.backwardRefs; import com.sun.source.tree.Tree; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Type; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; import org.jetbrains.jps.javac.ast.api.JavacFileReferencesRegistrar; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; import javax.tools.*; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; @@ -45,11 +43,8 @@ public class BackwardReferenceRegistrar implements JavacFileReferencesRegistrar } @Override - public void registerFile(JavaFileObject file, Set refs, Collection defs) { - - List fileIndexData = null; - - for (JavacDefSymbol def : defs) { + public void registerFile(JavaFileObject file, Set refs, Collection defs) { + for (JavacRefSymbol def : defs) { Tree.Kind kind = def.getPlaceKind(); if (kind == Tree.Kind.CLASS) { Symbol.ClassSymbol sym = (Symbol.ClassSymbol)def.getSymbol(); @@ -70,22 +65,8 @@ public class BackwardReferenceRegistrar implements JavacFileReferencesRegistrar } myWriter.writeHierarchy(sym, supers); } - else if (kind == LightUsage.MEMBER_REFERENCE || kind == LightUsage.LAMBDA_EXPRESSION) { - if (fileIndexData == null) { - fileIndexData = new ArrayList(); - } - fileIndexData.add(def); - } } - final List usages; - if (fileIndexData != null) { - fileIndexData.addAll(refs); - usages = myWriter.asLightUsages(fileIndexData); - } - else { - usages = myWriter.asLightUsages(refs); - } - myWriter.writeReferences(file, usages); + myWriter.writeReferences(file, refs); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/LightUsage.java b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/LightUsage.java index 833fe9a20e8f..ebd4cfdcd0ce 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/LightUsage.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/LightUsage.java @@ -24,7 +24,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.java.dependencyView.RW; import org.jetbrains.jps.builders.storage.BuildDataCorruptedException; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; import java.io.DataInput; @@ -219,15 +218,8 @@ public abstract class LightUsage implements RW.Savable { } public static class LightFunExprUsage extends LightUsage { - private final int myOffset; - - public LightFunExprUsage(int owner, int offset) { + public LightFunExprUsage(int owner) { super(owner); - myOffset = offset; - } - - public int getOffset() { - return myOffset; } @NotNull @@ -241,7 +233,6 @@ public abstract class LightUsage implements RW.Savable { try { out.writeByte(FUN_EXPR_MARKER); DataInputOutputUtil.writeINT(out, getOwner()); - DataInputOutputUtil.writeINT(out, getOffset()); } catch (IOException e) { throw new BuildDataCorruptedException(e); @@ -294,7 +285,7 @@ public abstract class LightUsage implements RW.Savable { case FIELD_MARKER: return new LightFieldUsage(DataInputOutputUtil.readINT(in), DataInputOutputUtil.readINT(in)); case FUN_EXPR_MARKER: - return new LightFunExprUsage(DataInputOutputUtil.readINT(in), DataInputOutputUtil.readINT(in)); + return new LightFunExprUsage(DataInputOutputUtil.readINT(in)); } throw new AssertionError(); } @@ -311,7 +302,7 @@ public abstract class LightUsage implements RW.Savable { final Tree.Kind kind = refSymbol.getPlaceKind(); if (symbol instanceof Symbol.ClassSymbol) { if (kind == LAMBDA_EXPRESSION || kind == MEMBER_REFERENCE) { - return new LightFunExprUsage(id(symbol, byteArrayEnumerator), ((JavacDefSymbol)refSymbol).getOffset()); + return new LightFunExprUsage(id(symbol, byteArrayEnumerator)); } else if (!isPrivate(symbol) && !isAnonymous(symbol)) { return new LightClassUsage(id(symbol, byteArrayEnumerator)); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferencesCollector.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferencesCollector.java index 54d95fc1c4f2..e38e9ea28f66 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferencesCollector.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferencesCollector.java @@ -26,7 +26,6 @@ import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.ClientCodeException; import com.sun.tools.javac.util.Name; import gnu.trove.THashSet; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; import org.jetbrains.jps.javac.ast.api.JavacFileReferencesRegistrar; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; import org.jetbrains.jps.service.JpsServiceManager; @@ -109,10 +108,10 @@ public class JavacReferencesCollector { final Set symbols = new THashSet(); scanImports(myCurrentCompilationUnit, symbols); for (JavacFileReferencesRegistrar listener : myOnlyImportsListeners) { - listener.registerFile(sourceFile, symbols, Collections.emptySet()); + listener.registerFile(sourceFile, symbols, Collections.emptySet()); } if (myFullASTListeners.length != 0) { - final Collection defs = new ArrayList(); + final Collection defs = new ArrayList(); myAstScanner.scan(myCurrentCompilationUnit, new JavacTreeScannerSink() { @Override public void sinkReference(JavacRefSymbol ref) { @@ -120,7 +119,7 @@ public class JavacReferencesCollector { } @Override - public void sinkDeclaration(JavacDefSymbol def) { + public void sinkDeclaration(JavacRefSymbol def) { defs.add(def); } }); diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeRefScanner.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeRefScanner.java index 6e255cae4b7f..b1d3da21e420 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeRefScanner.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeRefScanner.java @@ -20,7 +20,6 @@ import com.sun.source.util.TreeScanner; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.tree.JCTree; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; import javax.lang.model.element.ElementKind; @@ -86,8 +85,9 @@ class JavacTreeRefScanner extends TreeScanner { public Tree visitClass(ClassTree node, JavacTreeScannerSink sink) { JCTree.JCClassDecl classDecl = (JCTree.JCClassDecl)node; Symbol.ClassSymbol sym = classDecl.sym; - sink.sinkReference(new JavacRefSymbol(sym, Tree.Kind.CLASS)); - sink.sinkDeclaration(new JavacDefSymbol(sym, Tree.Kind.CLASS, classDecl.pos)); + final JavacRefSymbol ref = new JavacRefSymbol(sym, Tree.Kind.CLASS); + sink.sinkReference(ref); + sink.sinkDeclaration(ref); return super.visitClass(node, sink); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java index 19192fdfd4f7..a31b325e3c6e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java @@ -15,12 +15,11 @@ */ package org.jetbrains.jps.javac.ast; -import org.jetbrains.jps.javac.ast.api.JavacDefSymbol; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; interface JavacTreeScannerSink { void sinkReference(JavacRefSymbol ref); - void sinkDeclaration(JavacDefSymbol def); + void sinkDeclaration(JavacRefSymbol def); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacDefSymbol.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacDefSymbol.java deleted file mode 100644 index 8c6864fc6a8f..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacDefSymbol.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.jps.javac.ast.api; - -import com.sun.source.tree.Tree; -import com.sun.tools.javac.code.Symbol; - -public class JavacDefSymbol extends JavacRefSymbol { - private final int myOffset; - - public JavacDefSymbol(Symbol symbol, Tree.Kind kind, int offset) { - super(symbol, kind); - myOffset = offset; - } - - public int getOffset() { - return myOffset; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - - JavacDefSymbol symbol = (JavacDefSymbol)o; - - if (myOffset != symbol.myOffset) return false; - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + myOffset; - return result; - } -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacFileReferencesRegistrar.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacFileReferencesRegistrar.java index 6e14f68fa512..8498ba7057c6 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacFileReferencesRegistrar.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacFileReferencesRegistrar.java @@ -25,5 +25,5 @@ public interface JavacFileReferencesRegistrar { boolean onlyImports(); - void registerFile(JavaFileObject file, Set refs, Collection defs); + void registerFile(JavaFileObject file, Set refs, Collection defs); } diff --git a/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTestBase.kt b/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTestBase.kt index 774581bc5636..c32128ba05a3 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTestBase.kt +++ b/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTestBase.kt @@ -19,13 +19,13 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.CharsetToolkit import com.intellij.util.PathUtil import com.sun.tools.javac.util.Convert -import org.jetbrains.jps.builders.JpsBuildTestCase -import org.jetbrains.jps.builders.TestProjectBuilderLogger -import org.jetbrains.jps.builders.logging.BuildLoggingManager +import org.jetbrains.jps.backwardRefs.BackwardReferenceIndexWriter import org.jetbrains.jps.backwardRefs.ByteArrayEnumerator import org.jetbrains.jps.backwardRefs.CompilerBackwardReferenceIndex import org.jetbrains.jps.backwardRefs.LightUsage -import org.jetbrains.jps.backwardRefs.BackwardReferenceIndexWriter +import org.jetbrains.jps.builders.JpsBuildTestCase +import org.jetbrains.jps.builders.TestProjectBuilderLogger +import org.jetbrains.jps.builders.logging.BuildLoggingManager import java.io.File abstract class ReferenceIndexTestBase : JpsBuildTestCase() { @@ -129,7 +129,7 @@ abstract class ReferenceIndexTestBase : JpsBuildTestCase() { byteArrayEnumerator) + "(" + this.parameterCount + ")" is LightUsage.LightFieldUsage -> this.owner.asName(byteArrayEnumerator) + "." + this.name.asName(byteArrayEnumerator) is LightUsage.LightClassUsage -> this.owner.asName(byteArrayEnumerator) - is LightUsage.LightFunExprUsage -> "fun_expr(" + this.owner.asName(byteArrayEnumerator) + " at " + this.offset + ")"; + is LightUsage.LightFunExprUsage -> "fun_expr(" + this.owner.asName(byteArrayEnumerator) + ")" else -> throw UnsupportedOperationException() } } \ No newline at end of file