mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove offset from LightFunExprUsage
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ Backward References:
|
||||
Lambda in Lambda
|
||||
Lambda.<init>(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.<init>(0) in Lambda
|
||||
java.lang.String in Lambda
|
||||
java.lang.Thread in Lambda
|
||||
@@ -5,6 +5,7 @@ Backward References:
|
||||
MethodReference in MethodReference
|
||||
MethodReference.<init>(0) in MethodReference
|
||||
MethodReference.main(1) in MethodReference
|
||||
fun_expr(java.lang.Runnable) in MethodReference
|
||||
java.lang.Object.<init>(0) in MethodReference
|
||||
java.lang.String in MethodReference
|
||||
java.lang.Thread in MethodReference
|
||||
|
||||
+2
-4
@@ -85,17 +85,15 @@ public class BackwardReferenceIndexWriter {
|
||||
myIndex.close();
|
||||
}
|
||||
|
||||
synchronized List<LightUsage> asLightUsages(Collection<JavacRefSymbol> symbols) {
|
||||
synchronized void writeReferences(JavaFileObject file, Collection<JavacRefSymbol> refs) {
|
||||
final ByteArrayEnumerator byteSeqEum = myIndex.getByteSeqEum();
|
||||
return ContainerUtil.mapNotNull(symbols, new Function<JavacRefSymbol, LightUsage>() {
|
||||
final List<LightUsage> usages = ContainerUtil.mapNotNull(refs, new Function<JavacRefSymbol, LightUsage>() {
|
||||
@Override
|
||||
public LightUsage fun(JavacRefSymbol symbol) {
|
||||
return LightUsage.fromSymbol(symbol, byteSeqEum);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
synchronized void writeReferences(JavaFileObject file, Collection<LightUsage> usages) {
|
||||
final int fileId = enumerateFile(file);
|
||||
if (myRebuild) {
|
||||
for (LightUsage usage : usages) {
|
||||
|
||||
+3
-22
@@ -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<JavacRefSymbol> refs, Collection<JavacDefSymbol> defs) {
|
||||
|
||||
List<JavacRefSymbol> fileIndexData = null;
|
||||
|
||||
for (JavacDefSymbol def : defs) {
|
||||
public void registerFile(JavaFileObject file, Set<JavacRefSymbol> refs, Collection<JavacRefSymbol> 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<JavacRefSymbol>();
|
||||
}
|
||||
fileIndexData.add(def);
|
||||
}
|
||||
}
|
||||
|
||||
final List<LightUsage> usages;
|
||||
if (fileIndexData != null) {
|
||||
fileIndexData.addAll(refs);
|
||||
usages = myWriter.asLightUsages(fileIndexData);
|
||||
}
|
||||
else {
|
||||
usages = myWriter.asLightUsages(refs);
|
||||
}
|
||||
myWriter.writeReferences(file, usages);
|
||||
myWriter.writeReferences(file, refs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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<JavacRefSymbol> symbols = new THashSet<JavacRefSymbol>();
|
||||
scanImports(myCurrentCompilationUnit, symbols);
|
||||
for (JavacFileReferencesRegistrar listener : myOnlyImportsListeners) {
|
||||
listener.registerFile(sourceFile, symbols, Collections.<JavacDefSymbol>emptySet());
|
||||
listener.registerFile(sourceFile, symbols, Collections.<JavacRefSymbol>emptySet());
|
||||
}
|
||||
if (myFullASTListeners.length != 0) {
|
||||
final Collection<JavacDefSymbol> defs = new ArrayList<JavacDefSymbol>();
|
||||
final Collection<JavacRefSymbol> defs = new ArrayList<JavacRefSymbol>();
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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<Tree, JavacTreeScannerSink> {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -25,5 +25,5 @@ public interface JavacFileReferencesRegistrar {
|
||||
|
||||
boolean onlyImports();
|
||||
|
||||
void registerFile(JavaFileObject file, Set<JavacRefSymbol> refs, Collection<JavacDefSymbol> defs);
|
||||
void registerFile(JavaFileObject file, Set<JavacRefSymbol> refs, Collection<JavacRefSymbol> defs);
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user