Lines 44-49
Link Here
|
44 |
|
44 |
|
45 |
package org.netbeans.modules.cnd.modelimpl.csm; |
45 |
package org.netbeans.modules.cnd.modelimpl.csm; |
46 |
|
46 |
|
|
|
47 |
import org.netbeans.modules.cnd.api.model.xref.CsmReference; |
48 |
import org.netbeans.modules.cnd.api.model.xref.CsmReferenceKind; |
47 |
import org.netbeans.modules.cnd.modelimpl.csm.resolver.ResolverFactory; |
49 |
import org.netbeans.modules.cnd.modelimpl.csm.resolver.ResolverFactory; |
48 |
import org.netbeans.modules.cnd.api.model.util.CsmKindUtilities; |
50 |
import org.netbeans.modules.cnd.api.model.util.CsmKindUtilities; |
49 |
import org.netbeans.modules.cnd.modelimpl.debug.TraceFlags; |
51 |
import org.netbeans.modules.cnd.modelimpl.debug.TraceFlags; |
Lines 56-62
Link Here
|
56 |
import org.netbeans.modules.cnd.api.model.services.CsmIncludeResolver; |
58 |
import org.netbeans.modules.cnd.api.model.services.CsmIncludeResolver; |
57 |
import org.netbeans.modules.cnd.api.model.services.CsmInstantiationProvider; |
59 |
import org.netbeans.modules.cnd.api.model.services.CsmInstantiationProvider; |
58 |
import org.netbeans.modules.cnd.api.model.util.CsmBaseUtilities; |
60 |
import org.netbeans.modules.cnd.api.model.util.CsmBaseUtilities; |
59 |
import org.netbeans.modules.cnd.api.model.util.UIDs; |
|
|
60 |
import org.netbeans.modules.cnd.utils.cache.TextCache; |
61 |
import org.netbeans.modules.cnd.utils.cache.TextCache; |
61 |
import org.netbeans.modules.cnd.modelimpl.parser.CsmAST; |
62 |
import org.netbeans.modules.cnd.modelimpl.parser.CsmAST; |
62 |
import org.netbeans.modules.cnd.modelimpl.parser.generated.CPPTokenTypes; |
63 |
import org.netbeans.modules.cnd.modelimpl.parser.generated.CPPTokenTypes; |
Lines 67-73
Link Here
|
67 |
import org.netbeans.modules.cnd.modelimpl.debug.DiagnosticExceptoins; |
68 |
import org.netbeans.modules.cnd.modelimpl.debug.DiagnosticExceptoins; |
68 |
import org.netbeans.modules.cnd.modelimpl.impl.services.InstantiationProviderImpl; |
69 |
import org.netbeans.modules.cnd.modelimpl.impl.services.InstantiationProviderImpl; |
69 |
import org.netbeans.modules.cnd.modelimpl.repository.PersistentUtils; |
70 |
import org.netbeans.modules.cnd.modelimpl.repository.PersistentUtils; |
70 |
import org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils; |
|
|
71 |
import org.netbeans.modules.cnd.modelimpl.textcache.NameCache; |
71 |
import org.netbeans.modules.cnd.modelimpl.textcache.NameCache; |
72 |
import org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter; |
72 |
import org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter; |
73 |
import org.netbeans.modules.cnd.modelimpl.uid.UIDObjectFactory; |
73 |
import org.netbeans.modules.cnd.modelimpl.uid.UIDObjectFactory; |
Lines 100-111
Link Here
|
100 |
// FIX for lazy resolver calls |
100 |
// FIX for lazy resolver calls |
101 |
private CharSequence[] qname = null; |
101 |
private CharSequence[] qname = null; |
102 |
private CsmUID<CsmClassifier> classifierUID; |
102 |
private CsmUID<CsmClassifier> classifierUID; |
103 |
private CsmObject owner; |
|
|
104 |
|
103 |
|
105 |
// package-local - for facory only |
104 |
// package-local - for facory only |
106 |
TypeImpl(CsmClassifier classifier, int pointerDepth, boolean reference, int arrayDepth, AST ast, CsmFile file, CsmOffsetable offset) { |
105 |
TypeImpl(CsmClassifier classifier, int pointerDepth, boolean reference, int arrayDepth, AST ast, CsmFile file, CsmOffsetable offset) { |
107 |
super(file, offset == null ? getStartOffset(ast) : offset.getStartOffset(), offset == null ? getEndOffset(ast) : offset.getEndOffset()); |
106 |
super(file, offset == null ? getStartOffset(ast) : offset.getStartOffset(), offset == null ? getEndOffset(ast) : offset.getEndOffset()); |
108 |
this._setClassifier(classifier); |
107 |
this.initClassifier(classifier); |
109 |
this.pointerDepth = (byte) pointerDepth; |
108 |
this.pointerDepth = (byte) pointerDepth; |
110 |
setFlags(FLAGS_REFERENCE, reference); |
109 |
setFlags(FLAGS_REFERENCE, reference); |
111 |
this.arrayDepth = (byte) arrayDepth; |
110 |
this.arrayDepth = (byte) arrayDepth; |
Lines 113-119
Link Here
|
113 |
setFlags(FLAGS_CONST, _const); |
112 |
setFlags(FLAGS_CONST, _const); |
114 |
if (classifier == null) { |
113 |
if (classifier == null) { |
115 |
CndUtils.assertTrueInConsole(false, "why null classifier?"); |
114 |
CndUtils.assertTrueInConsole(false, "why null classifier?"); |
116 |
this._setClassifier(initClassifier(ast)); |
115 |
this.initClassifier(initClassifier(ast)); |
117 |
this.classifierText = initClassifierText(ast); |
116 |
this.classifierText = initClassifierText(ast); |
118 |
} else { |
117 |
} else { |
119 |
setFlags(FLAGS_TYPE_WITH_CLASSIFIER, true); |
118 |
setFlags(FLAGS_TYPE_WITH_CLASSIFIER, true); |
Lines 537-543
Link Here
|
537 |
lastCache = newCachePair; |
536 |
lastCache = newCachePair; |
538 |
} |
537 |
} |
539 |
classifier = _getClassifier(); |
538 |
classifier = _getClassifier(); |
540 |
putTypeOwner(); |
|
|
541 |
} |
539 |
} |
542 |
if (isInstantiation() && CsmKindUtilities.isTemplate(classifier) && !((CsmTemplate)classifier).getTemplateParameters().isEmpty()) { |
540 |
if (isInstantiation() && CsmKindUtilities.isTemplate(classifier) && !((CsmTemplate)classifier).getTemplateParameters().isEmpty()) { |
543 |
CsmInstantiationProvider ip = CsmInstantiationProvider.getDefault(); |
541 |
CsmInstantiationProvider ip = CsmInstantiationProvider.getDefault(); |
Lines 615-632
Link Here
|
615 |
return obj; |
613 |
return obj; |
616 |
} |
614 |
} |
617 |
|
615 |
|
618 |
void setOwner(CsmObject owner) { |
|
|
619 |
this.owner = owner; |
620 |
} |
621 |
|
622 |
protected void putTypeOwner() { |
623 |
if (owner != null) { |
624 |
if (UIDProviderIml.isPersistable(UIDs.get(owner))) { |
625 |
RepositoryUtils.put(owner); |
626 |
} |
627 |
} |
628 |
} |
629 |
|
630 |
protected CsmClassifier renderClassifier(CharSequence[] qname) { |
616 |
protected CsmClassifier renderClassifier(CharSequence[] qname) { |
631 |
CsmClassifier result = null; |
617 |
CsmClassifier result = null; |
632 |
Resolver resolver = ResolverFactory.createResolver(this); |
618 |
Resolver resolver = ResolverFactory.createResolver(this); |
Lines 763-778
Link Here
|
763 |
} |
749 |
} |
764 |
|
750 |
|
765 |
protected CsmClassifier _getClassifier() { |
751 |
protected CsmClassifier _getClassifier() { |
766 |
CsmClassifier classifier = UIDCsmConverter.UIDtoDeclaration(classifierUID); |
752 |
CsmClassifier classifier = null; |
|
|
753 |
if (classifierUID != null) { |
754 |
classifier = UIDCsmConverter.UIDtoDeclaration(classifierUID); |
755 |
} else { |
756 |
FileImpl file = (FileImpl) getContainingFile(); |
757 |
CsmReference typeReference = file.getResolvedReference(new CsmTypeReferenceImpl(this)); |
758 |
if (typeReference != null) { |
759 |
CsmObject referencedObject = typeReference.getReferencedObject(); |
760 |
if (CsmKindUtilities.isClassifier(referencedObject)) { |
761 |
classifier = (CsmClassifier) referencedObject; |
762 |
//System.out.println("Hit "+classifier); |
763 |
} |
764 |
} |
765 |
} |
767 |
// can be null if cached one was removed |
766 |
// can be null if cached one was removed |
768 |
return classifier; |
767 |
return classifier; |
769 |
} |
768 |
} |
770 |
|
769 |
|
771 |
final void _setClassifier(CsmClassifier classifier) { |
770 |
private void initClassifier(CsmClassifier classifier) { |
772 |
this.classifierUID = UIDCsmConverter.declarationToUID(classifier); |
771 |
this.classifierUID = UIDCsmConverter.declarationToUID(classifier); |
773 |
assert (classifierUID != null || classifier == null); |
772 |
assert (classifierUID != null || classifier == null); |
774 |
} |
773 |
} |
775 |
|
774 |
|
|
|
775 |
final void _setClassifier(final CsmClassifier classifier) { |
776 |
if (classifier == null) { |
777 |
FileImpl file = (FileImpl) getContainingFile(); |
778 |
file.removeResolvedReference(new CsmTypeReferenceImpl(this)); |
779 |
} |
780 |
this.classifierUID = UIDCsmConverter.declarationToUID(classifier); |
781 |
if (classifierUID != null && classifier != null && !CsmKindUtilities.isBuiltIn(classifier) && CsmBaseUtilities.isValid(classifier) && !CsmKindUtilities.isTypedef(classifier) |
782 |
//&& !CsmKindUtilities.isTemplate(classifier) && !isInstantiation() |
783 |
) { |
784 |
final FileImpl file = (FileImpl) getContainingFile(); |
785 |
file.addResolvedReference(new CsmTypeReferenceImpl(this), classifier); |
786 |
} |
787 |
assert (classifierUID != null || classifier == null); |
788 |
} |
789 |
|
776 |
@Override |
790 |
@Override |
777 |
public boolean isBuiltInBased(boolean resolveTypeChain) { |
791 |
public boolean isBuiltInBased(boolean resolveTypeChain) { |
778 |
CsmClassifier classifier; |
792 |
CsmClassifier classifier; |
Lines 871-874
Link Here
|
871 |
return "CachePair{" + "parseCount=" + parseCount + ", fileUID=" + fileUID + '}'; // NOI18N |
885 |
return "CachePair{" + "parseCount=" + parseCount + ", fileUID=" + fileUID + '}'; // NOI18N |
872 |
} |
886 |
} |
873 |
} |
887 |
} |
|
|
888 |
|
889 |
private static class CsmTypeReferenceImpl implements CsmReference { |
890 |
private final TypeImpl type; |
891 |
|
892 |
public CsmTypeReferenceImpl(TypeImpl type) { |
893 |
this.type = type; |
874 |
} |
894 |
} |
|
|
895 |
|
896 |
@Override |
897 |
public CsmReferenceKind getKind() { |
898 |
return CsmReferenceKind.DIRECT_USAGE; |
899 |
} |
900 |
|
901 |
@Override |
902 |
public CsmObject getReferencedObject() { |
903 |
return null; |
904 |
} |
905 |
|
906 |
@Override |
907 |
public CsmObject getOwner() { |
908 |
return null; |
909 |
} |
910 |
|
911 |
@Override |
912 |
public CsmObject getClosestTopLevelObject() { |
913 |
return null; |
914 |
} |
915 |
|
916 |
@Override |
917 |
public CsmFile getContainingFile() { |
918 |
throw new UnsupportedOperationException(); |
919 |
} |
920 |
|
921 |
@Override |
922 |
public int getStartOffset() { |
923 |
return type.getStartOffset(); |
924 |
} |
925 |
|
926 |
@Override |
927 |
public int getEndOffset() { |
928 |
return type.getEndOffset(); |
929 |
} |
930 |
|
931 |
@Override |
932 |
public Position getStartPosition() { |
933 |
throw new UnsupportedOperationException(); |
934 |
} |
935 |
|
936 |
@Override |
937 |
public Position getEndPosition() { |
938 |
throw new UnsupportedOperationException(); |
939 |
} |
940 |
|
941 |
@Override |
942 |
public CharSequence getText() { |
943 |
return type.classifierText; |
944 |
} |
945 |
|
946 |
@Override |
947 |
public String toString() { |
948 |
return type.classifierText+"["+type.getStartOffset()+","+type.getEndOffset()+"]"; //NOI18N |
949 |
} |
950 |
} |
951 |
} |